【问题标题】:How to use fscanf and arrays to read in file with first and last names如何使用 fscanf 和数组读取包含名字和姓氏的文件
【发布时间】:2012-10-26 06:25:26
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 不需要和号...
  • squiguy,我们不知道 Richard 是否需要 & 符号,因为 Richard 没有向我们展示 last 和 first 的定义。

标签: c arrays scanf


【解决方案1】:

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

【讨论】:

  • 工作得很好,除了当我做 fprintf 只有第一行遵循格式规范,然后每一行它不断添加一个新行 fprintf(oput, "%d\t\t%s, \t %s\t%s_%.1s",i,last[i],first[i],last[i],first[i]);
【解决方案2】:

这样做

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这样的例子是什么?我不知道如何使用 sscanf
    【解决方案4】:

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

    "行可以是字符数组或字符指针"

    现在你已经从文件中获得了完整的行

    • 对于每一行,使用 strtok() 函数来分隔标记
    • 使用令牌计数,您将了解中间名是否存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多