1

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

林肯、亚伯拉罕·
奥巴马、巴拉克·侯赛因
·多伊、约翰

现在我的问题是我最初使用 fscanf 在每个名称中读取了两个数组,但是它将 Hussien 读取为新行?所以我也尝试为中间名做三个数组,但是当它读入文件时,它显示输出为。

林肯、亚伯拉罕·奥巴马、
巴拉克·侯赛因·多伊
·约翰

while ( fscanf( input,"%s %s", &last[i],&first[i] ) !=  EOF ) 
{ i++; }

我究竟做错了什么?我想扫描整行,但在程序的另一部分中,我必须将名字和姓氏分开,因为“用户 ID”将在前创建。a_林肯等

4

4 回答 4

2

"%[^,], %[^\r\n]"用作fscanf. _ 它忽略姓氏的冒号并读取同一行中剩余的字符作为名字。

于 2012-10-26T06:38:39.187 回答
0

做这个

char *last[30];
char *first[30];
    while ( fscanf( input,"%s %s", last[i],first[i] ) !=  EOF ) 
于 2012-10-26T06:29:50.897 回答
0

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

您需要调用不同的函数来将一行读入字符串。然后调用 sscanf 读取字符串,首先是逗号之前的部分,然后是逗号之后的部分。

于 2012-10-26T06:34:25.687 回答
0

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

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

现在您从文件中获得了完整的行

  • 对于每一行,使用 strtok() 函数来分隔标记
  • 使用令牌计数,您将了解中间名是否存在。
于 2012-10-26T07:01:47.803 回答