繁体   English   中英

C Program While Loop问题

[英]C Program While Loop problem

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

它要求用户输入,例如建议他们想知道面积和/或表面的形状。 这个元素,我已经掌握了。

问题是,当我尝试添加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;
}

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

更新

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

作为@Cqnqrd指出,scanf函数可能会导致一些无限循环的问题,如果你输入非整数值,其中的原因是详细的在这里 您可以使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM