【发布时间】:2021-01-14 12:44:21
【问题描述】:
我试图让 fgetc 命令在一个非常简单的 for 循环中工作。虽然(双关语)它在 while 循环中有效,但在 for 循环中无效,我不知道为什么。
它应该只抓取 txt 文件中的任何内容并将其以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)。 -
使用
rewind(text)使其在for之前工作,因为它已在while中达到EOF -
我希望它总是那么容易.. 谢谢!!
-
另外请将
char ch, source;更改为int ch, source;。函数fgetc()返回int。事实上,几乎每个 处理“字符”的库函数不使用char,而是使用int(除非它是一个作为C 字符串的数组)。 -
您不能只检查
len。您仍然需要检查fgetc是否返回 EOF,因为无法保证不会出现读取错误或文件不会更改。实际上,您甚至没有检查第一个循环是否因为到达流的末尾而终止,或者是否存在读取错误。