C 程序从 .txt 文件获取每行的第一个单词并将该单词打印到另一个 .txt 文件 : Kind of works but also prints random letters

标签 c string file scanf fgets

所以我们有一个名为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,现在它就像一个魅力。

最佳答案

\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 << endl 请注意,有些编译器可能会自动将 '\n' 转换为相应的操作系统结束行字符/字符序列,而有些编译器可能不会。

还有一点,把while循环条件改成line[i] != ' ' && line[i] != '\0'并关闭文件fp2使用fclose .

关于C 程序从 .txt 文件获取每行的第一个单词并将该单词打印到另一个 .txt 文件 : Kind of works but also prints random letters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46920214/

相关文章:

c - 如何使我的数组可用于其他函数?

java - 有没有更好的方法来检查字符串中是否有数字?

javascript - 我在用 PHP 制作多文件 uploader 时遇到一些麻烦

Java输入流追加而不删除

file - 在 MATLAB 中导入带有注释的文本文件

c# - 如何通过C++或C或C#在Windows中创建指定大小的空文件?

c - 汇编 x86 中的 Math.h 库函数?

c - 如何帮助 gcc 向量化 C 代码

c - 字符串打印问题

c++ - boost::variant<T> 到 std::string