Почему в файле появляются лишние пробелы после копирования текста из одного файла в другой в C? - PullRequest
4 голосов
/ 27 февраля 2020
char c, cp;

FILE *input_file, *output_file;

input_file = fopen("d:\\input.txt","r");
output_file = fopen("d:\\output.txt", "w");

if(input_file==NULL){
    printf("cannot open the input.txt file.");
    exit(0);
}

if(output_file == NULL){
    printf("cannot open the output.txt file.");
    exit(0);
}

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

c = fgetc(output_file);
while(c!=EOF){
    printf("%c",c);
    c=fgetc(output_file);
}

fclose(input_file);
fclose(output_file);
getch();

Это код, который я использовал при копировании текстового файла. В файле input.txt я написал «Привет, как дела?».

После выполнения кода, текст «Привет, как дела» копируется в файл output.txt, но их больше ста пробелы после скопированного текста. После кода ниже программа не работает:

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

Код ниже кода выше не работает. Что происходит? Пожалуйста, объясните подробно. Я новичок в C.

Ответы [ 2 ]

4 голосов
/ 27 февраля 2020

Вы должны определить c и cp как int, а не как char. EOF определяется как целочисленное значение, которое отличается от любого символа, который, например, может быть прочитан как fgetc(), который возвращает значение в диапазоне без знака или EOF, необязательно значение в диапазоне символов. (кредиты @chux).

Так что while( cp != EOF ) может не стать истинным, если cp является символом.

И для второго вопроса: если вы хотите прочитать то, что написали Вы должны

  1. открыть файл output.tx в режиме "w +". «w» разрешает только запись, «w +» также позволяет читать, но, как и «w», создает файл, если он не существует, и усекает его, если это так. См. Справочную страницу для получения дополнительной информации и опций.
  2. вызов rewind(output_file) или fseek(output_file, 0, SEEK_SET) между чтением и письмом.
0 голосов
/ 27 февраля 2020

Вы должны закрыть ваш выходной файл, чтобы зафиксировать изменения и иметь возможность прочитать второй раз:

cp = fgetc(input_file);
while(cp!=EOF){
    fputc(cp,output_file);
    cp=fgetc(input_file);
}

fclose(output_file);
// .....        
c = fgetc(output_file);
...