kongyunfei 发表于 2021-8-5 23:50:38

求大佬看看


#include <stdio.h>

int main()
{
      float num = 0;
      double sum = 0;
      int status;

      do
      {
                printf("请输入合法的数字:");
                do
                {
                        sum = sum + num;
                        status = scanf("%f", &num); //请问这个是如何满足(用户可以在同一行输入多个数字,数字之间可以是任意一个分隔符)的条件呢?
                } while (getchar() != '\n' && status == 1);
      } while(status == 1);

      printf("结果是:%.2lf\n", sum);

      return 0;
}

大马强 发表于 2021-8-6 11:20:34

这代码我在不同地方设置断点调试,次次结果不同{:10_266:}
在这个代码中,判断条件为 输入不为回车并且scanf函数要执行,我发现只要scanf执行了,都会返回1,所以要想退出有两个条件,一是回车,二是让scanf不工作,我参考了这里关于scanf文章scanf用法
我猜测:连续输入两个字符,其中一个会被getchar接受,另一个sancf是不会管的,所以不执行,status为0,所以输入 1.2a1.2bc 时会退出循环,输出结果

kongyunfei 发表于 2021-8-6 13:24:09

大马强 发表于 2021-8-6 11:20
这代码我在不同地方设置断点调试,次次结果不同
在这个代码中,判断条件为 输入不为回车并且sca ...

如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的2是怎么读取的呢,我发的这个程序运行的话一行里面输入:1a2b3,它会自动把a和b忽略,最后还会输入1+2+3=6,这是为什么呢?

tian1234 发表于 2021-8-6 14:01:15

因为getchar()就是读取一个非0字符

大马强 发表于 2021-8-6 14:41:27

kongyunfei 发表于 2021-8-6 13:24
如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的 ...

1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3,能有计算结果吗https://static01.imgkr.com/temp/cd4faa4d07c648fc966d3ac4ab21a033.jpg

kongyunfei 发表于 2021-8-7 18:36:52

大马强 发表于 2021-8-6 14:41
1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3, ...

感谢

kongyunfei 发表于 2021-8-7 18:37:27

tian1234 发表于 2021-8-6 14:01
因为getchar()就是读取一个非0字符

嗯嗯,懂了
页: [1]
查看完整版本: 求大佬看看