C程序的While循环问题

C程序的While循环问题,c,loops,C,Loops,我有一个程序要写,它给我带来了麻烦 它要求用户输入信息,例如建议他们希望知道区域和/或曲面的形状。这个元素,我已经掌握了 问题是,当我尝试添加while循环来表示响应无效时,它会把整个程序搞砸 我需要它说,“无效响应,请选择选项1、2、3或4等 我将循环编写如下: printf("Please enter 1 for area or 2 for surface area: "); scanf("%i",&menu1); while(menu1!=1&&menu1!=2)

我有一个程序要写,它给我带来了麻烦

它要求用户输入信息,例如建议他们希望知道区域和/或曲面的形状。这个元素,我已经掌握了

问题是,当我尝试添加while循环来表示响应无效时,它会把整个程序搞砸

我需要它说,“无效响应,请选择选项1、2、3或4等

我将循环编写如下:

printf("Please enter 1 for area or 2 for surface area: ");
scanf("%i",&menu1);
while(menu1!=1&&menu1!=2) {
  printf("Invalid option. Please enter 1 for area or 2 for surface area: "); 
  scanf("%i",&menu1);
}

现在的问题是,当用户做出有效响应时,会出现“无效响应”。如何解决此问题?

以下内容适用于我:

#include <stdio.h>

int main(void) {
  int menu1; // Make sure this is declared 

  printf("Please enter 1 for area or 2 for surface area: ");
  scanf("%i", &menu1);

  while((menu1 != 1) && (menu1 != 2)) {
    printf("Invalid option. Please enter 1 for area or 2 for surface area: ");
    scanf("%i", &menu1);
  }

  return 0;
}

您发布的代码片段甚至不会编译,请发布一个真正编译并运行的代码片段printf(“请为面积输入1或为表面积输入2:”;scanf(“%i”),&menu1);而(menu1!=1&&menu1!=2){printf(“无效选项。请为面积输入1或为表面积输入2:”;scanf(“%i”,&menu1);}抱歉。这是从程序中复制的代码。我想你的键盘可能有问题。”“-这是一个空格字符,你可以将它复制粘贴到你的代码中。请始终从
scanf()
测试返回值;否则,你将不知道它何时告诉你它无法解释输入。
if(scanf(“%I”,&menu1)!=1){…错误;无法读取整数…}
。例如,如果用户键入一个字母,您的代码将永远卡在循环中,
scanf()
报告“我无法转换任何内容”,而您告诉它“再试一次”“。do-while循环在这里会更有用吗?@John可能。我试图让它尽可能与问题的主体相似,同时仍让它进行编译。当输入无效选项时(如'aa'),我的控制台被垃圾发送了
printf
语句。@Cqnqrd不是C编程,我猜这是
scanf
被赋予非整数值的错误?是的,请参阅
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int menu1 = 0;
  char input[256];

  do {
    printf("Please enter 1 for area or 2 for surface area: ");
    fgets(input, 256, stdin);
    menu1 = atoi(input);

    if ((menu1 != 1) && (menu1 != 2)) printf("Invalid entry. ");
  } while ((menu1 != 1) && (menu1 != 2));

  return 0;
}