我正在研究一种可以在C中运行的计算器。突然,一个错误突然出现,说它正在期待一个表达。我想知道为什么if语句不起作用。这是我输入的代码!
#include <stdio.h>
int main(int argc, const char * argv[]) {
int symbol;
int numberOne;
int numberTwo;
printf("+,-,/,*?");
symbol = scanf("%d", &symbol);
if (symbol==*)
{
printf("Please enter first number.");
numberOne = scanf("%d", &numberOne);
printf("%d %d = ?" , numberOne , symbol);
}
return 0;
}
它说if语句有错误。请报告我的错误。 :d
答案 0 :(得分:3)
从哪里开始?确定
scanf()
的这种语法错误
symbol = scanf("%d", &symbol);
这没有意义,想一想,如果是
symbol = scanf("%d%d", &symbol, anotherSymbol);
您认为结果如何?
scanf()
返回与格式字符串匹配的参数数量,因此在这种情况下返回值为0
,您已经知道它,因为它永远不会进入if
条件。 / p>
如果您想阅读characeter '*'
,那么您使用了错误的格式说明符,因为'%d'
用于整数,因此当您输入'*'
时,它会返回{{ 1}}因为characeter无法转换为整数,因此没有与格式字符串匹配。
你应该使用0
格式说明符,并注意明确地跳过空格,因为这个格式说明符需要在格式字符串本身的说明符前面有一个空格,以便忽略空格,所以正确的方法会是
"%c"
比较两个char symbol;
if (scanf(" %c", &symbol) != 1)
{
fprintf(stderr, "Oh no, it's invalid input, cannot continue\n");
return -1;
}
的正确方法是
char
注意单引号,你的代码给你编译错误,因为没有引号它只是乘法运算符,或指针解引用运算符所以编译器实际上不知道因为{{1之后没有表达式因为它期待一个,错误突然出现。
第二个if (symbol == '*')
同样的错误,更正的代码将是
*
答案 1 :(得分:1)
正如iharob所说,你的scanf()
结果不会做你想要的,但编译错误发生在if (symbol==*)
行,其中*
应为{{1}它要编译。