S1E14课后习题求助
题目是写一个程序,对用户输入的整数进行求和。当用户输入任意字符时,
A. 用户可以输入整数和浮点数
B. 用户可以在同一行输入多个数字,数字之间可以是任意一个分隔符(如下图)4*I1JaFBP}
C. 结果保留两位小数Pow
答案是
#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;
}
我无法理解为什么输入3a3b5是合法的,是因为scanf和getchar()一起用所以偶数位的字符全部都被跳过了吗?
然后输入空格是合法的是因为内层循环getchar()识别到空格会跳出内层循环但是外层循环不会,所以中间可以有无数个空格吗? shriek 发表于 2021-7-14 14:10
不是,我只是想知道,为什么输入3a3b5是合法的,是因为scanf和getchar()一起用所以偶数位的字符全部都 ...
不是跳过偶数位,是跳过 scanf 函数成功后,后面的那一个字符
输入 32a3b5,还是偶数位吗?
本帖最后由 鸬鹚鸟 于 2021-7-14 13:53 编辑
我运行到int main()就运行不了,你们是不是这样? #include <stdio.h>
int test(int ch) {
printf("这一次的 ch = '%c'\n", ch);
return ch;
}
int main()
{
float num = 0;
double sum = 0;
int status;
do
{
printf("请输入合法的数字:");
do
{
sum = sum + num;
status = scanf("%f", &num);
} while (test(getchar()) != '\n' && status == 1);
} while(status == 1);
printf("结果是:%.2lf\n", sum);
return 0;
}
人造人 发表于 2021-7-14 13:53
为什么你们的代码我都运行不了? 人造人 发表于 2021-7-14 13:53
不是,我只是想知道,为什么输入3a3b5是合法的,是因为scanf和getchar()一起用所以偶数位的字符全部都被跳过了吗?然后输入空格是合法的是因为内层循环getchar()识别到空格会跳出内层循环但是外层循环不会,所以中间可以有无数个空格吗? 鸬鹚鸟 发表于 2021-7-14 14:02
为什么你们的代码我都运行不了?
编译器没装gcc库? shriek 发表于 2021-7-14 14:10
不是,我只是想知道,为什么输入3a3b5是合法的,是因为scanf和getchar()一起用所以偶数位的字符全部都 ...
可以根据这个输出结果分析一下
请输入合法的数字:3a3b5
这一次的 ch = 'a'
这一次的 ch = 'b'
这一次的 ch = '
'
请输入合法的数字:q
这一次的 ch = 'q'
结果是:11.00
人造人 发表于 2021-7-14 14:14
可以根据这个输出结果分析一下
好的,谢谢,我研究下 鸬鹚鸟 发表于 2021-7-14 14:02
为什么你们的代码我都运行不了?
我们这是C,你的是python 人造人 发表于 2021-7-14 14:14
可以根据这个输出结果分析一下
大佬,那个int test()是什么意思?我还没学到,没搞懂为什么会有你说的那样的输出 shriek 发表于 2021-7-14 14:23
我们这是C,你的是python
谢谢 人造人 发表于 2021-7-14 14:14
可以根据这个输出结果分析一下
我去搜一下test(),大佬不用回了。谢谢哈 shriek 发表于 2021-7-14 14:30
我去搜一下test(),大佬不用回了。谢谢哈
就很随便的一个名字,把 test 换成 abcd,fun,asdf,都行,一个名字而已,你想叫什么就叫什么
页:
[1]