我必须制作一个程序,其输入必须是2个值之一,'M'或'F'。
以下是我为了演示而创建的程序段
do
{
printf("What is your Gender? (M for Male - F for Female) ");
fgets(GenderValue, 16, stdin);
if (GenderValue[0] == '\n')
{
printf("Try again");
getch();
system("cls");
loop=1;
}
else
{
loop = -1;
}
if (GenderValue == "M");
{
loop =-1;
}
else if(GenderValue == "F");
{
loop=-1;
}
else
{
printf("Try again");
getch();
system("cls");
loop=1;
}
}
while(loop > 0); //Checks for NULL input
printf("Gender: %s",GenderValue);
我知道我可以做一个整数选择输入,但如果可能的话我想稍后回收它。
到目前为止程序调用我的性别值比较“错误”,这很好,除了我不知道下一步该做什么,我可以找到一个比较字符串的函数,但我真的不想让我的复杂化代码。
编辑:重复?,真的吗?,给出的例子甚至没有接近帮助我。
编辑2:发现问题,我有;在我的if语句旁边,现在已修复。但说真的,没有人发现这个?
答案 0 :(得分:6)
您使用strcmp
来比较字符串。使用比较运算符==
只需比较指针。
但请注意fgets
会在字符串中留下结尾换行符,因此您需要将其与例如"M\n"
,或者删除换行符。
另请注意,scrcmp
区分大小写,字符串"M"
不等于字符串"m"
。
您可以使用例如scanf
将输入作为单个字符读取,并使用例如tolower
(或toupper
)获得不区分大小写的比较。
但是,使用scanf
会带来其他问题,特别是如果您之后再次使用它来阅读另一个单个字符。原因是Scanf
将换行符留在输入缓冲区中,导致可能的scanf
格式的"%c"
调用读取该换行符。有非常的简单解决方案:告诉scanf
使用" %c"
读取和弃用前导空格。
答案 1 :(得分:1)
如果GenderValue
是字符串,则GenderValue == "M"
错误。字符串不应与==
一起使用。使用strcmp()
。
[在这种情况下,IMO是合适的]如果GenderValue
是单个字符,则应该以{{1}}
对于您的情况,[考虑一个字符输入]您可以执行类似
的操作GenderValue == 'M'
在上面的代码中,有三个优点
fgets(GenderValue, 16, stdin);
switch(GenderValue[0])
{
case '\n':
//your code
break;
case 'M':
case 'm':
//your code
break;
case 'F':
case 'f':
//your code
break;
default:
}
而烦恼
\n
答案 2 :(得分:1)
将(GenderValue == "M")
替换为(strcmp(GenderValue, "M") == 0 )
和
将(GenderValue == "F")
替换为(strcmp(GenderValue, "F") == 0 )
答案 3 :(得分:0)
尝试将GenderValue == "F"
替换为!strcmp(GenderValue, "F\n")
,将GenderValue == "M"
替换为!strcmp(GenderValue, "M\n")
您可能还需要加入"string.h"
答案 4 :(得分:0)
每当需要比较字符串时,请使用字符串比较函数(strcmp(“”))。