C语言如何应对随意输入

例如scanf("%d",&a);但用户随意输入如dhhd。导致循环卡住,该如何解决

在C语言中,当使用scanf()函数读取格式化输入时,如果用户输入的数据与格式不匹配,scanf()函数会被阻塞,导致程序卡住。

为了解决这个问题,可以采用以下几种方法:

使用fgets()函数读取字符串,再使用sscanf()函数转换成整型。这样可以在用户输入非整型数据时,跳过不合法的输入。

使用fscanf()函数读取整型数据,并使用feof()和ferror()函数检测文件是否读取完毕或发生错误。

使用fgets()函数读取一行字符串,再使用strtol()函数将字符串转换为整型。

使用getchar()函数读取字符,再判断读取的字符是否是数字,如果不是,则跳过。

在使用以上方法时,需要注意处理好错误和异常情况.

可以使用一个变量接收scanf()函数的返回值,如果正确读入一个整数返回1,如果没有正确读入则返回EOF,然后可以在一个while循环中清空缓冲区后,继续使用scanf()读入整数,直到成功为止.

修改如下:

参考链接:


https://baike.baidu.com/item/scanf/10773316?fr=aladdin

#include <stdio.h>

int main(void){
    
    int a;
    // https://baike.baidu.com/item/scanf/10773316?fr=aladdin 
    int num = scanf("%d",&a); 
    while(num!=1){ // 如果scanf()没有正确读入一个整数,则清空缓存区后继续读取一个整数 
        // https://jingyan.baidu.com/article/9f7e7ec0b5e4a86f28155415.html
        
        fflush(stdin);  // 清空缓冲区 
        num=scanf("%d",&a);
    }
    
    printf("a=%d\n",a);
    
    return 0;
}

img

1、给输入提示,确保用户知道应该输入什么,如:print(“请输入一个正整数”) 然后在scanf("%d",&a)
2、使用抛出异常,如:try { do something } catch(some error) { do something },把想要实现的部分放在try中,把报错提示放在catch中,然后在继续执行剩下的代码
3、直接定义一个大的字符数组,不管输入什么都能接收,不过在使用时需要进行字符与整型的转化

你想随意输入,那只能输入字符串,然后判断字符串是个什么格式,再转换成对应的数据
你想图省事直接写个%d,那输入的数据不能转化成数字它可不抛错误了吗
要不然你就多写几行代码,先判断scanf的返回值是正常还是异常,如果是异常那就写个gets把乱七八糟的输入全吸收掉,让用户重新输入

scanf会根据格式化符号%d自动甄别数字与非数字,非数字直接无视,是数字则接受。
你的问题可能是其它原因引起的吧?
在输入之前把变量初始化防止用户随意输入无效字符,误用了未初始化的值。