检查输入是否为C中的整数类型

标签 c input integer

问题是我不能使用 atoi 或任何其他类似的函数(我很确定我们应该依赖数学运算)。

 int num; 
 scanf("%d",&num);
 if(/* num is not integer */) {
  printf("enter integer");
  return;
 }

我试过:

(num*2)/2 == num
num%1==0
if(scanf("%d",&num)!=1)

但这些都不起作用。

有什么想法吗?

最佳答案

num 将始终包含一个整数,因为它是一个 int。您的代码的真正问题是您没有检查scanf 返回值。 scanf返回成功读取的项目数,因此在这种情况下它必须返回 1 以获得有效值。如果不是,则输入了一个无效的整数值,并且 num 变量可能没有被更改(即仍然具有任意值,因为您没有初始化它)。

根据您的评论,您只想让用户输入一个整数,然后输入回车键。不幸的是,这不能简单地通过 scanf("%d\n") 实现,但这里有一个技巧:

int num;
char term;
if(scanf("%d%c", &num, &term) != 2 || term != '\n')
    printf("failure\n");
else
    printf("valid integer followed by enter key\n");

关于检查输入是否为C中的整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072190/

相关文章:

c - 读写文件 open() read()

c++ - 2 第 3 方 C 和 C++ 库具有与 Object 相同的类和结构名称,因此我得到对 'Object' 的引用是不明确的错误

javascript - 带有按钮单击和动态输入定位的表单中的空数组

Javascript 文件阅读器按名称排序

java - 将每一行从整数列表转换为整数数组?

c - pjsip 2.5本地sdp端口错误

c - localtime(_r) 反转行为

hadoop - 在hadoop上使用分隔符以正确的格式创建此文本文件

python - 拆分包含字符串和整数的列表

algorithm - 如何轻松地将一个整数转换为两个整数并进行逆转换?