#c #for-loop #fgetc
#c #цикл for #fgetc
Вопрос:
Я пытаюсь заставить команду fgetc работать в очень простом цикле for . Хотя (каламбур) он работает в цикле while, он не работает в цикле for, и я не могу понять, почему.
Он должен просто захватить все, что есть в txt-файле, и распечатать его в зашифрованном виде с шагом len
. Чтобы сравнить оригинал, я создал цикл for, который выполняется len
несколько раз, чтобы снова получить fgetc и распечатать исходное сообщение.
Цикл выполняется, но я не могу понять, почему он не принимает значение fgetc в исходный код символа.
#include <stdio.h>
int len;
char ch;
char source;
int main(void)
{
FILE* text = fopen("welt.txt", "r");
while((ch = fgetc(text)) != EOF)
{
printf("%c", ch len);
len ;
}
printf("n%in", len);
for (int i = 0; i < len; i )
{
source = fgetc(text);
printf("%c", source);
}
}
Комментарии:
1. В
for
цикле вы уже находитесь в конце файла. Добавьтеrewind(text)
перед ним.2. Используйте
rewind(text)
, чтобы заставить его работать раньшеfor
, потому что он достиг EOF вwhile
3. Хотелось бы, чтобы это всегда было так просто.. Спасибо!!
4. Также, пожалуйста, измените
char ch, source;
наint ch, source;
. Функцияfgetc()
возвращаетint
. На самом деле почти каждая библиотечная функция, которая имеет дело с «символами», не используетchar
butint
(если это не массив в виде строки C).5. Вы не можете просто проверить
len
. Вам все равно нужно проверить,fgetc
возвращает ли EOF, поскольку нет гарантии от ошибок чтения или того, что файл не изменится. Действительно, вы даже не проверили, завершился ли первый цикл, потому что он достиг конца потока, или произошла ошибка чтения.
Ответ №1:
Добавление перемотки для сброса fgetc на первую позицию в txt-файле делает свое дело.
rewind(text);
for (int i = 0; i < len; i )
{
source = fgetc(text);
printf("%c", source);
}