次のプログラムでの scanf の動作について混乱しています。scanf は、文字のストリームが出力されるまで、一度入力したように見えますが、再度入力することはありません。
以下のCプログラムで
#include<stdio.h>
int main()
{
int i, j=0;
do
{
++j;
scanf("%d", &i);
printf("\n\n%d %d\n\n", i, j);
}
while((i!=8) && (j<10));
printf("\nJ = %d\n", j);
return 0;
}
ここで、任意の整数プログラムを入力するまでは完全に正常に動作しますが、文字が入力されると、最後に入力された i の値を出力し続け、scanf が次の入力を取得するために (ループが終了したときに j が 10 になるまで) 停止しません。
output::
1 <-----1st input
1 1
2 <---- 2nd input
2 2
a <---- character input
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 10
J = 10
C ++でも同じことが起こっています。
#include<iostream>
using namespace std;
int main()
{
int i, j=0;
do
{
++j;
cin>>i;
cout<<i<<" "<<j<<"\n";
}
while((i!=8) && (j<10));
cout<<"\nj = "<<j<<"\n";
}
output of c++ program ::
1 <-----1st input
1 1
2 <-----2nd input
2 2
a <------ character input
0 3
0 4
0 5
0 6
0 7
0 8
0 9
0 10
j = 10
C++ での唯一の変更点は、最後の値の代わりに 0 が出力されることです。
ここでプログラムが整数値を期待していることは知っていますが、整数の代わりに文字を入力するとどうなるか知りたいですか? 上記のすべての理由は何ですか?