如何验证输入是否为数字?

时间:2012-09-11 11:12:25

标签: c input

我有一个分配,用户必须一个接一个地输入四个输入。他们是: character,float,float,int。

主要问题是如何检查错误并确保使用输入的有效输入?

我已经完成了字符部分但是对于浮点数和整数,我如何检查是否只输入了数字并在输入字母或符号时打印错误信息?

可能是isdigit()isaplha(),但不确定如何实现其使用。

注意我已经使用scanf()作为输入,但不确定如何检查输入是否有效?

3 个答案:

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