sscanf如何读取直到空格,制表符或换行符

我在编程课程上有一些作业,我正在用C上这学期,并且在使用sscanf函数时遇到了一些麻烦。

该程序实际上应该以以下形式从用户那里接收一行学生的详细信息:

<ID> <NAME> <GRADE> <AGE> <COUNTRY> <CITY>

对于每个字段的格式,我们都有一些限制,例如ID字段必须为10位数字且不能以0开头。

输入的重要内容是:用户必须将其详细信息用制表符(\ t)分隔。

因此,我尝试使用sscanf将其拆分为多个字段。 我以为如果使用[^\t\n ],它将“理解”这是一个字段。

问题出在sscanf上,这是我对函数的使用:

            // Parse his details
            sscanf(line,"%[^\t\n]\t%[^\t\n ]\t%u\t%u\t%[\t\n ]\t%[\t\n]\t",tmpStudent.ID,tmpStudent.name,&tmpStudent.grade,&tmpStudent.age,tmpStudent.country,tmpStudent.city);

但是,当我运行程序时,ID变量“吃掉了”名称字段,而名称字段为空。

我该如何克服这个问题?

谢谢。

liu6130 回答:sscanf如何读取直到空格,制表符或换行符

尝试正确使用sscanf()是一门艺术,我会尽可能避免使用它。

但这似乎对我有用:

 int n = sscanf(line,"%[^\t]\t%[^\t]\t%u\t%u\t%[^\t]\t%[^\t]",tmpStudent.ID,tmpStudent.name,&tmpStudent.grade,&tmpStudent.age,tmpStudent.country,tmpStudent.city);

始终检查sscanf()的返回值很重要,以确保您已索取了所有六个项目。

在此版本的格式字符串中,我添加了人工间距以使内容更易于阅读,您可以删除它们以供实际使用(当然),但这是基于制表符分隔所有内容的要求:

"%[^\t]  \t  %[^\t]  \t  %u  \t  %u  \t  %[^\t]  \t  %[^\t]"

据我所知,您所关心的只是一系列不是标签的字符。

本文链接:https://www.f2er.com/3169989.html

大家都在问