如何只阅读每行的第一个单词?

nev*_*ind 3 c file scanf

我做了很多简单的程序,但我只想char word[30]从文本文件的每一行读取第一个单词.

我试过了,但没有成功.哦,每次我阅读它都要重用那个char.(每次我阅读时都要列出一个有序列表).

任何人都可以通过一种简单而"清晰"的方式向我展示一种从文件中读取这种方式的方法吗?

FILE *fp;
char word[30];
fp = fopen("/myhome/Desktop/tp0_test.txt", "r");
if (fp == NULL) {
    printf("Erro ao abrir ficheiro!\n");
} else {
    while (!feof(fp)) {
        fscanf(fp,"%*[^\n]%s",word);//not working very well...
        printf("word read is: %s\n", word);
        strcpy(word,""); //is this correct?
    }
}
fclose(fp);
Run Code Online (Sandbox Code Playgroud)

例如,对于包含以下内容的文件:

word1 word5
word2 kkk
word3 1322
word4 synsfsdfs
Run Code Online (Sandbox Code Playgroud)

它只打印这个:

word read is: word2
word read is: word3
word read is: word4
word read is: 
Run Code Online (Sandbox Code Playgroud)

pmg*_*pmg 10

只需在格式字符串中交换转换规范即可

        // fscanf(fp,"%*[^\n]%s",word);//not working very well...
           fscanf(fp,"%s%*[^\n]",word);
Run Code Online (Sandbox Code Playgroud)

读取第一个单词并忽略其余单词,而不是忽略该行并读取第一个单词.


编辑一些解释

%s忽略空格,因此如果输入缓冲区有"四十二",则scanf忽略第一个空格,将"四十"复制到目标,并将缓冲区放在"二"之前的空格处

%*[^ \n]忽略换行符之外的所有内容,不包括换行符.因此,包含"one \n two"的缓冲区在scanf之后位于换行符处(就像它是"\n two")