问题是我不能使用 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/