1

我希望通过stdin和读取用户的几个数据点scanf()

但是,如果用户希望指示由 a 表示的无效数据,*这将违反预期的格式(%f%d等),并且据我所知,会导致scanf()返回错误。

我设想处理这个问题的方法是从stdin一系列字符串中读取输入,检查这些字符串,*然后以相应的方式处理。这似乎非常幼稚和混乱,我想知道是否有更清洁的方法来实现这一点。

请注意,我在非常有限的环境中工作,因此 POSIX/3rd 方解决方案将不适用。仅限 ANSI C :(

4

1 回答 1

1

一般来说,我建议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
}
...
于 2013-05-27T21:12:17.217 回答