0

stackoverflow的第一次用户,但长期访问者。我认为开始更多地参与是谨慎的做法。但首先,我有一个小问题:)

基本上我要做的是接受 3 个数字(可以是正数、负数或小数),每个数字仅使用 scanf 由空格(XYZ)分隔并放入数组/结构中(忽略空格),并返回一个如果用户没有明确输入数字或以不正确的格式输入数字,则会出现错误消息。这可以用scanf吗?什么是替代方案?

我搜索了所有不同的问题,但找不到我能理解的答案(第一次使用 C)。非常感谢链接、解释或一些示例代码:)

4

1 回答 1

2

听起来好像您希望三个数字在一条线上;让它们分布在多条线上是不可接受的。你没有指出如果有第四个数字会发生什么。

使用 plain scanf(),即使不是不可能,也很难控制它。使用fgets()并且sscanf()是可行的:

char line[4096];
while (fgets(line, sizeof(line), stdin) != 0)
{
    double v1, v2, v3;
    if (sscanf(line, "%g %g %g", &v1, &v2, &v3) != 3)
        ...format error...
    ...save v1, v2, v3 into your structure or array...
}

或者,您可以找出转换完成的位置,并检查三个数字之后的行上是否没有碎片。

于 2013-05-20T00:24:53.037 回答