我希望通过stdin
和scanf()
读取用户的多个数据点。
但是,如果用户希望指出由*
表示的无效数据,则会违反预期格式(%f
,%d
等),据我所知,导致scanf()
返回错误。
我设想处理这个问题的方法是将stdin
的输入作为一系列字符串读取,检查这些字符串是否为*
,然后按顺序处理。这看起来非常幼稚和混乱,我想知道是否有更清洁的方法来实现这一目标。
请注意,我的工作环境非常有限,因此POSIX /第三方解决方案不适用。仅限ANSI C :(
答案 0 :(得分:1)
一般情况下,我建议输入fgets()
,但是......
如果您要求用户对无效数据使用“nan”,则有一个简单的scanf()
解决方案。通过输入“nan”(非数字),您可以解决3个问题:这个问题,如何在代码中表示无效数据以及如何打印出无效数据。
示例:每行读取2个数据点
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
...
double f1, f2;
int i;
f1 = f2 = atof("NaN");
i = scanf("%lf %lf\n", &f1, &f2);
if (i != 2) {
// Handle input error
}
if (isnan(f1)) {
// Handle invalid f1
}
...