c++ - C 使用 Y/N 选项循环开关。选择 N 不会关闭程序

标签 c++ c loops switch-statement case

我才开始编码C。(这里是新手,没有经验,只有基本的html) 由于某种原因,每当我选择选项“N”时,它只会创建一个新行。

在第二次 scanf 中,每当我更改 '%s' 时,结果都会发生变化。 当我使用“%d”时,输入数字后,它不断输入“选择1-4之间的数字”。如果我使用"%c",输入数字后,它会直接跳到循环。帮忙?

#include <stdio.h>
int main()
{
    int n, ok = 0;
    char input;
    while (ok == 0)
    {
          printf("Choose a number between 1-4\n");
          scanf("%d", &n);
          switch (n)
          {
                 case 1:
                      printf("You've chosen number 1");
                      break;
                 case 2:
                      printf("You've chosen number 2");
                      break;
                 case 3:
                      printf("You've chosen number 3");
                      break;
                 case 4:
                      printf("You've chosen number 4");
                      break;
                 default:
                         printf("You have chosen an invalid number");
          }
          printf("\nInput again? (Y/N)\n");
          scanf("%s", &input);
          if (input=='n'||input=='N')
          {ok++;}
          else if (input=='Y'||input=='y')
          {printf("\n");}


    }

 getchar();
 getchar();   
}

最佳答案

改变

scanf("%s", &input);

scanf(" %c", &input);

并去掉最后的getchar()。它会按照你想要的方式工作。 %c 说明符读取 char 字符,但不忽略空白字符。将空格放入 scanf 的格式将处理空格并读取第一个非空格字符。为了更清楚,请参阅手册页关于 %c 格式说明符的说明:

(...) The usual skip of leading white space is suppressed. To skip white space first, use an explicit space in the format.

但是,如果您真的正在学习 C++,请坚持使用 cin/cout,而不是 scanf/printf。

如果您将 printf/scanf 替换为 cin/cout,您的程序将如下所示。如果您以前这样做过,就不会遇到这样的麻烦。

#include <iostream>

using namespace std;

int main()
{
    int n, ok = 0;
    char input;
    while (!ok)
    {
        cout << "Choose a number between 1-4\n";
        cin >> n;

        switch (n)
        {
            case 1:
                cout << "You've chosen number 1";
                break;
            case 2:
                cout << "You've chosen number 2";
                break;
            case 3:
                cout << "You've chosen number 3";
                break;
            case 4:
                cout << "You've chosen number 4";
                break;
            default:
                cout << "You have chosen an invalid number";
        }
        cout << "\nInput again? (Y/N)\n";
        cin >> input;

        if (input=='n' || input=='N')
        {
            ok++;
        }
        else if (input=='Y' || input=='y')
        {
            cout << "\n";
        }
    }

    return 0;
}

关于c++ - C 使用 Y/N 选项循环开关。选择 N 不会关闭程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710062/

相关文章:

c++ - 将 `push_back()` 与多维 vector 一起使用

c++ - 结构初始化错误 : could not convert from ‘<brace-enclosed initializer list>’ to structure

c - 如何创建最小的 libfuzzer cmake 示例?

c++ - 覆盖 find_package 的默认搜索顺序

android - CMake 编译器测试在 Android 中找不到包含目录

c - strtof-返回错误的数字

c++ - 将 char* 转换为 int 并转换回相同的 char 数组

python - "too many values to unpack (expected 2)"数组元素len大于2时

python - 为什么字符串不变成整数?

java - 增强的 for 循环 - JAVA