2014-01-17 131 views
1

我的目標是接受四位數字四個字符字符串。 (*「字符串不應該包含數字或特殊字符」);檢查輸入是否是一個字符串(僅限4個字符),如果沒有再次返回輸入

如果輸入無效,程序不應該終止,它必須允許用戶輸入詳細信息並繼續,直到他希望終止。

我能夠找到輸入是否是數字。

if(scanf("%d",&input)!=1) 
    { 
    printf("enter the number please"); 
    ... // i have option to re enter using while and flags 
    }else 
    { 
    // i continue my work 
    ... } 

要檢查它是四位數字我一直在使用的命令

i=0; 
num = input; 
while(num>0) 
{ 
i = i+1; 
num = num/10; 
} 
if(i==4){ 
...//i continue 
}else printf("please enter four digit"); 

我沒有檢查同爲人物的想法嘗試。 (我知道如何檢查它的長度使用strlen();)

請幫我在C代碼(也幫我減少/優化上述邏輯來檢查輸入是否是4位數字)

+1

'的atoi()','isaplha()'和返回值。 –

+1

您可以檢查'num> = 1000 && num <= 9999'來檢查4位數字。 – Rohan

+0

@Rhan,這很有幫助。我可以避免循環。謝謝。請幫我找到字符串中的解決方案。 – MELWIN

回答

2

我相信你想要2個輸入一個數字和一個字符串。您可以這樣做,因爲

int number= 0; 
char string[10] = { 0 }; 

do { 
    printf("please enter four digit"); 
    scanf("%d", &number); 
    if(number >=1000 && number<= 9999) 
     break; 
} while(1); 

do { 
    printf("please enter four character string"); 
    fgets(string, sizeof(string), stdin); 
    if(strlen(string) == 4) 
     break; 
} while(1); 
+0

fgets(字符串,sizeof(字符串),stdin); 請解釋這一行... – MELWIN

+0

它從用戶讀取字符串,爲更多'人fgets' – Rohan

+0

爲字符串它不工作,你能顯示一個完整的prgm。 的PRGM應顯示「無效,請重新輸入」,如果別的公司不正確的。讓它繼續,直到我按x。 上面的代碼永遠不會終止。即使我輸入有效或無效的輸入。請編輯答案或者給出新的答案。謝謝 – MELWIN

0

要檢查它是四位數字,你可以簡單地把支票數量是否在1000和9999之間(我假設你不想數0開始)

0
char input[16]; 
int ok = 1, k = 0; 
if (scanf("%s", input) > 0 && strlen(input) == 4) { 
    // check if it's a word 
    for (; k < 4; k++) 
    if (!isalpha(input[k])) { 
     // check if it's a number 
     for (int k = 0; k < 4; k++) 
      if (!isdigit(input[k])) 
       ok = 0; 
     break; 
    } 
} 
else ok = 0; 
if (!ok) 
    printf("invalid input, please enter a 4-digit number or 4-letter word"); 
else { 
    printf("valid input"); 
    ... 
} 
+0

爲什麼使用n> = 1000? – MELWIN

+0

因爲您希望您的輸入號碼有4位數字。 – Bogdan

+0

此代碼也不接受4個字母的字符串。請更正它。 :( – MELWIN

0

您可以使用gets()來獲取整行和檢查行長度。如果第一個字符在'0''9'之間,則檢查剩餘的3個數字。如果第一個字符是字符串中的有效字符,那麼檢查剩餘的3個字符,如果它在字符串中也是有效的。

+0

'gets()'是危險的並且不推薦使用 –

0

strtol可以幫助:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    char s[32], *p; 
    int x; 

    fgets(s, sizeof(s), stdin); 
    if ((p = strchr(s, '\n')) != NULL) 
     *p = '\0'; 
    x = (int)strtol(s, &p, 10); 
    if ((p - s) == 4) { 
     printf("%d\n", x); 
    } else { 
     printf("Please enter four digit\n"); 
    } 
    return 0; 
} 
相關問題