我是一个新手学习代码所以这可能很简单,但我无法理解发生了什么。
当我尝试运行以下代码时,似乎挂起while
循环条件并且之后不执行任何代码。 !=
运算符不适合这个吗?
我也试过do {} while
并且一切运行正常但是一旦我将操作符设置为'E'
,状态似乎就会挂起并且不会离开循环。
#include <stdio.h>
int main(void) {
float n, content;
char operator;
n = content = 0;
operator = 'a';
printf("Begin Calculations:\n");
while (operator != 'E');
{
scanf("%f %c", &n, &operator);
switch (operator) {
case 's':
case 'S':
content = n;
printf("= %f\n", content);
break;
case '+':
content = content + n;
printf("= %f\n", content);
break;
case '-':
content = content - n;
printf("= %f\n", content);
break;
case '*':
content = content * n;
printf("= %f\n", content);
break;
case '/':
content = content / n;
printf("= %f\n", content);
break;
case 'e':
case 'E':
printf("End of calculations\n");
operator == 'E';
break;
default:
printf("Invalid input\n");
break;
}
}
return 0;
}
答案 0 :(得分:2)
删除while语句末尾的分号:
while(operator != 'E')
{
分号结束了while语句的主体,换句话说,它的行为就像你写的那样:
while(operator != 'E')
{
}
导致无限循环。
答案 1 :(得分:2)
while
所以改变
while(operator != 'E');
到
while(operator != 'E' && operator != 'e')
答案 2 :(得分:1)
您的while
循环中有一个经典错误:
while (operator != 'E');
{
将条件解析为空语句后的;
,因此如果while
与operator
不同,则'E'
将永久运行。
使用经典的Kernighan和Ritchie支撑样式会使这种错误显而易见并且不太可能发生:
while (operator != 'E') {
另请注意,您应该从switch
语句退出循环,而不是在E
条件下测试while
,这样就可以e
和{{ 1}}要正确处理(你的语句E
是一个无操作,它应该写成operator == 'E';
。还要检查operator = 'E';
的返回值,以避免在文件末尾无休止地循环。
以下是改进版本:
scanf
答案 3 :(得分:0)
while(operator != 'E');
正确的语法是while (...) { ... }
,不带分号或do { ... } while (...);
带。
printf("End of calculations\n");
operator == 'E';
赋值运算符是单个=
。将==
更改为=
,应该没问题。
答案 4 :(得分:0)
你需要从while循环中删除分号,因为分号表示语句的结尾,因此你的程序没有进一步执行
答案 5 :(得分:0)
检查更新代码:
#include <stdio.h>
int main(void)
{
float n, content;
char operator1;
n = content = 0;
operator1 = 'a';
printf("Begin Calculations:\n");
while(operator1 != 'E')
{
scanf("%c", &operator1);
switch(operator1)
{
case 's':
case 'S':
content = n;
printf("= %f\n", content);
break;
case '+':
content = content + n;
printf("= %f\n", content);
break;
case '-':
content = content - n;
printf("= %f\n", content);
break;
case '*':
content = content * n;
printf("= %f\n", content);
break;
case '/':
content = content / n;
printf("= %f\n", content);
break;
case 'e':
case 'E':
printf("End of calculations\n");
operator1 = 'E';
break;
default:
printf("Invalid input\n");
break;
}
}
return 0;
}