【问题标题】:Weird spaces when iterating through a file in C language [closed]用 C 语言遍历文件时出现奇怪的空格 [关闭]
【发布时间】:2019-01-05 21:39:28
【问题描述】:

美好的一天,这是我的代码:

FILE* fp;
fp = fopen("a.txt","r+");
if (fp != NULL){
    int c = 0;
    while(!feof(fp)) {
        char k = fgetc(fp);
        if (k == '$') {
            c = 0;
            printf("inside '%c' %d\n", k, c);
            continue;
        }
        c++;
        printf("outside '%c' %d\n", k, c);
    }

这是文件:

123456$test$pan$test$

输出:

在“1”之外 1
外'2' 2
外'3' 3
外'4' 4
外'5' 5
外'6' 6
'7side' //*
在“$”内 0
外't' 1
在“e”之外 2
外面的 3
外面't' 4
'5side' //*
在“$”内 0
在“p”1之外
在“a”之外 2
外'n' 3
在“$”内 0
外't' 1
在“e”之外 2
外面的 3
外面't' 4
在“$”内 0
' ' 1 外 //*

我无法理解 //* 发生了什么

感谢您的帮助!

【问题讨论】:

  • 不要发布代码图片,也不要发布代码链接。您的问题应包含minimal reproducible example
  • 完成,完成!我的坏
  • 文本文件中似乎有一些没有在编辑器中显示的 CR。它是 Windows 上的编辑器和 Linux EOL 的文件吗?您是否在十六进制查看器中查看了您的文件?
  • 不是您的问题的答案,而是您的代码的其他一些问题:1. while (!feof(fp)) 不好。 feof 仅在您尝试从FILE* 读取失败之后返回非零值。 2. char k = fgetc(fp); 不好,因为 fgetc 返回 int,而不是 charfgetc 在失败时返回 EOF,您没有检查(并且无法检查,因为您将返回值截断为 char。相反,您的循环应该是 int k; while ((k = fgetc(fp)) != EOF) { ...

标签: c file


【解决方案1】:

我认为您在 a.txt 中的每个 '$' 之前都有不可打印的字符,即使没有通过记事本指出,因为您可以看到写入的计数达到 7 然后 5 等等,这不是如果文本是我们看到的,则可能

a.txt 仅包含 ascii 字符还是 UTF8 或类似的字符?记事本可以管理编码,但当然 fgetc 不能

【讨论】:

  • 其实你说得对,我刚刚用崇高的文字打开了.txt,其中三行不是一行,但记事本只显示了一行。
猜你喜欢
  • 2023-02-26
  • 1970-01-01
  • 2014-07-11
  • 2021-06-05
  • 2015-03-25
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多