如何使用fscanf和数组读入具有名和姓的文件

时间:2012-10-26 06:25:27

标签: c arrays scanf

我几乎有整个代码想通了,问题是文件有名字,有些名字包含中间名,有些则没有。文件中的每个名称都在一个新行

林肯,亚伯拉罕
奥巴马,Barak Hussien
Doe,John

现在我的问题是我最初有两个数组用fscanf读取每个名字,但它将Hussien作为新行读取?那么我也尝试为中间名做三个数组,但是当它在文件中读取时它会将输出显示为。

林肯,亚伯拉罕奥巴马 Barak Hussien Doe
约翰

while ( fscanf( input,"%s %s", &last[i],&first[i] ) !=  EOF ) 
{ i++; }
我做错了什么?我想扫描整行,但在程序的另一部分我必须首先和姓氏分开,因为“用户ID”将创建前。 a_lincoln等。

4 个答案:

答案 0 :(得分:2)

使用"%[^,], %[^\r\n]"作为fscanf中的格式字符串。它会忽略姓氏的冒号,并在同一行中读取第一个名称的剩余字符。

答案 1 :(得分:0)

这样做

char *last[30];
char *first[30];
    while ( fscanf( input,"%s %s", last[i],first[i] ) !=  EOF ) 

答案 2 :(得分:0)

在fscanf或scanf或sscanf的格式字符串中,每个空白实例都会使该函数读取并丢弃该位置输入中出现的任何空格,包括换行符。所以fscanf不会逐行阅读。

您需要调用另一个函数来将一行读入字符串。然后调用sscanf读取字符串,首先调用部分直到逗号,然后调用逗号之后的部分。

答案 3 :(得分:0)

使用从文件中读取一行 while ( fscanf( input,"%[^\n]s", line) != EOF )

“line可以是字符数组或char指针”

现在你有来自文件的完整行

  • 每行使用strtok()函数分隔标记
  • 使用令牌计数,您将知道是否存在midle名称。