2015-04-26 26 views
0

我這樣做,但遺憾的是它不工作,當輸入爲char /串崩潰等如何確保用戶輸入一個正數

如何解決呢?

while((scanf("%d",&numOfDef) != 1) && (numOfDef>0)) 
{ 
    printf("not a pos num try again"); 
} 
+2

numOfDef> 0與你所需要的完全相反,用numOfDef嘗試<1 –

回答

0

實際上,需要兩個變化進行: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

+0

如果scanf失敗,它將返回0,在這種情況下循環結束,並且numOfDef不會被設置。該變量保持未初始化。這不是理想的行爲。 – 2501

+0

當我建議的事情,它不會崩潰,但也跳過這一段時間,甚至不輸入積分intger –

+0

@RazBenNetanel:它現在工作嗎? –

0
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."); 
... 
+0

它不能說是一個錯誤。因爲由於OP的願望。 – BLUEPIXY

+0

正確的輸入不清楚。 – BLUEPIXY

+0

[DEMO](http://ideone.com/jARe3Y) – BLUEPIXY

0

它往往是比較容易處理輸入的字符串,從用戶採取數字輸入,即使,然後將字符串轉換爲數字:

#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 
+0

如果scanf失敗(返回非1值),則循環結束,並且您打印的值不是正值。 – 2501

+0

您可以通過調整測試來防止角落案件。這是一個例子。 –

+0

當然,我只是提到,因爲OP沒有明確說明具體要求是什麼。 – 2501

相關問題