2012-08-28 155 views
1

這是我第一次使用c語言編程。我有這樣的代碼,應該採取用戶輸入的任何數字,直到輸入0.然後它應該將它們全部加起來。例如,如果他們輸入1,然後是2,然後是3,最後是0,則應輸出6.但由於某種原因,它不會添加最後一個值。在這種情況下我提到這將打印3而不是6C使用while循環添加輸入

#include <stdlib.h> 
#include <stdio.h> 

static char syscall_buf[256]; 
#define syscall_read_int()   atoi(fgets(syscall_buf,256,stdin)) 

main() 
{ 
    int input; 
    input = syscall_read_int(); 

    int result = 0; 
    input = syscall_read_int(); 
    while (input != 0){ 
     result = result + input; 
     input = syscall_read_int(); 
    } 
    printf("%i\n", result); 
} 
+1

擺脫無關的'input = syscall_read_int();'行。 –

回答

1

您在第10行有一個額外的syscall_read_int()。無論如何,我建議您使用do-while循環,因爲您需要讀取至少一個整數。下面的代碼使用do-while循環:1 + 2 + 3 + 0 = 6

#include <stdlib.h> 
#include <stdio.h> 

static char syscall_buf[256]; 
#define syscall_read_int()   atoi(fgets(syscall_buf,256,stdin)) 

main() 
{ 
    int input; 
    int result = 0; 

    do { 
     input = syscall_read_int(); 
     result = result + input; 
    } while(input != 0); 

    printf("%i\n", result); 
} 
1

你有這個函數的額外調用:syscall_read_int()。嘗試調試並查看發生了什麼。

您正在覆蓋變量int input的值;因此,你不能在你提到的具體情況添加的第一個值的變量int result

插入1,然後2,然後3終於0。第一個值 - 1 - 未被添加,因此程序將打印5(2 + 3)而不是6(1 + 2 + 3)。

這就是問題所在,試試這個:

#include <stdlib.h> 
#include <stdio.h> 

static char syscall_buf[256]; 
#define syscall_read_int()   atoi(fgets(syscall_buf,256,stdin)) 

main() 
{ 
    int input; 
    //input = syscall_read_int(); //you need to comment this line 
    int result = 0; 
    input = syscall_read_int(); 
    while (input != 0){ 
     result = result + input; 
     input = syscall_read_int(); 
    } 
    printf("%i\n", result); 
} 

希望它能幫助!

0

當你的程序被寫入時,它會丟失你輸入的第一個值(它什麼都不用),所以如果你輸入1,2,3,它會返回5,而不是3。在代碼的最後運行帶有額外syscall_read_int()的版本?