c - 在 C 中使用 for 循环循环开关
问题描述
我无法让我的 for 循环开关工作。如果用户键入除“y”、“Y”、“n”、“N”以外的字母,我希望程序重复该问题。有人可以帮我解决吗?
#include <stdio.h>
int main(void) {
int flag = 0;
char mstatus;
printf("Are you married?\n");
scanf(" %c", &mstatus);
for (; flag == 1;) {
printf("Are you married?\n");
scanf(" %c", &mstatus);
switch (mstatus) {
case 'y':
case 'Y':
printf("You have answer yes for married");
flag = 1;
break;
case 'n':
case 'N':
printf("You have answer no for married");
flag = 1;
break;
default:
printf("please re-enter a valid answer");
scanf(" %c", &mstatus);
}
}
return 0;
}
解决方案
你的代码有几个问题
第一对
printf("Are you married?\n"); scanf(" %c", &mstatus);
因为您不使用已读答案,所以一无所获,请删除这些行
在
for (; flag == 1;) {
您立即退出循环,因为您将flag初始化为 0,这与您更改flag值的方式不一致,将其与 0 而不是 1 进行比较
在
default: printf("please re-enter a valid answer"); scanf(" %c", &mstatus);
必须删除scanf,因为您不使用阅读答案
除此之外,因为您想至少执行一次循环以询问答案并对其进行管理,所以使用do ...while更具可读性
打印时还要添加最后一个换行符
例子 :
#include <stdio.h>
int main(void) {
int flag = 0;
do {
char mstatus;
printf("Are you married?\n");
scanf(" %c", &mstatus);
switch (mstatus) {
case 'y':
case 'Y':
printf("You have answer yes for married\n");
flag = 1;
break;
case 'n':
case 'N':
printf("You have answer no for married\n");
flag = 1;
break;
default:
printf("please re-enter a valid answer\n");
}
} while (flag == 0);
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -Wall d.c
pi@raspberrypi:/tmp $ ./a.out
Are you married?
a
please re-enter a valid answer
Are you married?
y
You have answer yes for married
pi@raspberrypi:/tmp $ ./a.out
Are you married?
d
please re-enter a valid answer
Are you married?
N
You have answer no for married
pi@raspberrypi:/tmp $
当然,在您的情况下,循环之后没有任何内容,因此您还可以简化所有删除标志及其管理并将两个第一个break替换为return 0,当然在这种情况下,循环可以是for(;;)或while (1)等
可能请输入有效答案比请重新输入有效答案更好,因为根据定义,用户从不输入有效答案,因此他无法重新输入
推荐阅读
- sql-server - Oracle 18 XE HS MSSQL LINUX 连接问题
- iis - applicationHost.config 中的 configSource 有什么替代方法吗?
- microservices - 微服务之间的依赖问题
- python - Python 3 BS4 - 从标签中提取数据(续)
- ruby-on-rails - 重用 ActiveAdmin 组件
- rest - 使用 TemplateHTMLRenderer 时模板上下文来自哪里
- powerbuilder - 窗口的 control[] 数组中的项目顺序
- c# - unity 平滑 2D 水平变换
- python - 如何在查询集中创建具有过滤值的另一列
- php - 在 WordPress 中显示来自 SQL 数据库的数据