您的位置:首页 > 其它

水题第三记 一个小错误引起的崩溃

2013-06-08 11:08 260 查看
        在开始做1.2.3,1.2.5时,本来很简单的题目,每次总在dev c++中运行正确,可一到oj上就wrong answer,改了很多次都没有,纠结了一晚上加上一上午,搞得整个人郁闷死了。。。

        为什么没错就是wrong answer了。。。

        最后看别人 的终于发现错在哪里了-------------一个回车键,以1.2.5为例吧。

        

[align=left]Input[/align]
Input contains multiple test cases. The first line of the input is a single integer T (0<T<1000) which is the number of test cases. T test cases follow. Each test case contains a char C (+,-,*, /) and two integers A and B(0<A,B<10000).Of
course, we all know that A and B are operands and C is an operator.

 
[align=left]Output[/align]
For each case, print the operation result. The result should be rounded to 2 decimal places If and only if it is not an integer.

 
[align=left]Sample Input[/align]

4
+ 1 2
- 1 2
* 1 2
/ 1 2


 
[align=left]Sample Output[/align]

3
-1
2
0.50


第一次做的代码是:

#include <stdio.h>

int main(void)
{
int t,a,b;
char ch;

scanf("%d", &t);

while(t--)
{
scanf("%c", &ch);
scanf("%d %d", &a, &b);

switch(ch)
{
case '+' : printf("%d\n", a+b);
break;
case '-' : printf("%d\n", a-b);
break;
case '*' : printf("%d\n", a*b);
break;
case '/' : printf("%.2lf\n", (float)a/b);
break;
}
}
return 0;
}


困扰的大问题就是:
输入t后就要换行,于是就多了一个换行键,可在代码中没有输入,于是便将换行键当做a,造成了wrong answer,
在1.2.3中没有getchar();也是可以的?????
ps: 还有一个错误是如果除法最后得到的是整数,就不应该输出两位小数点。。。

改:

#include <stdio.h>

int main(void)
{
int t,a,b;
char ch;

scanf("%d", &t);

while(t--)
{
getchar();
scanf("%c %d %d", &ch, &a, &b);
switch(ch)
{
case '+' : printf("%d\n", a+b);
break;
case '-' : printf("%d\n", a-b);
break;
case '*' : printf("%d\n", a*b);
break;
case '/' :
if(a%b==0)
printf("%d\n", a/b);
else
printf("%.2f\n", (float)a/b);
break;
}
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: