我这样做,但遗憾的是它不工作,当输入为char /串崩溃等如何确保用户输入一个正数
如何解决呢?
while((scanf("%d",&numOfDef) != 1) && (numOfDef>0))
{
printf("not a pos num try again");
}
我这样做,但遗憾的是它不工作,当输入为char /串崩溃等如何确保用户输入一个正数
如何解决呢?
while((scanf("%d",&numOfDef) != 1) && (numOfDef>0))
{
printf("not a pos num try again");
}
实际上,需要两个变化进行:while((scanf("%d",&numOfDef) >= 0) && !(numOfDef>0))
首先,比较scanf
与返回值为0,其次的条件应该是scanf
要么!(numOfDef>0)
或(numOfDef<=0)
返回值(数据来源:http://www.geeksforgeeks.org/g-fact-10/) :
在C中,printf ()返回成功写入输出的字符数,scanf()返回成功读取的项数。
Ideone链接代码:http://ideone.com/TjtuDy
如果scanf失败,它将返回0,在这种情况下循环结束,并且numOfDef不会被设置。该变量保持未初始化。这不是理想的行为。 – 2501
当我建议的事情,它不会崩溃,但也跳过这一段时间,甚至不输入积分intger –
@RazBenNetanel:它现在工作吗? –
numOfDef = 0;
while((scanf("%d",&numOfDef) != 1) || (numOfDef<=0))
{
printf("not a pos num try again\n");
int ch;
while((ch=getchar())!= '\n' && ch != EOF);
if(ch == EOF){
numOfDef = 0;
break;
}
}
if(numOfDef == 0)
puts("Processing was discontinued.");
...
它往往是比较容易处理输入的字符串,从用户采取数字输入,即使,然后将字符串转换为数字:
#include<stdio.h>
int main (void) {
char buf[32] = {0};
int num = -1;
while (num < 0) {
printf (" Enter a positive number: ");
if (scanf (" %[^\n]%*c", buf) == 1) {
if (*buf < '0' || *buf > '9') continue;
sscanf (buf, " %d", &num);
}
}
printf ("\n You entered : %d\n\n", num);
return 0;
}
输出
$ ./bin/positive_entry
Enter a positive number: --1--1 1--1
Enter a positive number: #%@#&%$ u08$
Enter a positive number: wise guys^2
Enter a positive number: -127
Enter a positive number: -3
Enter a positive number: a
Enter a positive number: 2
You entered : 2
numOfDef> 0与你所需要的完全相反,用numOfDef尝试<1 –