программа, которая записывает четные и нечетные числа - PullRequest
1 голос
/ 30 марта 2010

Я писал программу, которая может читать набор чисел с именем dog.txt; а также пишет в два файла, разделяя нечетные и четные. я был в состоянии скомпилировать свою программу, однако, ожидаемый результат не тот, который должен был быть четными числами в одном файле с именем EVEN, нечетные числа в файле нечетные

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int i;
  int even,odd;
  int num;

  if (argc != 4) {
    printf("Usage: executable in_file  output_file\n");
    exit(0);
  }

  FILE *dog = fopen(argv[1], "r");
  FILE *feven= fopen(argv[2], "w");
  FILE *fodd= fopen (argv[3], "w");
  while (fscanf(dog, "%d", &num) != EOF)
    {
      if (0==i%2){
        i++;
         printf("even= %d\n", num);
         }
      else if(i!=0){
       i++;
       printf("odd= %d\n", num);
      }
    }
  fclose(feven);
  fclose(fodd);
  fclose(dog);

  return 0;
}

выход:

even= 1
odd= 2
even= 34
odd= 44
even= 66
odd= 78
even= 94
odd= 21
even= 23
odd= 54
even= 44
odd= 65
even= 78
odd= 68
even= 92

Ответы [ 4 ]

4 голосов
/ 30 марта 2010

Вы проверяете i % 2, а не num % 2. Я даже не уверен, что i делает в этом примере - возможно, вы планируете использовать его позже.

while (fscanf(dog, "%d", &num) != EOF) {
    if (num % 2 == 0) {
        printf("even = %d\n", num);
    }
    else if(num != 0) {
        printf("odd = %d\n", num);
    }
}

Я думаю, что код для записи этих чисел в файлы появится позже, как только вы исправите эту ошибку.

0 голосов
/ 30 марта 2010

В дополнение к проблеме printf / fprintf в любом приличном современном компиляторе этот код должен генерировать предупреждение о том, что вы не присваиваете начальное значение i.

0 голосов
/ 30 марта 2010

Функция printf выполняет запись на экран (точнее, запись на «стандартный вывод», но обычно это экран).Вы хотите написать в файл.Вы открыли файлы с именами feven и fodd.Чтобы написать им, вы должны использовать вызов fprintf, который работает как printf, за исключением того, что он принимает дополнительный (самый левый) аргумент, то есть FILE*, в который вы хотите писать, например,

FILE *fmyfile = fopen("myfile.txt", "w");
fprintf(fmyfile, "The magic number is %d!", 3);

Кроме того, ваши результаты неверны, но это не связанная с этим проблема.

0 голосов
/ 30 марта 2010

Код не содержит инструкций для записи в выходные файлы. Он пишет только в стандартный вывод.

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