| 
 | 
 
10鱼币 
 本帖最后由 小黑兹 于 2020-4-25 02:53 编辑  
 
答案: 
- #include <stdio.h>
 
  
- int main()
 
 - {
 
 -         double i =0, j = 0;
 
 -         int status;
 
 -         
 
 -         do
 
 -         {
 
 -                 printf("请输入合法的数字:");
 
 -                 do
 
 -                 {
 
 -                         j = j + i;
 
 -                         status = scanf("%lf", &i);
 
 -                         //printf("j=%.2lf,i=%.2lf,status=%d", j, i, status);
 
 -                         
 
 -                 }while(getchar() != '\n' && status == 1);
 
 -                 
 
 -         }while(status == 1);
 
 -         
 
 -         printf("结果是:%.2lf", j);
 
 -         
 
 -         return 0;
 
 - }
 
  复制代码 
 
关于这一段 
-                 do
 
 -                 {
 
 -                         j = j + i;
 
 -                         status = scanf("%lf", &i);
 
 -                         //printf("j=%.2lf,i=%.2lf,status=%d", j, i, status);
 
 -                         
 
 -                 }while(getchar() != '\n' && status == 1);
 
  复制代码 
 
为什么要用getchar()!='\n'&&status==1。 
status==1不是说扫描到非%d的输入scanf的返回值为0就结束吗? 
 
并且我实验了一下发现scanf是先扫描了第一个数然后跳过了下一个字符(如‘a’,并且只能跳一个字符,不然会出现错误)继续扫描直到结束。 
关于这跳过一个字符这是如何办到的 
 
为什么要用getchar()!='\n'&&status==1。 
status==1不是说扫描到非%d的输入scanf的返回值为0就结束吗? 
scanf结束了,但是while循环还要继续 
 
并且我实验了一下发现scanf是先扫描了第一个数然后跳过了下一个字符(如‘a’,并且只能跳一个字符,不然会出现错误)继续扫描直到结束。 
关于这跳过一个字符这是如何办到的 
scanf根据格式判断输入是否满足,底层用指针顺序移动而已,如果格式不匹配,就结束 
 
 
 |   
 
 
最佳答案
查看完整内容 
为什么要用getchar()!='\n'&&status==1。
status==1不是说扫描到非%d的输入scanf的返回值为0就结束吗?
scanf结束了,但是while循环还要继续
并且我实验了一下发现scanf是先扫描了第一个数然后跳过了下一个字符(如‘a’,并且只能跳一个字符,不然会出现错误)继续扫描直到结束。
关于这跳过一个字符这是如何办到的
scanf根据格式判断输入是否满足,底层用指针顺序移动而已,如果格式不匹配,就结束 
 
 
 
 
 
 
 |