我希望通过stdin
和读取用户的几个数据点scanf()
。
但是,如果用户希望指示由 a 表示的无效数据,*
这将违反预期的格式(%f
、%d
等),并且据我所知,会导致scanf()
返回错误。
我设想处理这个问题的方法是从stdin
一系列字符串中读取输入,检查这些字符串,*
然后以相应的方式处理。这似乎非常幼稚和混乱,我想知道是否有更清洁的方法来实现这一点。
请注意,我在非常有限的环境中工作,因此 POSIX/3rd 方解决方案将不适用。仅限 ANSI C :(
一般来说,我建议fgets()
输入,但是......
scanf()
如果您强制用户对无效数据使用“nan”,则有一个简单的解决方案。通过输入“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
}
...