请考虑以下简单的C程序。如何测试输入是否正常
//C test
#include<stdio.h>
int main()
{
int a, b, c;
printf("Enter two numbers to add\n");
scanf("%d%d",&a,&b);
c = a + b;
printf("Sum of entered numbers = %d\n",c);
return 0;
}
你如何检查输入的值实际上是在一些合理的范围内的两个整数?目前,如果您只输入“a”,然后返回,您将得到输出“输入数字总和= 32767”。
我想阻止错误输入的示例。
- 2 3 4(错误的号码号码)
- 苹果(非数字)
- 11111111111111111111111111 1111111111111111111111111111111111111(数字超出范围)
或者我应该使用fgets
和sscanf
或甚至strtol
?
谢谢。也许在'fputs()'之后加一个'fflush()',以防在提示符末尾不包含'\ n')?另外,如果你输入一个200位数的数字,你可以从你的代码中得到多个输出。我不知道为什么。最后,有没有保证INT_MAX
marshall
@marshall 200位是由于'buf [n * 21 * 2]'引起的。根据需要调整大小。一个_could_动态增长'buf'应该'fgets()'得到没有'\ n'的输入。但这主要是IO问题,你的文章就是这样,但更多的是解析文章。 – chux
@marshall INT_MAX <= LONG_MAX肯定是对的。 '(l INT_MAX)'是否应该'long'的范围比'int'更宽。 –
chux