Code Bye

求指导C一个关于scanf拿不拿到值得问题

#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,不解,求指导惑。
解决方案

20

当题主某次输入q的时候,是 scanf( “%d”, &num ) ;先读取的,但由于类型无法匹配,所以读取失败,题主可以通过scanf返回值得知此次读取失败了,输入缓冲区还是q\n
然后就执行到了scanf( “%c”, &end ) ;end成功读取了q字符,之后while  ( end != “q” ) 跳出循环

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指导C一个关于scanf拿不拿到值得问题