#include <stdio.h>
int main()
{
int sum = 0, num = 0;
char end = 0;
while ( end != “q” )
{
scanf( “%d”, &num ) ;
sum += num;
scanf( “%c”, &end ) ;
num=0;
}
printf( “%d \n”, sum );
return 0;
}
/*
先输入1,num拿到1,然后累加,sum拿到1,之后本人输个9,按理应该是end拿到字符9,但是结果为10,它把9加上去了,貌似跳过了scanf,不解,求指导惑。
int main()
{
int sum = 0, num = 0;
char end = 0;
while ( end != “q” )
{
scanf( “%d”, &num ) ;
sum += num;
scanf( “%c”, &end ) ;
num=0;
}
printf( “%d \n”, sum );
return 0;
}
/*
先输入1,num拿到1,然后累加,sum拿到1,之后本人输个9,按理应该是end拿到字符9,但是结果为10,它把9加上去了,貌似跳过了scanf,不解,求指导惑。
解决方案
20
当题主某次输入q的时候,是 scanf( “%d”, &num ) ;先读取的,但由于类型无法匹配,所以读取失败,题主可以通过scanf返回值得知此次读取失败了,输入缓冲区还是q\n
然后就执行到了scanf( “%c”, &end ) ;end成功读取了q字符,之后while ( end != “q” ) 跳出循环
然后就执行到了scanf( “%c”, &end ) ;end成功读取了q字符,之后while ( end != “q” ) 跳出循环