从文本文件中的字符串中的两个单词

我试图在一个字符串中得到两个单词,我不知道如何做到这一点。 我试过,但如果在文本文件中我有’名字Penny Marie’它给了我:名字Penny。 我怎样才能在s1中获得Penny Marie? 谢谢

#include  #include  int main() { printf("Hello world!\n"); char s[50]; char s1[20]; FILE* fp = fopen("file.txt", "rt"); if (fp == NULL) return 0; fscanf(fp,"%s %s",s,s1); { printf("%s\n",s); printf("%s",s1); } fclose(fp); return 0; } 

更改fscanf格式,告诉它​​在新行之前不要停止阅读:

fscanf(fp,"%s %[^\n]s",s,s1);

你应该使用fgets 。

或者您可以尝试这样做:

 fscanf(fp,"%s %s %s", s0, s, s1); { printf("%s\n",s); printf("%s",s1); } 

并声明s0为空*

其他答案解决了根据您的需要调整fscanf调用的fscanf 。 (虽然fscanf()通常不是你要求的最佳方式。)你的问题是关于从包含以下内容的文件中的一行获取2个单词PennyMarie具体信息: name Penny Marie 。 如评论中所述,如果文件包含多于一行需要解析,或者名称字符串包含可变数量的名称,该怎么办? 通常,以下函数和技术更合适,更常用于从文件中读取内容并将其内容解析为字符串:

fopen()及其论点。
与fgets()
strtok() (或strtok_r() )
如何确定文件中的行数 (对于创建字符串数组很有用)
如何将文件行读入字符串数组

部署这些技术和function可以通过多种方式进行调整,以解析文件中的内容。 为了说明,下面实现了一个使用这些技术的小例子,它将处理您所述的需求,包括每个文件多行和每行中可变数量的名称。

给定File: names.txt在本地目录中:

 name Penny Marie name Jerry Smith name Anthony James name William Begoin name Billy Jay Smith name Jill Garner name Cyndi Elm name Bill Jones name Ella Fitz Bella Jay name Jerry 

下面按行数读取文件以表征其内容,并且最长行创建一个字符串数组,然后使用文件中的名称填充数组中的每个字符串,而不管名称的部分数量。

 int main(void) { // get count of lines in file: int longest=0, i; int count = count_of_lines(".\\names.txt", &longest); // create array of strings with information from above char names[count][longest+2]; // +2 - newline and NULL char temp[longest+2]; char *tok; FILE *fp = fopen(".\\names.txt", "r"); if(fp) { for(i=0;i 

fscanf行更改为fscanf(fp, "%s %s %s", s, s1, s2)

然后你可以printf你的s1s2变量来获得“Penny”和“Marie”。

尝试fgetsfunction

  fp = fopen("file.txt" , "r"); if(fp == NULL) { perror("Error opening file"); return(-1); } if( fgets (str, 60, fp)!=NULL ) { /* writing content to stdout */ puts(str); } fclose(fp); 

在上面的代码中,它将写出最多60个字符的内容。 如果我没有弄错的话,你可以使用str(len)使该部分动态化。