2011-02-12 89 views
0

好了,所以我有一串數字用C總結三胞胎

002003005\n 
001001\n 

一個文件,我想由三個總結所有的數字,從而該第一線總和將是10和第二線將是2 。現在我不知道什麼是錯我的控制流

#define MAXLINE 1000 
int counter = 0; 
int inputLine[MAXLINE] = {0}; 
int main(void) 
{ 
    int sum = 0; 
    int i = 0; 
    int ii = 0; 
    char c; 
    while ((c = getchar()) != EOF) 
    { 
    if (c == '\n') 
    { 
     for (ii = 0; ii < counter; ii = ii + 3) 
     { 
     sum = sum + ((inputLine[ii] - '0') * 100) + ((inputLine[ii+1] - '0') * 10) + ((inputLine[ii+2] - '0') * 1); 
     } 
     printf("%d\n", sum); 
     sum = 0; 
     counter = 0; 
    } 

    inputLine[i] = c; 
    i++; 
    counter++; 
    } 


    return 0; 
} 

回答

1

你不進行重置i當你達到一個行的末尾。

插入:

i = 0; 

counter = 0行之後。

您還需要包括此塊:

inputLine[i] = c; 
i++; 
counter++; 

在一個else,因爲它不應該發生在每個行的末尾回車。

一旦你這樣做了,你會(希望)注意到icounter在每次通過循環時都會包含相同的值,所以不需要它們都存在。

+0

也許`計數器`是爲了計算線?在這種情況下,OP會將`counter ++`移動到'if ='內的'counter = 0'。 – filipe 2011-02-12 22:29:34

0

如果您char類型爲unsigned默認情況下,那麼你的結束條件並不好

char c; 
while ((c = getchar()) != EOF) 

你應該申報C作爲int,爲EOF不能在0..255值範圍來表示。根據定義,EOF是用於指示文件結束條件的類型爲int的負整數。