【发布时间】:2021-11-29 17:47:24
【问题描述】:
我使用 else...if 语句为计算器编写了一个 C 程序。没有语法错误,编译良好,但程序跳过所有条件,只执行最后一个条件(显示错误消息)。我不知道出了什么问题。 here is my code。如果这是一个愚蠢的问题,我很抱歉,我尝试用谷歌搜索,但什么也没找到。
代码:
#include<stdio.h>
{
float no1, no2, ans;
char op;
printf("ENTER 1ST NUMBER:\n");
scanf("%f",&no1);
printf("ENTER 2ND NUMBER:\n");
scanf("%f",&no2);
printf("ENTER A BASIC MATHEMATICAL OPERATOR:\n");
scanf("%ch",&op);
if(op=='+')
{
ans=no1+no2;
}else if(op=='-')
{
ans=no1-no2;
}else if(op=='*')
{
ans=no1*no2;
}else if(op=='/')
{
ans=no1/no2;
}else
{
printf("INVALID OPERATOR!!\n");
}
printf("ANSWER=%.2f\n", ans);
return 0;
}
更新:感谢您的帮助!以后我会注意复制粘贴代码而不是截图,
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请学习如何edit您的问题来改进它,例如通过将文本作为文本复制粘贴到其中。
-
请将代码和数据添加为文本 (using code formatting),而不是图像。图片:A)不允许我们复制粘贴代码/错误/数据进行测试; B) 不允许根据代码/错误/数据内容进行搜索;和many more reasons。除了代码格式的文本之外,只有在图像添加了一些重要的东西,而不仅仅是文本代码/错误/数据传达的内容时,才应该使用图像。
-
@Styx 你能解释一下这是什么#include
{ -
两个问题:首先没有
%ch格式说明符,只有%c读取单个字符;然后%c不会跳过前导空格,例如%d确实如此,这意味着用于第二个数字输入的Enter键将作为换行符读入op。如果您使用一些 debugging 来检查实际发生的情况,这将是非常明显的。所以今天的教训:请学习如何调试你的程序。 -
附带说明,如果
else块被执行,ans将在printf(“ANSWER=%.2f\n”, ans);执行时未初始化。
标签: c if-statement operators