【发布时间】:2021-01-21 18:35:00
【问题描述】:
免责声明。我见过很多问题,包括几乎完全相同的代码 sn-ps,但似乎没有人回答这个问题。
对于入门级 CS 课程,我们的任务是制作一个带有 ID、名称的简单程序和用户输入的年龄并将其保存到文件中。这很简单,我很快就让它工作了。问题是,为了让名称输入的一部分正常工作,我不得不“欺骗”我遇到的问题。
有问题的代码 sn-p。
int id, age;
char name[40]={0};
printf("ID: ");
scanf("%i",&id);
printf("Name: ");
scanf("%*c");
scanf("%[^\n]%*c",name);
printf("Age: ");
scanf("%i",&age);
这很好用。但是这条线让我很恼火; scanf("%*c"); 它的唯一目的是处理潜伏在流中的 '\n' 字符,可能来自先前的输入。出于某种原因,我觉得这是在作弊,或者如果我必须使用此解决方法,我就做错了。任何提示表示赞赏。
【问题讨论】:
-
一般建议:不要使用
scanf()。使用fgets()读取一行,然后使用sscanf()解析它。 -
如果您必须使用
scanf(),请怜悯并检查返回值,否则您将遇到未定义的行为很快。