2011-11-23 159 views
0

如何簡單而正確地檢查用戶是否輸入數字而不是C語言中的字符或字符串?我試圖寫一些循環包含:C - 如何檢查輸入的數字

if (scanf("%d",&number)=1) 

但他們從來沒有工作或結束。當輸入一個數字時循環應該結束。

+3

我不認爲這樣的東西應該編譯。 – MByD

+0

一些示例代碼將幫助 –

+0

@user:提高編譯器的警告級別,**介意警告** – pmg

回答

4

應該

if (scanf("%d", &number) == 1) // Notice the two ='s, not just one 

=是賦值運算符,雙==是平等的測試。

+2

但scanf不是左值,它不應該是可分配的。 – MByD

+0

@MBYD是的我知道,但這是他所說的他使用的,所以這是我必須繼續的信息。也許他的編譯器非常糟糕。我只是沒有時間在所有事情上進行猜測。 –

+0

這不太可能是編譯器故障。無論如何,這不是批評,只是想知道。 – MByD

1

我想你想要這樣的:

for (scanf(" %d", &number); (number < -100 || number > 100); scanf(" %d", &number)) { 
    printf("you didn't enter a valid number, try again >"); 
} 
+0

好吧,請記住'isdigit'帶有一個字符,並告訴你該字符是否是字符'0'到'9'中的一個字符。 –

+0

是的,這有助於瞭解上下文。但是我們也不知道他不想要大於9或小於1的數字,所以測試'number> = 1 && number <= 9'可能不太好。你真的幾乎必須檢查'scanf'的返回值來做到這一點。 –

+0

上下文並不重要。我只有幾個程序需要驗證,如果輸入的值是一個數字(不只是一個數字)。例如,數字可以從-100到100.如果用戶輸入一個字母或其他東西,那麼應該顯示一條消息,表示輸入的值不正確,用戶必須再次輸入該值。這應該繼續,直到輸入一個數字。 –

0

這是否適合您的上下文:

char ch;int g; 
for(ch=getc(stdin);isalpha(ch);ch=getc(stdin)) 
{ 
printf("\nenter numbers only"); 
while(isalpha(getc(stdin))){} 
} 
ungetc(ch,stdin); 
scanf("%d",&g); 
printf("number entered %d",g); 
1

你行應該僅僅是: if (scanf("%d",&number)){

如果輸入比其他一些東西,它將導致:if(0){,而不是if(1){