printf如何更改代码的输出

时间:2017-11-26 15:58:49

标签: c printf

我正在编写一个简单的代码来查找奇数和偶数的总和,直到给定的数字。如果没有得到正确答案,请忽略我的代码。我面临的问题是简单的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混乱或大规模改变代码的输出。请帮忙 。谢谢 。如果问题格式不正确,请提前道歉。

2 个答案:

答案 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_esum_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;
}