2011-11-05 58 views
0

我想限制輸入只在一個簡單的C應用程序中的數字,但我得到一個警告。我懷疑這是與以下部分有關。版本1是否是正確的做事方式?謝謝。C輸入只有小數

for(i=0;i< strlen(string); i++) 
{ 
    if(string[i]<"0" || string[i]>"9") 
     valid= FALSE; 
} 

OR

for(i=0;i< strlen(string); i++) 
{ 
    if(string[i]<'0' || string[i]>'9') 
     valid= FALSE; 
} 

我的代碼剩下的就是

void main() 

{ 
    char number[4]; 
    printf("Please enter a decimal number: "); 
    gets(number); 
    if (numeric(number)) 
     printf("'%s' is a valid number\n", number); 
    else 
     printf("'%s' is an invalid number\n", number); 
} 

爲了澄清我必須做的,根據我做的運動給時尚的檢查。謝謝。

+4

第二個是(更)正確。 –

+0

所以......你不想檢查小數點嗎? –

回答

1

版本一是完全錯誤的。它做指針比較,因爲字符串文字衰減到指針和字符被提升爲int

版本2即將關閉,但您應該使用。

Btw。,你知道i < strlen(string)在一個循環終止條件變成線性時間算法二次時間?

+0

感謝我得到的練習,我們必須使用這種方法。但我似乎無法找到我的錯誤 –

+1

@MarioPen:好吧,使用第二個選項(或'isdigit')解決問題? –

0

難道你不能只用if (scanf ("%d", &n)==1)或致電strtol

+0

'strtol'可以工作,但'sscanf'不會等同。例如,他的代碼表示'1a'是無效的,但'sscanf'仍然會將1轉換爲數字,所以它會返回1. –

+0

我特意寫了'scanf',假設他正在讀'stdin' –