2013-11-09 40 views
3

我試圖創建一個程序,讓用戶輸入數字(最大條目> 10^6),直到遇到否定。我已經嘗試了很多版本,但是他們要麼不註冊輸入負值,要麼會崩潰。添加數字,直到遇到否定的結果

這是我在目前我:

#include <stdio.h> 

#define HIGHEST 999999 
int main(){ 
    int i=0, entry, sum=0; 
     while(i<HIGHEST){ 
      scanf("%i", entry); 
      if(entry>0){ 
       sum+=entry; 
      } 
      else{ 
      i=HIGHEST; 
      } 
     i++; 
    } 
    printf("Sum: %i", sum); 
    system("pause"); 
} 

回答

3

你的問題是在這條線:

scanf("%i", entry); 

這應該是:

scanf("%i", &entry); 

你需要傳遞將存儲掃描值的整數變量的地址。由於 條目從未初始化,它只是填充了垃圾/無論是在內存中,而不是輸入的值。看到這個reference,其中指出,

"Depending on the format string, the function may expect a sequence of additional arguments,  
    each containing a pointer to allocated storage where the interpretation of the extracted 
    characters is stored with the appropriate type" 
+1

實際上,通過在使用條目之前打印輸入值來運行此程序是一個很好的練習。通過這種方式,您可以看到那些在未初始化的區域中變得瘋狂的東西。 – BlackVegetable

+0

非常感謝,不應該錯過:) – user2962716

0

您提供了一種方式離開,如果輸入的數字太大:

while(i<HIGHEST){ 

但沒有離開,如果是小於0;試試這個:

while((i<HIGHEST)&&(i>=0)){ 

此外,@OldProgrammer是正確的,你的scanf()應該是因爲他已經指出。

+0

即使沒有任何東西能讓我<0,我是否需要這樣做? – user2962716

+0

@ user2962716 - 在你的問題描述中:_until遇到否定._,你意味着程序應該運行直到遇到否定(並且小於1000000)這就是爲什麼我提供了這個建議:) – ryyker