42. 五年级小学生的题目
那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。
输入:
用逗号分隔的整数序列,及其运算符和等号
输出:
最大数 op 最小数=结果
说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。计算结果为 int。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
其实这道题不难,不过我写的很坎坷!特此做博客,来记录辛酸史!
第一版的思路是这样的,但是很可惜,失败了!
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
int main(void)
{
/*用scanf读入%d,
* 如果是','等非数值输入,scanf会返回0,并且将数据放回缓冲区,
* 通过对scanf返回值的判断,进行下一步
* 用getchar读入符号后,然后用switch-case看符号选择
*/
int max, min;
int temp;
scanf("%d", &temp);
min = max = temp;
char ch = 0;
bool flag = true;
while (flag) {
if (1 == scanf("%d", &temp)) {
max = temp > max ? temp : max;
min = temp < min ? temp : min;
}
else {
//printf("first, ch = %c\n", ch);
switch (ch = getchar()) {
case '+':
flag = false;
scanf("%*s");
printf("%d %c %d = %d\n", max, ch, min, max + min);
break;
case '-':
flag = false;
scanf("%*s");
printf("%d %c %d = %d\n", max, ch, min, max - min);
break;
case '*':
flag = false;
scanf("%*s");
printf("%d %c %d = %d\n", max, ch, min, max * min);
break;
case '/':
flag = false;
scanf("%*s");
printf("%d %c %d = %d\n", max, ch, min, max / min);
break;
case '%':
flag = false;
scanf("%*s");
printf("%d %c %d = %d\n", max, ch, min, max % min);
break;
case ',':
flag = true;
break;
default:
printf("Oops!\n");
break;
}
//printf("second, ch = %c\n", ch);
}
}
return 0;
}
百思不得其解,甚至于跑去问助教,当然,助教并没有回复我!我的消息一个月后仍然显示着未读……
于是只能自己找bug,终于找到了,是scanf()的问题,它会吞掉我的+、-
用代码测试一下
/*测试scanf()*/
int a;
if (1 == scanf("%d", &a)) {
printf("true!\n");
printf("interger a %d, character a %c\n", a, a);
putchar(getchar());
}
else {
printf("false!\n");
printf("interger %d, character %c\n", a, a);
putchar(getchar());
}
输入样例,+,
原本想当然的认为会输出 一行乱码,然后再输出+
实际输出:
false!
interger -858993460, character ?
,
最后一行居然是',',这是一件很不友好的消息!但是要学会接收(哦,补充一下,第二行的数据如果不一样的话,也用不着慌张,可能编译器不同,电脑不同都会有影响)
这个bug让我找了一个月
标签:ch,min,max,scanf,42,北理工,flag,printf,五年级 From: https://www.cnblogs.com/alien-han/p/16950931.html