我对以下程序中 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 的最后输入值并且永远不会停止(直到循环退出时 j 为 10),以便 scanf 接受下一个输入。
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 而不是最后一个值。
我知道这里程序需要整数值,但我想知道当输入字符代替整数时会发生什么?以上所有发生的原因是什么?