2014-10-17 51 views
0

那麼有程序正在執行它的功能,但我試圖檢查,如果用戶輸入的值是數字(不包含字母或符號)。所以基本上我使用if和isdigit或'/ 0'條件。程序編譯正確,但輸入少於3種類型(偶數...)時出現錯誤。它有什麼問題?只有當我需要的是當數字是0-999時跳過循環並且當它不是時重新提問,或者如果它不是數字。檢查字符是否包含數字並將其轉換爲INT

char x[5]; 
bool isgood; 
int tab[20][2],i=0,a; 
do 
{ 
    isgood = TRUE; 
    printf("Write a where 0<a<1000\n"); 
    scanf("%4s", x); 
    for (int j = 0; j < 4; j++) 
    { 
     if (isdigit(x[j])==0 || x[j]!='/0') isgood = FALSE; 
    } 
    a = atoi(x); 
    if (a<1000 && isgood == TRUE) break; 
} while (1); 
+2

其實,終止零或者是普通的'0'或''\ 0''。你的編譯器應該警告你。 – usr2564301 2014-10-17 22:35:52

+0

@WhozCraig實際上,如果isgood變得不合情理,這並不重要,因爲循環只能重複4次。 – Dnoren 2014-10-17 23:10:25

+0

@Dnoren啊。精神牙線101.它肯定是星期五。 – WhozCraig 2014-10-17 23:13:09

回答

1

錯誤:

  • 你的布爾邏輯
  • 你的空字符
  • 調用atoiisgoodFALSE

更改此:

isdigit(x[j])==0 || x[j]!='/0' 

要這樣:

isdigit(x[j])==0 && x[j]!='\0' 

這:

a = atoi(x); 
if (a<1000 && isgood == TRUE) break; 

要這樣:

if (isgood == TRUE) 
{ 
    a = atoi(x); 
    if (0<a && a<1000) 
     break; 
} 

這裏是做整個事情的一個更簡單的方法:

int x; 
char c; 
do 
{ 
    printf("Write a where 0<a<1000\n"); 
    if (scanf("%d",&x) == 0) 
     scanf("%c",&c); 
    else if (0<x && x<1000) 
     break; 
} 
while (1); 
+0

簡單的方法是不是真的工作。當我輸入與數字不同的東西時,程序就會變得瘋狂。要麼糾正你所說的話沒有幫助,但我認爲他們應該是你說的方式。 – Dnoren 2014-10-17 23:05:44

+0

@Dnoren:是的,我明白你的意思了。請參閱答案底部的修訂代碼。 – 2014-10-17 23:11:02

+0

現在它幾乎可以工作,但仍然存在一些問題。 1)當我輸入無效值(如'aaaa')時,它顯示消息「Write a where 0 Dnoren 2014-10-17 23:17:46

相關問題