2015-04-12 57 views
0

只要用户在序列中输入它们(奇数,偶数,奇数(..)),我想制作一个简单的程序,用于求和用户输入的整数,只要求和低于100.这是我的代码。C - 多个左值错误

#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

C中的比较运算符是====被赋值运算符,所以

while (1 = 1) 

手段分配11这当然是,不可能的,它更改为

while (1 == 1) 

或甚至

while (1) 

但while循环更好的条件会是这样的

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

虽然你应该知道的事实,即循环将结束对输入无效,但你会防止未定义行为。

而且,你这里有一个错误

scanf("%d , &a"); 

你逝去的&a作为格式字符串,这是不对的一部分,它应该是

scanf("%d", &a); 

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