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

时间:2017-10-24 21:21:10

标签: c string file scanf fgets

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

以下是ouput文件的外观: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,现在它就像一个魅力。

2 个答案:

答案 0 :(得分:0)

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

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

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

如果您不介意使用C ++,可以尝试创建输出流os并编写os << endl 请注意,某些编译器可能会自动转换&#39; \ n&#39;进入相应的操作系统终点字符/ caracther序列,而有些可能没有。

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

答案 1 :(得分:0)

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