2013-10-30 75 views
1

我試圖獲取用戶輸入的格式爲XXXXXXXXB的字符串,其中X是數字,B是字符。然後我想驗證輸入是正確的格式,並檢查字符,看看是否是A,B,C,D,所以我可以把正確的東西驗證C數組中的輸入並檢查char的值

問題我有我是如何檢查的價值char? 這是我的代碼

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

void validate(char array[]){ 
int i=0; 
for(i=0;i<9;i++){ 
    if(isdigit(array[i])){ 
    printf("Valid int %d at %d\n",array[i],i); 
    } 

    else if(isalpha(array[i])){ 
    printf("Valid alpha %c at %d\n",array[i],i); 

     switch(isalpha(array[9])){ 
     case 'a': 
      printf("Char a"); 
      break; 
     case 'b': 
      printf("Char b"); 
      break; 
     case 'c': 
      printf("Char c"); 
      break; 
     case 'd': 
      printf("Char d"); 
      break; 
     } 
    } 

} 
} 

    int main(void) { 
printf("Please Enter a string in format xxxxxxxxb x=digit b=char\n"); 
fflush(stdout); 
char input[9]; 

gets(input); 
validate(input); 

return 0; 
} 
+0

就在前面。記住C數組是基於零的。即一個N大小的數組的有效索引是'[0 ..(N-1)]'。假設你的輸入是'char [9]'兼容的(8位數字+ 1個特殊字符),所以你的數字檢查應該來自'[0..7]',你的特殊字符應該是'[8]'。 – WhozCraig

+0

switch語句中的isalpha檢查也不應該存在。 –

+0

和stdout上的'fflush()'是多餘的;它在printf調用中與換行符一起被刷新。並且不要使用'gets()',這是一個邪惡的函數,它已經從標準庫中棄用了。改用'fgets(input,sizeof(input),stdin)'。 – WhozCraig

回答

0

你可能要考慮兩個東西 -

1)檢查正常的指數 - array[9]在數組

2)檢查的10th index值區分大小寫 - bB不同。因此,您可能希望使用ascii值進行比較,或在比較之前將輸入字符轉換爲小寫字母switch

0

您沒有檢查數組中的正確位置。

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

void validate(char array[]){ 
int i=0; 
for(i=0;i<8;i++){ 
if(isdigit(array[i])){ 
printf("Valid int %d at %d\n",array[i],i); 
} 

else if(isalpha(array[8])){ 
printf("Valid alpha %c at %d\n",array[i],i); 

    switch(isalpha(array[9])){ 
    case 'a': 
     printf("Char a"); 
     break; 
    case 'b': 
     printf("Char b"); 
     break; 
    case 'c': 
     printf("Char c"); 
     break; 
    case 'd': 
     printf("Char d"); 
     break; 
    } 
} 

} 
} 

int main(void) { 
printf("Please Enter a string in format xxxxxxxxb x=digit b=char\n"); 
fflush(stdout); 
char input[9]; 

gets(input); 
validate(input); 

return 0; 
}