2016-10-08 3 views
1

私はC言語を使ってコードを書く方法を自分で学習しています。この後者をもう少し深く勉強するために、いくつかの基本的な演習を行っています。そのため、今日はscanf()命令を使用して少し問題に直面しました。 Infactは、次のコード:コンパイル時にCのscanf()に関する問題

int main() { 

    char inputOne; 
    char inputTwo; 

    printf("Insert a char: "); 
    scanf("%c", &inputOne); 
    // &inputOne is the pointer to inputOne. 

    printf("Insert another char: "); 
    scanf("%c", &inputTwo); 

    if (inputOne == inputTwo) { 
    printf("You have inserted the same char!\n"); 
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo); 
    } else { 
    printf("You have inserted two different chars!\n"); 
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo); 
    } 

} 

はエラーを返しませんが、私は、ターミナル上でアプリケーションを起動したときに、私は2番目の文字を挿入することはできませんよ。ここ は何が起こるかの例です:

Macbook-Pro-di-Rodolfo:~ Rodolfo$ /Users/Rodolfo/Documents/GitHub/Fondamenti\ di\ C/esempio-if-else ; exit; 
Insert a char: a 
Insert a second char: You have inserted two different chars! 
Chars inserted: a, 

logout 

[Process completed] 

これがなぜ起こるか誰が私を説明できますか?

+2

ワン*この質問の重複の[見つけることができます**こちら**](https://stackoverflow.com/questions/1959255/ c-read-a-single-char-from-stdin-and-failing-w-scanf-getchar)を使用します。 – WhozCraig

+0

@ user3121023変換仕様の前後のスペース数が最終結果に影響しますか?言い換えれば、 'scanf("%c "、&inputTwo)'と 'scanf("%c "、&inputTwo)'はコンパイラと同じですか? – rudicangiotti

+0

@ user3121023申し訳ありませんが、私の最初のコメントでは正しく表示されていませんが、 'scanf()'が引用符と変換指定 '%'の間の空白の数から同じように振る舞い、 。つまり、「%c」と「%c」が同じものを出力しているとします。 – rudicangiotti

答えて

1

第2文字の入力としてline feedが入力されます。あなたはそれを防ぐために、再度inputTwoを取ることができます:*何百もの

int main() { 

    char inputOne; 
    char inputTwo; 

    printf("Insert a char: "); 
    scanf("%c", &inputOne); 
    // &inputOne is the pointer to inputOne. 

    printf("Insert another char: "); 
    scanf("%c", &inputTwo); 
    scanf("%c", &inputTwo); 

    if (inputOne == inputTwo) { 
    printf("You have inserted the same char!\n"); 
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo); 
    } else { 
    printf("You have inserted two different chars!\n"); 
    printf("Chars inserted: %c, %c\n", inputOne, inputTwo); 
    } 

}