|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- int main()
- {
- double sum = 0,num = 0;
- int status;
- do
- {
- printf("请输入数字:");
- do
- {
- sum = sum + num;
- status = scanf("%lf",&num);
- }while (getchar()!= '\n' && status == 1);
- }while(status == 1);
- return 0;
- }
复制代码
中间的部分
- do
- {
- sum = sum + num;
- status = scanf("%lf",&num);
- }while (getchar()!= '\n' && status == 1);
复制代码
逻辑是怎么样的?不太明白,中间有其他字符间隔的时候不是应该这一行就跳过了吗?为什么还会继续判断有没有数字?
scanf函数是从标准输入流中获取符合格式的输入,调用成功的时候返回值为之前获取的格式化字符的数量,调用失败时返回值小于其数量。
比如说我输入 7.6a8.5
%f只能获取数值,所以在scanf获取完7.6后,获取a的时候发现不符合条件,获取中断,但是此时因为获取失败,输入流中仍然有a这个字符,然后函数结束。
执行到while的时候getchar()函数,这个getchar是从a开始获取,只获取一个字符,并且没有赋值,于是输入流中的a就相当于被getchar()获取并丢弃了。
接着是判断status,因为之前scanf在获取7.6时成功了,返回给status的值是非零的,具体返回多少我也不太清楚,不过知道此时是非零的,所以判断通过,继续执行。
下一次执行时,因为字符a已经被getchar()函数获取并丢弃了,所以从8开始执行,这样就是整个逻辑。
所以说只有在数值之间只有一个分隔符的时候,程序运行结果和预期结果才是相同的,你可以自己尝试一下。
|
|