stackoverflow的第一次用户,但长期访问者。我认为开始更多地参与是谨慎的做法。但首先,我有一个小问题:)
基本上我要做的是接受 3 个数字(可以是正数、负数或小数),每个数字仅使用 scanf 由空格(XYZ)分隔并放入数组/结构中(忽略空格),并返回一个如果用户没有明确输入数字或以不正确的格式输入数字,则会出现错误消息。这可以用scanf吗?什么是替代方案?
我搜索了所有不同的问题,但找不到我能理解的答案(第一次使用 C)。非常感谢链接、解释或一些示例代码:)
stackoverflow的第一次用户,但长期访问者。我认为开始更多地参与是谨慎的做法。但首先,我有一个小问题:)
基本上我要做的是接受 3 个数字(可以是正数、负数或小数),每个数字仅使用 scanf 由空格(XYZ)分隔并放入数组/结构中(忽略空格),并返回一个如果用户没有明确输入数字或以不正确的格式输入数字,则会出现错误消息。这可以用scanf吗?什么是替代方案?
我搜索了所有不同的问题,但找不到我能理解的答案(第一次使用 C)。非常感谢链接、解释或一些示例代码:)
听起来好像您希望三个数字在一条线上;让它们分布在多条线上是不可接受的。你没有指出如果有第四个数字会发生什么。
使用 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...
}
或者,您可以找出转换完成的位置,并检查三个数字之后的行上是否没有碎片。