我有一个任务,用户必须一个接一个地输入四个输入。它们是:字符、浮点数、浮点数、整数。
主要问题是如何检查错误并确保使用的输入有效输入?
我已经完成了字符部分,但是对于浮点数和整数,我如何检查是否只输入了数字并在输入字母或符号时打印错误消息?
可能想isdigit()
或isaplha()
但不确定如何实现它们的使用。
注意我已经用于scanf()
输入但不确定如何检查输入是否有效?
如果要求用户输入一个字符串、两个浮点数和一个整数,请使用
char s[1024];
float f1, f2;
int i;
if (sscanf (buff, "%s %f %f %d", s, &f1, &f2, &i) == 4) {
/* Could scan values as expected. */
} else {
/* Input not as expected. */
}
因为sscanf
返回成功扫描的值的数量。有关详细信息,请参阅 sscanf 手册页。请注意,扫描无界字符串%s
在大输入时会出现问题。这可能不是家庭作业的问题,但绝对是生产软件中需要注意的问题。
使用sscanf()
,您可以尝试将字符串的内容解析为某种数据类型,例如整数(使用%d
格式说明符)或浮点数(使用%g
)。
的返回值sscanf()
告诉您它是否成功地将文本解释为所需的数据。
您还可以使用它%n
来了解查看了多少个字符 sscanf()
,这在您想要分多个步骤进行分析时非常方便。
除了您在帖子中提到的使用 scanf() 之外,我不知道您现在是如何获得价值观的。所以假设你正在做这样的事情:
char buf[100];
scanf("%s", buf);
获取浮点/整数值。如果你想用来isdigit()
验证它们都是数字值,你可以这样循环:
int i = 0;
//need to check for a . for floats
//need to check for a - for negative numbers
while(isdigit(buf[i]) || buf[i] == '.' || buf[i] == '-')
i++;
if(i == strlen(buf)) // if we made it to the end of the string
//we have all digits, do all digit code
else
//there are numbers or symbols, ask for the number again, or terminate, or whatever