2013-06-24 85 views
1
int a; 
scanf("%d",&a); 

我怎样才能确保代码不会工作,如果一个非数字字符作为输入scanf()声明? [我需要一个解决方案并不让我改变数据类型char]验证输入整数

+1

通过读取scanf函数的文档,并利用返回值。简单! – enhzflep

+0

谢谢!返回值完成了这项工作。 – amulous

回答

2

如果第一个字符是不是一个数字,然后%d将无法​​匹配,并且a不会分配。 scanf的返回值告诉你分配了多少项目。如果是一个,那么显然它至少是部分有效的数字。如果它为零,这意味着它不能被解析为数字,并且您可能想要发出错误信号。

+0

谢谢!终于明白这一点。 – amulous

2

scanf返回代码会告诉你你的参数列表中有多少项被填充。这可能还不是你想要的:我认为你会发现输入“123four”仍然会返回1,其中a = 123。

0

您可以使用一个do while循环从用户 比如验证输入:

int read,a; 
do { 
     read = scanf("%c", &a); 
    }while(read != EOF && a != '\n'); //change validation here according to condition