C Eclipse - Печать нежелательных символов Юникода при чтении файла - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в C и пытаюсь прочитать текстовый файл, содержащий только символы Hello world.

Мой код:

#include <stdio.h>
#include <ctype.h>
FILE *fin = fopen("t1.txt", "r");
char temp = fgetc(fin);
printf("%c", temp);
while (temp != EOF) {
    temp = fgetc(fin);
    printf("%c", temp);
}
fclose(fin);

Однако вывод - Hello worldÿ. Я добавил новую строку в конец Hello world, и после нее появляется ÿ. Я использовал этот код для обхода и печати текстового файла, заполненного int, без проблем, но изменение с% d на% c приводит к тому, что печатается такой же странный символ. Мне сказали, что это локальная проблема, потенциально связанная с восточными языками на моем P C или новом обновлении Eclipse. В чем может быть проблема и как ее исправить? Спасибо.

Ответы [ 2 ]

1 голос
/ 18 июня 2020
#include <stdio.h>
#include <ctype.h>
FILE *fin = fopen("t1.txt", "r");
int temp;
while ((temp = fgetc(fin)) != EOF) {
    printf("%c", temp);
}
fclose(fin);

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

Как также упоминалось в комментариях, возвращается fgetc() и int, а не char, поэтому я сделал это изменение и здесь.

Если позволите, я также хотел бы отметить, что temp - довольно плохое название для переменной, потому что оно не очень наглядно. Возможно, рассмотрите возможность использования чего-то даже вроде c, что очень просто. Оно короткое и обычно дает понять, что вы имеете дело с персонажем (хотя технически это int)

0 голосов
/ 21 июня 2020

Проблема устранена путем присвоения (temp = fgetc(fin)) != EOF.

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