2017-12-05 10 views
0

に空白を無視し、私は私のユーザー入力が同様またはB
入力であるかどうかを確認したい:「aAAAvbBなど無効チェックユーザ入力AまたはBの場合と

空白だろう A(またはB)の後 Aと前には許可されています。

入力チェックはユーザ入力有効な文字(AまたはB)またはunti EOF(CTRL + D)までに実行する必要があり

。今の

int check_input(void) 
{ 
    char check = 0; 
    int return_value = 0; 
    int num = 0; 
    int correct_input = 0; 
    int choice = 0; 

    do 
    { 
    return_value = scanf("%c",&check); 

    if (return_value == EOF) 
    { 
     return EOF; 
    } 
    else if (return_value == 1) 
    {  
     if(check == 'A') 
     { 
      choice = 1; 
      correct_input = 1; 
     } 
     else if(check == 'B') 
     { 
      choice = 2; 
      correct_input = 1; 
     } 
     else 
     { 
      printf("Error, Please input correct choice(A/B):"); 

     } 
    } 
    } while (correct_input == 0); 

    return choice; 
} 

にスペースを無視する方法を知らない:

私のコードは、このための基礎知識ではなく、残りの作業を実行する方法がわからを持っています。何か助けていただきありがとうございます

+0

おそらく、あなたは 'ISBLANK()'や 'isspace()'関数を探しています。両者の違いに注意してください。 –

+0

また、 'scanf()'をあなたのために行うこともできます。改行を含む先頭の空白をすべて無視する場合は、 'scanf()'形式の先頭にスペース文字を挿入するだけです。 –

+0

1文字を読むのではなく、 'fgets()'で1行全体を読む。次に、周囲の空白を整えて、それが単一の文字かどうかを確認します。 – Barmar

答えて

0

問題は、ユーザーが何かを入力しても、1文字をとることです。私はスペースを無視すると実際には悪化し、 "A B"は2つの有効な入力が "AB"になり、失敗すると思います。簡単な解決策は次のようになります。

"A""B"
char input[100]; 
scanf("%99s",input); 

strcmp。これは、入力値の間の区切り文字として空白を使用するので、一度に99文字を文字列(したがって、末尾に\0)として読み取るので、AまたはBに一致する単一の文字列のみが成功することができます。これは、もちろん、100文字の長さの文字列(例えば、e 99回、A scanfの読み取りeの99回、次のループはAだけを読みます)で中断します。

これを行うための適切な方法私は、たとえば、文字で文字を読み取ることがあると思う:

char input; 
int good = 0; 
while(1) { 
    input = getchar(); 
    if(input == ' ' || input == '\n') { 
     if(good==1) break; 
     good = 0; 
    } 
    else if(!good && (input == 'A' || input == 'B')) ++good; 
    else good = -1; 
}