【发布时间】:2019-04-23 23:04:18
【问题描述】:
我正在尝试让 C 程序的用户输入 M 代表男性和 F 代表女性 如果不满足 M 或 F 则循环。 下面我尝试了以下代码,但它循环两次给出正确答案。 例如,在输入 M 后,它会循环并打印
FALSE 性别 .. 请输入 M 代表男性,M 代表 女性
有什么办法可以解决吗?
目标是,如果用户输入 M 或 F,则无需再次输入即可工作。
如果还有其他问题,它可能会询问多次
#include "Gender.h"
#include<stdio.h>
char sex;
void Gender(){
printf("\nEnter Student Gender ('example M for Male F for Female):\n");
scanf(" %s",&sex);
while (sex != "M" || sex != "M"){
printf ("\n FALSE gender .. please enter M for Male and M for Female:\n");
scanf(" %s",&sex);
printf("\nStudent Sex :%c", sex,"\n");
return;
}
}
【问题讨论】:
-
while语句中的表达式检查了两次"M"。此外,要比较 C 中的字符串,请使用strcmp函数。 -
并使用
&&而不是||。 -
"%s"消耗前导空格,因此不需要" %s"中的空格 - 但是,您不检查返回(忽略手动EOF)并且您无法删除任何无关的第一个字符之外的字符(例如,在读取sex、int c = getchar(); while (c != '\n' && c != EOF) c = getchar();之后)这超出了您在char sex和"%s"之间的类型不匹配,期望一个指向 char 的指针具有足够的存储空间来保存字符串(包括 nul -终止字符) -
M 代表男性,M 代表女性(在循环内)?我认为女士们有权感到恼火。循环内的
return表示人们可以重试一次,但未经测试。您还丢弃了用户输入的结果——这不是很好。您当然应该返回所选的性别吗?可能值得增加重试次数并阻止人们进入循环。例如,在 10 次尝试失败后停止。 -
我可以否决分配此内容的讲师吗?
标签: c