[英]C - while loop hanging on the condition
我是一个新手,正在学习代码,所以这可能很简单,但是我不明白发生了什么。
当我尝试运行以下代码时,它似乎挂在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;
}
在while语句的末尾删除分号:
while(operator != 'E')
{
分号结束while语句的主体,换句话说,它的行为就像您将编写以下代码:
while(operator != 'E')
{
}
造成无限循环。
while
删除分号 所以改变
while(operator != 'E');
至
while(operator != 'E' && operator != 'e')
在while
循环中,您有一个经典的错误:
while (operator != 'E');
{
的;
在条件被解析为空语句之后,因此如果operator
不同于'E'
那么while
将永远运行。
使用经典的Kernighan和Ritchie大括号样式可以使这种错误显而易见,并且不太可能发生:
while (operator != 'E') {
还要注意,您应该从switch
语句退出循环,而不是在while
条件下测试E
,这将允许e
和E
都得到正确处理(您的语句operator == 'E';
是no op,它是应该写为operator = 'E';
scanf
还要检查scanf
的返回值,以避免在文件末尾无限循环。
这是一个改进的版本:
#include <stdio.h>
int main(void) {
float n, content;
char operator;
int active = 1;
n = content = 0;
printf("Begin Calculations:\n");
while (active && scanf("%f %c", &n, &operator) == 2) {
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");
active = 0;
break;
default:
printf("Invalid input\n");
break;
}
}
return 0;
}
while(operator != 'E');
正确的语法是while (...) { ... }
不带分号,或者do { ... } while (...);
用。
printf("End of calculations\n");
operator == 'E';
赋值运算符是一个=
。 将==
更改为=
,应该没问题。
您需要从while循环中删除分号,因为分号意味着语句结束,因此您的程序不会进一步执行
几件事。 1-运算符是保留字,您应该在while()之后更改变量名称2-(分号;)。
检查更新代码:
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.