我想制作一个简单的程序,用于对用户输入的整数求和,只要用户按顺序输入它们(奇数,偶数,奇数(...)),只要总和低于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声明会给我一个左值错误?也很抱歉迟到的代码,刚刚开始。
答案 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()
不会消耗尾随空格字符,因此您可能需要使用stdin
或getchar()
从fgetc()
缓冲区手动提取它们。