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

时间:2014-05-12 13:31:25

标签: c

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

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

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

将其全部读入包含fgets()的字符串。

如果您只想让他们输入的所有内容都是单个int,请遍历字符串并在每个字符上查找isdigit(),然后当您发现它只是数字时,请调用{{1如果没有,则发出错误并重新提示。

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