Я пытаюсь заставить команду fgetc работать в очень простом цикле for. Хотя (каламбур) он работает в цикле while, он не работает в цикле for, и я не могу понять, почему.
Он должен просто взять все, что находится в текстовом файле, и распечатать его в зашифрованном виде с шагом len
. Чтобы сравнить оригинал, я создал цикл for, который выполняется len
раза, чтобы снова получить fgetc и распечатать исходное сообщение.
Цикл проходит, но я не могу понять, почему он не получает значение fgetc в источнике char.
#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%i\n", len);
for (int i = 0; i < len; i++)
{
source = fgetc(text);
printf("%c", source);
}
}
for
вы уже находитесь в конце файла. Добавьтеrewind(text)
перед ним. - person Weather Vane   schedule 14.01.2021rewind(text)
, чтобы заставить его работать доfor
, потому что он достиг EOF вwhile
- person IrAM   schedule 14.01.2021char ch, source;
наint ch, source;
. Функцияfgetc()
возвращаетint
. На самом деле почти каждая библиотечная функция, работающая с символами, использует неchar
, аint
(если только это не массив в виде строки C). - person Weather Vane   schedule 14.01.2021len
. Вам все равно нужно проверить, возвращает лиfgetc
EOF, так как нет гарантии от ошибок чтения или от того, что файл не изменится. Действительно, вы даже не проверили, прервался ли первый цикл из-за достижения конца потока или из-за ошибки чтения. - person William Pursell   schedule 14.01.2021