我這樣做,但遺憾的是它不工作,當輸入爲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 –