【问题标题】:For loop is not picking up fgetcFor 循环没有拾取 fgetc
【发布时间】: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,因为无法保证不会出现读取错误或文件不会更改。实际上,您甚至没有检查第一个循环是否因为到达流的末尾而终止,或者是否存在读取错误。

标签: c for-loop fgetc


【解决方案1】:

添加倒带以将 fgetc 重置到 txt 文件中的第一个位置就可以了。

rewind(text);

for (int i = 0; i < len; i++)
{
    source = fgetc(text);
    printf("%c", source);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多