我才开始编码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/