验证输入并再次询问是否无效

雷朋

在这段代码中,我有几个用于用户输入的查询。如果有一个像'r'而不是4这样的无效输入,我希望我的程序说“无效输入”,并要求其他用户输入。我做了很多尝试,但无法正常工作。我在代码中注释了有问题的位置。感谢帮助。

#include <stdio.h>

int main()
{ 
double Operand1;
double Operand2;
int Menuchoice; 
int Input;
char Dummy;
double Result;

do
{

  printf("Simple Calculator\n");
  printf("========================\n");
  printf("\n");
  printf("1. Addition\n");
  printf("2. Subraction\n");
  printf("3. Multiplication\n");
  printf("4. Division\n");
  printf("9. Quit\n");


  Input = scanf("%i", &Menuchoice);  // At this point I want to check if there is a valid input and 
  do scanf("%c", &Dummy);            //  if not the programm should ask again
  while (Dummy != '\n');

  if(Input)
  {
     switch(Menuchoice)
     {
        case 1: printf("Type in the first operand:\n");
                scanf("%lf", &Operand1)                     // Here I want to validate the input         
                printf("Type in the second operand:\n");    // again and the programm should also ask 
                scanf("%lf", &Operand2)                     // again if it was invalid
                printf("%lf + %lf = %lf\n", Operand1, Operand2, Result);
                break;
        case 2: 
        case 3: 
        case 4: 
        default: printf("No valid input!\n");
                break;
     }
  }

}while (Menuchoice != 9);

 return 0;
}
Amessihel

的手册页scanf

成功时,这些函数返回成功匹配和分配的输入数量如果较早匹配失败,则该数目可能小于所提供的数目,甚至为零。

因此,这里有一个示例可以帮助您解决问题:

#include <stdio.h>

int main (int argc, char* argv)
{
  double o;
  int res;

  // To illustrate, I chose to set up an infinite loop.
  // If the input is correct, we'll "break" it
  while(1)
    {
      printf("Enter a double: ");
      res = scanf("%lf",&o);

      // Success = 1 read input
      if (res == 1)
      {
        printf("Yahoo, got it right: %f\n",o);
        break; // We exit the loop
      }

      // Ah, we failed
      printf("Please retry.\n");
      // popping the CR character to avoid it to be got by the next scanf()
      getchar();

      // Here we go for another loop.
    }

    // Good, we got our double.
    printf("Hey, sounds like we got outside this infinite loop.\n");
}

例:

user@so:~$ ./a.out 
Enter a double: r
Please retry.
Enter a double: f
Please retry.
Enter a double: 6.543
Yahoo, got it right: 6.543000

请记住,此检查并不完美。例如,"frg6sgg"将成功和显示为6.0000000通过printf()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何清除输入并再次询问密码?

Bash是否再次询问

Java 检查变量是否为 AG。如果没有,显示错误信息并再次询问

扫描输入并再次启动循环或关闭它

istringstream 将字符串放回输入并再次读取

如果输入不是bigDecimal,如何抛出异常并再次扫描?

如何使用try-catch验证用户的输入,并在输入无效时再次读入他们的输入?

如果用户输入无效,如何再次提示?

询问用户是否想在 C 中再次运行程序

如果删除当前目录并再次 mkdir 它,则当前目录无效

在隐藏并再次显示后,如何防止使用renderUI进行的输入重置?

连接到 microsoft.Exchange Office365 的脚本在中途超时并再次提示输入凭据

输入类型=“文件”:验证无效

如何再次询问权限?

mkstemp()-关闭描述符并再次将其重新打开是否安全?

是否可以锁定NFC标签,然后再解锁并再次写入数据?

是否可以将程序的内存转储到文件中并再次还原?

是否保持Mysql连接处于活动状态或关闭它并再次打开?

暂停并再次运行后,ARKit 锚点是否仍然存在?

输入验证是否必要?

验证-如果输入错误,再次提示用户输入

验证10位手机号码和焦点输入字段是否无效

验证来自hint()的响应。无效提示时再次提示

代号一个应用上的应用权限:警报,询问,授予和拒绝代码,再次询问是否被拒绝

我单击输入广播并再次单击以更改图像src ...如何将图像变回原来的状态?

如何询问Gradle特定输入是否不是最新的

perl-尝试使用while循环询问用户是否要再次执行该操作

使用--depth 1,创建提交并再次拉取更新进行浅克隆是否安全?

如果下载出现异常,是否可以通过这种逻辑来重置列表并再次调用Init()?