2014-03-25 48 views
1

我想獲得任何兩個值的所有倍數的總和。C編程:scanf是否沒有像整數那樣讀取值0和1?

我用scanf向用戶請求兩次整數值。

在代碼和算法我創作的作品如預期除了當用戶將0和/或1

輸入值I希望計算機能夠接受零值,並導致總共爲零,當接受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; 
} 
+2

適用於我的除0之外的所有值,這將導致無限循環;我從未增加。 – this

回答

1

for循環主要是爲了計算事情。你不需要,但它更具可讀性。我會在稍後談談。

爲了您的第一個循環,你必須:

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

這...

  • i的初始值,以value。這是......有點不正統,可能會導致你一些混亂。
  • 每次迭代,它將測試ilimit
  • 遞增sumi的值不斷增加。
  • i的值增加value

您看到的問題是,當value爲零時,i永不改變。

sum似乎也沒有得到倍數。如果value1,則sum將是0,1,3,6,10,15 ......三角形數字。這聽起來不像你想要的。

相反,我認爲你想使用for循環的意圖,計數,只是重複增加sum。喜歡的東西:

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

,上面寫着添加valuesumlimit倍。

如果您確實需要三角形數字,您可能需要引入一個補充變量。如果計數是不是你想要的,你可能需要一個while循環,相反,爲便於閱讀,是這樣的:

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

但可以肯定的測試輸入value,以確保它不是0。無論您添加多少個零,它們都不會大於limit ...好吧,除非limit是負數。

+0

謝謝!你是對的,因爲for循環不會在1000的極限處終止,所以零會在無限循環中進行。數字1也是固定的。 – xeperia1

相關問題