【发布时间】:2013-02-18 20:41:56
【问题描述】:
我希望通过stdin 和scanf() 从用户那里读取几个数据点。
但是,如果用户希望指示无效数据,用 * 表示,这将违反预期的格式(%f、%d 等),据我了解,导致 scanf()返回错误。
我设想处理这个问题的方法是将来自stdin 的输入作为一系列字符串读取,检查这些是否有*,然后相应地处理它。这似乎非常幼稚和混乱,我想知道是否有更清洁的方法来完成此操作。
请注意,我在非常有限的环境中工作,因此 POSIX/3rd 方解决方案将不适用。仅限 ANSI C :(
【问题讨论】:
-
您需要将输入读入缓冲区并尝试重复解析,直到成功。有很多关于这样做的理论,通常在“编译器”课程中介绍。如果您不想走那条路,您可以使用
fgets或getline将输入读入缓冲区,然后处理一段时间以查看它是如何工作的,但它会变得复杂且缓慢快点,除非只有有限数量的可能正确解析。 -
一个字:
fgets()。 (好吧,也许两个,strchr()也适用。) -
不要使用
scanf。 c-faq.com/stdio/scanfprobs.html -
希望能有一些优雅而简单的东西,但看起来@dmckee 的回应是最好的选择