c-sscanf如何读取到空白、制表符或换行符



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

该程序实际上应该从用户那里收到一行学生的详细信息,格式如下:

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

我们对每个字段的形式都有一些限制,比如ID字段必须是10位数字,并且不能以0开头。

输入的重要之处在于:用户必须在用制表符(\t(分隔的地方写下自己的详细信息

因此,我尝试使用sscanf将其拆分为多个字段。我想如果我使用[^tn ],它就会"理解"这是一个字段。

问题是sscanf,这里是我使用的函数:

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

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

我该如何克服这个问题?

谢谢。

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

但这似乎对我有效:

int n = sscanf(line, "%[^t]t%[^t]t%ut%ut%[^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]"

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

最新更新