Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Посимвольный вывод на экран строки


Автор: Russs 28.5.2007, 23:28
Код


void main(){
clrscr();
FILE*f;
f=fopen("f.txt","r");
int i=0;
char x;
while(!feof(f)){
fscanf(f,"%c",&x);
i++;
cout<<x;
}
fclose(f);
getch();}



В файле записано TEST, а на экран выводи TESTT
Почему? В чем ошибка?  smile  
Помогите плиз!

Автор: ama_kid 29.5.2007, 16:01
feof возвращает true после считывания с конца файла... Поэтому правильнее будет так:
Код
void main(){
clrscr();
FILE*f;
f=fopen("f.txt","r");
int i=0;
char x;
while(1){
fscanf(f,"%c",&x);
if (feof(f)) break;
i++;
cout<<x;
}
fclose(f);
getch();}

Автор: JackYF 29.5.2007, 16:48
Как вариант того, но без while (1):

Код

void main(){
clrscr();
FILE*f;
f=fopen("f.txt","r");
int i=0;
char x;
while( fscanf(f,"%c",&x), !feof(f) )
{
i++;
cout<<x;
}
fclose(f);
getch();}



Автор: DigitSphinx 29.5.2007, 17:19
Код

FILE * f;
f = fopen("f.txt","r");
char x;
while(fscanf(f,"%c",&x) != -1)
    cout<<x;
fclose(f);
getch();

Автор: Oleg_Ci 29.5.2007, 17:48
Да...
У DigitSphinx, лучше всех вариант  smile

Добавлено через 2 минуты и 56 секунд
Можно так ещё  smile 
Код

while(fscanf(f,"%c",&x) > 0 )

Автор: JackYF 29.5.2007, 17:51
Цитата(DigitSphinx @  29.5.2007,  17:19 Найти цитируемый пост)
while(fscanf(f,"%c",&x) != -1)


лучше EOF:

Код

while(fscanf(f,"%c",&x) != EOF)


Добавлено через 6 минут и 49 секунд
Цитата(Oleg_Ci @  29.5.2007,  17:48 Найти цитируемый пост)
Можно так ещё  smile 
while(fscanf(f,"%c",&x) > 0 )


мдя.

Автор: zkv 29.5.2007, 18:10
Цитата(JackYF @  29.5.2007,  17:51 Найти цитируемый пост)
лучше EOF:

а может еще корректнее 
Код

while(fscanf(f,"%c",&x) == 1 )
 ?  smile 
так как fscanf возвращает количество прочитанных элементов.

Автор: DigitSphinx 29.5.2007, 18:31
Цитата

У DigitSphinx, лучше всех вариант  

ГЫ  спс smile 
В этом случае ("%c") вариант zkv Дает максимальную защиту от глюков !  smile 

Автор: JackYF 29.5.2007, 19:54
Код

RETURN VALUE
       These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero
       in the event of an early matching failure.

       The value EOF is returned if the end of input is reached before the first successful conversion or matching failure  occurs.   EOF  is
       also  returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indi-
       cate the error.



EOF, имхо, надежнее здесь проверять.

Добавлено через 36 секунд
Цитата(DigitSphinx @  29.5.2007,  18:31 Найти цитируемый пост)
Дает максимальную защиту от глюков !  smile 


 smile Как в рекламе, блин.

Автор: Russs 29.5.2007, 20:08
Всем огромное спасибо! Я вчера сделал сам, так же как посоветовал zkv.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)