C编程:scanf是不是按照整数读取值0和1?

时间:2014-03-25 00:30:20

标签: c scanf

我试图得到任意两个值的所有倍数的总和。

我使用scanf向用户请求两次整数值。

在我创建的代码和算法中按预期工作,除非用户输入0和/或1的值。

我希望计算机能够接受零值并导致总计为零,当接受1时总和为1但0给我奇怪的崩溃而1给我一个很大的值。

/*multiples of 3 or 5: 3,5,6,9; sum is 23*/

#include <stdio.h>

int main()
{
    int value,value2,limit = 1000;
    int i,divi,sum = 0; 

    /*read user input for the first value*/ 
    scanf("%d",&value);

    /*get sum of all multiples of value*/
    for(i = value;i < limit;){
        sum = sum + i;
        i = i + value;
    }
    printf("%d\n",sum);
    printf("done for %d\n",value);

    /*read user input for the second value*/
    scanf("%d",&value2);
    /*get sum of all multiples of value2*/
    for(i = value2;i < limit;){
        divi = i%value;
        if((divi)==0){
            i = i + value2;
        }
        else
        {
            sum = sum + i;
            i = i + value2;
        }

    }
    printf("%d\n",sum);
    printf("done for %d\n",value2);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

for循环主要用于计算内容。你不需要,但它更具可读性。我稍后会谈到的。

对于你的第一个循环,你有:

for(i = value;i < limit;){
    sum = sum + i;
    i = i + value;
}

此...

  • i的初始值设置为value。这是......有点不正统,可能会让你感到困惑。
  • 每次迭代,它都会针对i测试limit
  • sum增加i {。}}。
  • i增加value的值。

您看到的问题是,当value为零时,i永远不会更改。

还有一个奇怪的是sum似乎没有得到倍数。如果value1,则sum将为0,1,3,6,10,15 ......三角形数字。这听起来不像你想要的那样。

相反,我认为您希望使用for循环来计算其意图,并重复增加sum。类似的东西:

for(i = 0;i < limit;i++){
    sum = sum + value;
}

即将value添加到sumlimit次。

如果您确实需要三角形数字,则可能需要引入补充变量。如果计数不是你想要的,你可能想要一个while循环,为了便于阅读,可能需要:

while (sum < limit){
    sum = sum + value;  /* or whatever you need, here */
}

但绝对测试输入value以确保它不是0。无论你添加多少个零,它们都不会大于limit ......好吧,除非limit是否定的。