2011-02-12 59 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的负整数。