gpt4 book ai didi

c - 如何在 C 中正确获取 y/n 输入

转载 作者:行者123 更新时间:2023-11-30 14:51:14 27 4
gpt4 key购买 nike

所以,我是一个 C 语言和编程新手,我正在尝试编写一个函数来抽象使用大量 y/n 选择的程序,到目前为止我已经这样了:

void chooser (char *choice)
{
while (1)
{
*choice='\0';
*choice=getchar();
while(getchar()!='\n');

if(*choice == 'y' || *choice == 'n')
break;
}
}

第二个 getchar 在标准输入中消耗过多的输入,因此它不会受到用户输入乱码的影响。

唯一的问题是,如果我输入“ywhatever”或“nwhatever”,第一个 getchar 仍然捕获“y”和“n”并将其传递给 main。我希望用户必须输入“y”或“n”而不输入其他内容。我可以尝试放弃 getchar 并切换到 fgets 进行捕获,使用 sscanf 进行解析,这就是我更喜欢获取字符串的方式,但是,不知道,它只是一个字符,我不想让事情变得过于复杂。

有没有一种方法可以在用户输入后扫描标准输入以查看它是否包含多个字母字符?

编辑:最后,我选择了这个:

int chooser ()
{
char buffer[MAXIN];

while (1)
{
printf("y/n: ");
if (fgets(buffer, sizeof(buffer), stdin)!=NULL)
{
if (buffer[0] == 'y' || buffer[0] == 'n')
{
if (buffer[1]=='\n')
{
break;
}
else
{
while(getchar()!='\n');
}
}
}
}

if (buffer[0]=='y')
{
return 1;
}
if (buffer[0]=='n')
{
return 0;
}
}

它似乎正在做我需要它做的事情,还有什么我应该调整的吗?来自标准输入的 fgets 是否需要 if(fgets(...)!=NULL) 检查?

最佳答案

这个解决方案有什么问题:

#include <stdio.h>

void chooser(char *choice)
{
char buffer[200];
while (1)
{
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] == 'y' || buffer[0] == 'n')
break;
}
*choice = buffer[0];
}

int main(int argc, char **argv)
{
while (1)
{
char yn;
chooser(&yn);
if (yn == 'y' || yn == 'n')
printf("User choice: %c\n", yn);
}
}

这并不完全“过于复杂”

还有改进的空间,例如这里根本没有处理 EOF 条件。

执行示例:

abc
def
y
User choice: y
n
User choice: n
yes
User choice: y
no
User choice: n
noooo
User choice: n

关于c - 如何在 C 中正确获取 y/n 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com