2017-11-22 6 views
0

ケースIscanfがintのバッファされた入力を読み取っていないのはなぜですか?

#include<stdio.h> 
    int main(){ 

    char c; 
    int i; 
    scanf("%c",&c); 

    scanf("%d",&i); 
    printf("%d",i); 
    } 

Input:a 
     23 
Output:23  

ケースII

#include<stdio.h> 
int main(){ 
    char c; 
    int i; 
    scanf("%c",&c); 
printf("%c",c); 
    scanf("%c",&c); 
printf("%c",c); 
    } 

Input:a 
OutPut:a 

場合にはI 2つの入力が必要とされている間、ケースIIに一つだけの入力が必要になるのはなぜ? ケースIIでバッファリングされた文字を読んで、ケースIで同じことが起こらないのはなぜですか?

+0

実際に['scanf'](http://en.cppreference.com/w/c/io/fscanf)の結果アイテム数をテストする必要があります。 –

答えて

1

scanf("%c",&c)文字を読み込み(と失敗する可能性があり、慎重程度scanf読み)

scanf("%d",&i)整数を読み込み(と失敗する可能性があります)

キャラクターは何ですか?さて、 'a'は文字ですが、改行などの空白文字もそうです。 aと入力してEnterキーを押すと、aと改行の両方をバッファリングされた入力に送信します。最初のscanfはaを読み取り、2番目のscanfは改行を読み取ります。

あなたが一方scanf("%c",&c); scanf("%d",&i);を行うと、最初のscanf「」は文字を読み込みます。第二のscanfは、整数を探しますが、唯一の空白(改行)がバッファ内に提供されていますので、それは空白をスキップし、番号が利用可能になったことが解析できる何かをお待ちしております。

関連する問題