Суммирование триплетов в Си - PullRequest
0 голосов
/ 13 февраля 2011

Хорошо, у меня есть файл с кучей цифр

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;
}

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Вы не сбрасываете i, когда достигнете конца строки.

Вставка:

i = 0;

После строки counter = 0.

Вам также необходимо включить этот блок:

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

В пределах else, поскольку это не должно происходить при возврате каретки в конце каждой строки.

Как только вы это сделаете, вы (надеюсь) заметите, что i и counter всегда будут содержать одно и то же значение при каждом проходе через цикл, поэтому нет необходимости, чтобы они оба существовали.

0 голосов
/ 13 февраля 2011

Если ваш char тип по умолчанию unsigned, тогда ваше конечное состояние не хорошее

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

Вы должны объявить c как int, так как EOF не может быть представлен в диапазоне значений 0..255. EOF по определению является отрицательным целым числом типа int, используемым для обозначения условий конца файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...