scanf的多种输入格式

时间:2013-02-18 20:41:56

标签: c string parsing scanf

我希望通过stdinscanf()读取用户的多个数据点。

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

我设想处理这个问题的方法是将stdin的输入作为一系列字符串读取,检查这些字符串是否为*,然后按顺序处理。这看起来非常幼稚和混乱,我想知道是否有更清洁的方法来实现这一目标。

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

1 个答案:

答案 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
}
...