使用scanf()时如何区分整数和字符

我只是使用函数scanf() 。 代码如下:

 scanf("%d",&a); printf("%d",a); 

当我输入1时,它会像我想要的那样打印1。 但即使我输入1a,也会像以前一样打印1。 当用户输入不是整数的东西时((ex)2.3,12ab,1 a)我想向用户显示类似“输入整数”的警告。

我怎么解决这个问题?

fgets()它全部读入一个字符串。

如果你只是想让他们输入的所有内容都是一个int ,那么遍历字符串并在每个char上查找isdigit()然后当你发现它只是数字时,调用strtod() ,如果没有,则发出错误并重新启动-提示。

如果你想从同一输入行解析多个东西,那么你需要用strtok()来解析字符串以一次获得一个令牌,然后查看每个令牌并通过查看来确定它是否是一个数字如果每个字符都是isdigit()或等于'-' '.' 等等。 如果是这样,请使用strtol()strtod() (等)将其解析为数字(取决于您看到的内容,int或float / double。)否则,将标记解析为字符串或发出错误。