首页 > 解决方案 > 为什么这个 switch 语句在运行时会结束 while 循环?

问题描述

我希望这个程序从开关中断并返回到 while 循环。为什么它不起作用?

我在while循环中放置了一个switch语句。我认为中断会干扰 while 循环,使其提前中断。我该如何解决这个问题?

#include <stdbool.h>
#include <stdio.h>


 int main(void)
 {
 
 bool ON_status = true;
 char option = '0';

  while (ON_status == true)
  {
      printf("enter option 1, 2, 3, or 4.\n");
      printf("Select an option from the menu above then press the enter key:  ");
      scanf("%1s", &option);

      switch (option)
      {
      case '1':
           printf("option1 was selcted");
           break;

      case '2':
           printf("option2 was selcted");
           break;

      case '3':
           printf("option3 was selcted");
           break;

      case '4':
           printf("option4 was selcted");
           ON_status = false;
           break;

      default:
           break;
      }
  }
 return 0;
}

标签: cwhile-loopswitch-statementboolean

解决方案


您的代码的问题是该行

scanf("%1s", &option);

中的内存溢出option

C 中的字符串以空值结尾。所以 '%1s' 存储一个字符和一个空终止符。但是您的option变量只有一个字符长,那么零(或 NULL、NUL、null 取决于您的命名)到哪里去了?

在这种情况下,因为ON_status和 option 在内存中被声明为 close by,所以它正在覆盖ON_status

要查看正在发生的事情,您可以打印ON_status外部的值,switch您会观察到它是 0。

为了解决这个问题,我想我会scanf

option = getc(stdin);

推荐阅读