1

我有一个任务,用户必须一个接一个地输入四个输入。它们是:字符、浮点数、浮点数、整数。

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

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

可能想isdigit()isaplha()但不确定如何实现它们的使用。

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

4

3 回答 3

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在大输入时会出现问题。这可能不是家庭作业的问题,但绝对是生产软件中需要注意的问题。

于 2012-09-11T11:27:42.133 回答
2

使用sscanf(),您可以尝试将字符串的内容解析为某种数据类型,例如整数(使用%d格式说明符)或浮点数(使用%g)。

的返回值sscanf()告诉您它是否成功地将文本解释为所需的数据。

您还可以使用它%n来了解查看了多少个字符 sscanf(),这在您想要分多个步骤进行分析时非常方便。

于 2012-09-11T11:18:36.497 回答
1

除了您在帖子中提到的使用 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
于 2012-09-11T12:35:15.310 回答