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

时间:2010-09-20 23:41:22

标签: 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);

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

word1 word5
word2 kkk
word3 1322
word4 synsfsdfs

它仅打印:

word read is: word2
word read is: word3
word read is: word4
word read is: 

3 个答案:

答案 0 :(得分:10)

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

即可
        // fscanf(fp,"%*[^\n]%s",word);//not working very well...
           fscanf(fp,"%s%*[^\n]",word);

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


编辑一些解释

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

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

答案 1 :(得分:1)

so ross$ expand < first.c
#include <stdio.h>

int main(void) {
  char line[1000], word[1000];

  while(fgets(line, sizeof line, stdin) != NULL) {
    word[0] = '\0';
    sscanf(line, " %s", word);
    printf("%s\n", word);
  }
  return 0;
}

so ross$ ./a.out < first.c
#include

int
char

while(fgets(line,
word[0]
sscanf(line,
printf("%s\n",
}
return
}

更新:好的,这里只使用了scanf()。实际上,scanf不能很好地处理离散行,并且通过将字缓冲区设置为与行缓冲区相同的大小,您将失去避免字缓冲区溢出的选项,这是值得的。 ..


so ross$ expand < first2.c
#include <stdio.h>

int main(void) {
  char word[1000];

  for(;;) {
    if(feof(stdin) || scanf(" %s%*[^\n]", word) == EOF)
      break;
    printf("%s\n", word);
  }
  return 0;
}

so ross$ ./a.out < first2.c
#include
int
char
for(;;)
if(feof(stdin)
break;
printf("%s\n",
}
return
}

答案 2 :(得分:0)

看看这个,strtok功能就是我们所需要的。你可以告诉函数在哪里用参数分割字符串,比如strtok (singleLine," ,'(");。每当它看到空白区域时它就会被剪切出来&#34; &#34; &#34; &#39; &#34;和(。 strtok (singleLine," ");或仅在空白处。

 FILE *fPointer,*fWords,*fWordCopy;
char singleLine[150];

fPointer= fopen("words.txt","r");
fWordCopy= fopen("wordscopy.txt","a");

char * pch;
while(!feof(fPointer))
{
    fgets(singleLine,100,fPointer); 
    pch = strtok (singleLine," ,'(");
    fprintf(fWordCopy,pch);
    fprintf(fWordCopy, "\n"); 
}

fclose(fPointer);

Results