C 程序从.txt文件中获取每行的第一个单词并将该单词打印到另一个.txt文件中:有点有效,但也打印随机字母



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

下面是输出文件的外观: https://i.stack.imgur.com/LYfNV.jpg

(发音与每行中的实际单词分开,在字典中带有空格1.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('', fp2);
}
return 0;
}

我也尝试了 fputc('', fp2),但无论如何我都无法进入我从头开始创建的文件中的下一行。我也无法摆脱所有随机的中文字母。

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

\

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

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

一般来说,Windows 使用"\r"作为行分隔符,""字符显示为结束行以外的其他字符,至少在记事本中是这样。Linux 和 Mac OS 使用不同的行分隔符。您可能还想尝试fprintf(fp2, "n");看看这个 和 \r 似乎在任何地方都有效。为什么行分隔符更便携?

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

另一件事,将while循环条件更改为line[i] != ' ' && line[i] != ''并使用fclose关闭文件fp2

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

相关内容

最新更新