Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Считывание символов из файла

Автор: sheka 12.08.2011 1:00

#include <stdio.h>

#define debug
#ifdef debug
#include <conio.h>
#endif

main()
{
FILE *fin = fopen( "in.txt", "rb" );
char ch;
while ( !feof( fin ) )
{
fscanf( fin, "%c", &ch);
printf("%c", ch);
#ifdef debug
getch();
#endif
}
fclose( fin );
}

Почему, собственно, повторяется последний символ при выводе на экран?

А такая реализация добавляет пробел:
        ch = fgetc( fin);
putchar(ch);

Автор: IUnknown 12.08.2011 1:16

Цитата
Почему, собственно, повторяется последний символ при выводе на экран?
Потому что:
http://forum.pascal.net.ru/index.php?s=&showtopic=26753&view=findpost&p=149702

Update
Цитата
А такая реализация добавляет пробел:
Непечатный символ. Вот такой код очень хорошо это показывает:
    while ( !feof( fin ) )
{
ch = fgetc( fin);
putchar(ch);
printf("(%d)", (int)ch); /* выводим код символа */
}

Автор: sheka 16.09.2011 23:39

#include <stdio.h>
main()
{
FILE *fin = fopen("fin.txt", "r");
FILE *fout = fopen("fout.txt", "w");
char ch;
do
if(fscanf(fin, "%c", &ch)) fprintf(fout, "%c", ch);
while (!feof(fin));
fclose(fout);
fclose(fin);
}

Все равно выдает последний символ. Почему? Ведь повторная проверка то есть.

Автор: IUnknown 16.09.2011 23:55

   do
if(fscanf(fin, "%c", &ch) != EOF) fprintf(fout, "%c", ch);
while (!feof(fin));

?

Чувствуешь, где подвох?

Автор: sheka 17.09.2011 0:04

А я с упорством читал EOF, а проверял на NULL (что понятное дело, тоже не работает).