C - 多个左值误差

时间:2015-04-12 17:38:46

标签: c while-loop lvalue

我想制作一个简单的程序,用于对用户输入的整数求和,只要用户按顺序输入它们(奇数,偶数,奇数(...)),只要总和低于100即可。这是我的代码。

#include <stdio.h>

int check_odd(int x)
{
    int i = x - 1;
    int o;
    for (i = x - 1; i > 1; i--)
    {
        if (x % i = 0)
        {
            o = 1;
            break;
        }
    }

    if (o != 1)
    {
        o = 0;
    }

    return o;
}

int check_even(int x)
{
    int i;
    i = x / 2;

    if (i * 2 = x)
    {
        x = 1;
    }
    else x = 0;

    return x;
}

int main()
{
    int a;
    int b;
    int s = 0;

    while (s < 100)
    {
        while (1 = 1)
        {
            printf("Enter an odd number\n");
            scanf("%d , &a");
            b = check_odd(a);

            if (b = 1)
            {
                s = s + a;
                printf("Current sum equals %d , &s\n");
                break;
            }

            printf("Entered number is incorrect. Try again.\n");
        }

        while (1 = 1)
        {
            printf("Enter an even number\n");
            scanf("%d , &a");
            b = check_even(a);

            if (b = 1)
            {
                s = s + a;
                printf("Current sum equals %d , &s\n");
                break;
            }
            printf("Entered number is incorrect. Try again.\n");
        }
    }
printf("Sum equals $d , &s\n");
}

现在,我用行

得到左值错误
if (x % i = 0)

if (i * 2 = x)

while (1 = 1)

我做错了什么,为什么1 = 1声明会给我一个左值错误?也很抱歉迟到的代码,刚刚开始。

1 个答案:

答案 0 :(得分:1)

c中的比较运算符为==而非==是赋值运算符,因此

while (1 = 1)

表示将1分配给1,这当然是不可能的,将其更改为

while (1 == 1)

甚至

while (1)

但是,while循环的更好条件是

while ((scanf("%d", &b) == 1) && (b % 2 != 0))

虽然您应该知道循环将以无效输入结束,但您会阻止未定义的行为。

而且,你在这里有错误

scanf("%d , &a");

你传递&a作为格式字符串的一部分,这是错误的,它应该是

scanf("%d", &a);

请注意,scanf()不会消耗尾随空格字符,因此您可能需要使用stdingetchar()fgetc()缓冲区手动提取它们。