C - while循环挂在条件上

时间:2016-09-19 11:30:53

标签: c while-loop do-while

我是一个新手学习代码所以这可能很简单,但我无法理解发生了什么。

当我尝试运行以下代码时,似乎挂起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;
}

6 个答案:

答案 0 :(得分:2)

删除while语句末尾的分号:

while(operator != 'E')
{

分号结束了while语句的主体,换句话说,它的行为就像你写的那样:

while(operator != 'E')
{
}

导致无限循环。

答案 1 :(得分:2)

  1. 您需要删除while
  2. 末尾的分号
  3. 您需要考虑两种情况
  4. 所以改变

    while(operator != 'E');
    

    while(operator != 'E' && operator != 'e')
    

答案 2 :(得分:1)

您的while循环中有一个经典错误:

while (operator != 'E');
{

将条件解析为空语句后的;,因此如果whileoperator不同,则'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)

几件事。 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;
        }