【问题标题】:C program to get first word of each line from a .txt file and print that word onto another .txt file: Kind of works but also prints random lettersC 程序从 .txt 文件中获取每行的第一个单词并将该单词打印到另一个 .txt 文件中:有点工作,但也打印随机字母
【发布时间】:2018-04-05 19:44:59
【问题描述】:

所以我们有一个名为dictionary1.txt 的文件,它旁边有单词及其发音。我想要做的是从每一行中获取第一个单词并将它们打印到程序从头开始创建的另一个 txt 文件中。我的代码可以,但它也会在英文单词之间打印随机的中文字母,我不知道为什么。

输出文件如下所示:https://imgur.com/a/pZthP

(在dictionary1.txt中,发音与每行中的实际单词分开,并带有空格)

我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
char line[100];
int i = 0;
FILE* fp1 = fopen("dictionary1.txt", "r");
FILE* fp2 = fopen("dictionary2.txt", "w");

if (fp1 == NULL || fp2 == NULL){
    printf("ERROR");
    return -1;
}

while (fgets(line, 100, fp1) != NULL){
    while (line[i] != ' '){
        fputc(line[i], fp2);
        i++;
    }
    i=0;
    fputc('\0', fp2);
}

return 0;
}

我也尝试了 fputc('\n', fp2) ,但无论如何我都无法进入我从头开始创建的文件的下一行。乱七八糟的中文字母我也甩不掉。

编辑:我想通了。我正在处理的 .txt 文件以 Unicode 格式保存,这不适用于我的程序。我把它变成了 ANSI,现在它就像一个魅力。

【问题讨论】:

  • 您的程序按我的预期工作(在将fputc('\0', fp2) 替换为fputc('\n', fp2) 之后),如果一行中没有空格,我检查了换行符。我唯一能想到的是,您的输入行的前 100 个字符不包含空格,因此您会遇到缓冲区溢出,并且输出文件中会出现随机垃圾。
  • 我的还是不行。我用一个较小的 .txt 文件对其进行了测试,它工作正常。当我在一个巨大的字典上运行它时,它仍然会在单词之间打印随机字符......

标签: c string file scanf fgets


【解决方案1】:

.txt 文件是使用 Unicode 格式保存的。我把它变成了 ANSI,然后一切都突然修复了。

【讨论】:

    【解决方案2】:

    \n 不是所有操作系统和所有编辑器上的正确行分隔符。

    如果您在记事本上编辑 txt 文件,请尝试 fputs ("\r\n", fp2);,其中 \r 表示回车(光标在行的第一个字符处返回)和 \n 新行。

    一般来说,Windows 使用'\r\n' 作为行分隔符,'\n' 字符显示为除结束行之外的其他内容,至少在记事本中是这样。 Linux 和 Mac OS 使用不同的行分隔符。您可能还想尝试fprintf(fp2, "\n"); 看一下这个 \n and \r seem to work everywhere. Why is line.separator more portable?

    如果您不介意使用 C++,您可以尝试创建一个输出流 os 并编写 os &lt;&lt; endl 请注意,有些编译器可能会自动将 '\n' 转换为相应的操作系统结束行字符/字符序列,而有些可能不会。

    另外,将while循环条件更改为line[i] != ' ' &amp;&amp; line[i] != '\0',并使用fclose关闭文件fp2

    【讨论】:

    • 还是不行。我用一个较小的 .txt 文件对其进行了测试,它工作正常。当我在一个巨大的字典上运行它时,它仍然会在单词之间打印随机字符。话虽如此,我遇到了另一个奇怪的问题。当我添加您添加到 if 控件的第二个条件时,它也丢失了单词。仅随机字母。编辑:我将 '\0' 更正为 '\n' 并返回打印随机字母以及实际单词...
    • 在普通文本模式下打开文件时,c 库会处理 \n\r\n 的翻译。
    猜你喜欢
    • 2013-10-09
    • 2020-06-05
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    相关资源
    最近更新 更多