求大佬看看
#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;
}
这代码我在不同地方设置断点调试,次次结果不同{:10_266:}
在这个代码中,判断条件为 输入不为回车并且scanf函数要执行,我发现只要scanf执行了,都会返回1,所以要想退出有两个条件,一是回车,二是让scanf不工作,我参考了这里关于scanf文章scanf用法
我猜测:连续输入两个字符,其中一个会被getchar接受,另一个sancf是不会管的,所以不执行,status为0,所以输入 1.2a1.2bc 时会退出循环,输出结果
大马强 发表于 2021-8-6 11:20
这代码我在不同地方设置断点调试,次次结果不同
在这个代码中,判断条件为 输入不为回车并且sca ...
如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的2是怎么读取的呢,我发的这个程序运行的话一行里面输入:1a2b3,它会自动把a和b忽略,最后还会输入1+2+3=6,这是为什么呢? 因为getchar()就是读取一个非0字符 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 大马强 发表于 2021-8-6 14:41
1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3, ...
感谢 tian1234 发表于 2021-8-6 14:01
因为getchar()就是读取一个非0字符
嗯嗯,懂了
页:
[1]