我正在编写一个简单的代码来查找奇数和偶数的总和,直到给定的数字。如果没有得到正确答案,请忽略我的代码。我面临的问题是简单的printf改变了整个输出我的代码。这是代码:
#include <stdio.h>
int main()
{
int num,i,sum_e,sum_o;
printf("\nEnter the number\n");
scanf("%d",&num);
sum_e=0;
sum_o=0;
for (i=1;i<=num;i++)
printf("\n value of remainder = %d",i); // printf causing the change
if (i%2==0)
{
sum_e+=i;
}
else
{
sum_o+=i;
}
printf("\nsum of all odd numbers till %d = %d\n",num,sum_o);
printf("\nsum of all even numbers till %d = %d\n",num,sum_e);
return 0;
}
当我删除printf(&#34;余数值#34;)时,这是输出:
输入号码 3
所有奇数的总和,直到3 = 4
所有偶数的总和,直到3 = 2
当我添加printf(&#34;余数值#34;)时,这是输出:
输入数字
3
余数值= 1
余数值= 2
余数值= 3
所有奇数的总和,直到3 = 0
所有偶数的总和,直到3 = 4
我的问题是,如何简单的printf混乱或大规模改变代码的输出。请帮忙 。谢谢 。如果问题格式不正确,请提前道歉。
答案 0 :(得分:2)
您忘记了loop
的大括号,以保留if-else
语句。否则if-else
执行一次。那不是你想要的。
正确的方法:
for (i=1;i<=num;i++) {
printf("\n value of remainder = %d",i); // printf causing the change
if (i%2==0)
{
sum_e+=i;
}
else
{
sum_o+=i;
}
}
除此之前,您有sum_e
或sum_o
0
中的任何一个,而另一个包含值num+1
。
删除printf
语句时,每次迭代都会执行if-else
块,这就是为什么它会给出正确的结果。
从标准版开始,您可以看到$6.8.5
for ( expressionopt ; expressionopt ; expressionopt ) statement;
每次迭代都会执行statement
。迭代语句(在本例中为for
语句)会导致被称为循环体的statement
重复执行,直到控制表达式(比较部分)比较等于0。
现在更早出现一个表达式语句(printf
)。之后你用选择语句替换了。(if-else
)。
所以关键的想法是只执行一个语句。在你展示的两种情况下,这都是不同的(这就是结果不同的原因)。在我显示的示例代码段中,代替statement
- 正在添加compound statement
。 {..}
。
答案 1 :(得分:1)
在你的代码中,你应该在for语句之后使用开始和结束括号,如果你在for语句之后只有一行代码就可以发出括号的使用,与if语句相同,
if(condition)
expression 1;
expression 2;
仅评估表达式1,但如果您希望对它们进行评估,请使用
if(condition){
expression 1;
expression2;
}