C Program While Loop问题

时间:2014-02-20 14:02:37

标签: 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) {
  printf("Invalid option. Please enter 1 for area or 2 for surface area: "); 
  scanf("%i",&menu1);
}

问题是,当用户做出有效回复时,会出现“无效响应”。如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

以下适用于我:

#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;
}

您没有发布完整的代码,但我假设您在menu1中使用之前未声明scanf。这肯定会引起问题。

更新

正如@John在评论中指出的那样,您可以通过使用do-while来确保循环始终至少运行一次来​​消除一些冗余。

正如@Cqnqrd所说,如果输入非整数值,scanf会导致一些无限循环问题,其原因详见here。您可以使用fgets和atoi来处理非整数输入,而不是像scanf那样(防止在'aa'之类的输入上出现无限循环)。

#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;
}