我有一个分配,用户必须一个接一个地输入四个输入。他们是: character,float,float,int。
主要问题是如何检查错误并确保使用输入的有效输入?
我已经完成了字符部分但是对于浮点数和整数,我如何检查是否只输入了数字并在输入字母或符号时打印错误信息?
可能是isdigit()
或isaplha()
,但不确定如何实现其使用。
注意我已经使用scanf()
作为输入,但不确定如何检查输入是否有效?
答案 0 :(得分:3)
如果要求用户输入字符串,两个浮点数和一个整数,请使用
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
扫描无界字符串时会出现大输入问题。这可能不是家庭作业的问题,但绝对是生产软件需要注意的事项。
答案 1 :(得分:2)
使用sscanf()
,您可以尝试将字符串的内容解析为某种数据类型,如整数(使用%d
格式说明符)或浮点数(使用%g
)。
sscanf()
的返回值告诉您它是否成功将文本解释为所需数据。
您还可以使用%n
了解sscanf()
查看的字符数,这在您想要分多步进行分析时非常方便。
答案 2 :(得分:1)
我不知道你现在如何获得你的价值,除非你正如你在帖子中提到的那样使用scanf()。所以,假设你正在做这样的事情:
char buf[100];
scanf("%s", buf);
获取float / int值。如果您想使用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