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

问题描述 投票:0回答:1

我在编程课程上有一些作业,我正在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变量“吃掉了”名称字段,并且名称字段留空。

我该如何克服这个问题?

谢谢。

c scanf
1个回答
0
投票

[尝试使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]"

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

© www.soinside.com 2019 - 2024. All rights reserved.