【问题标题】:Press enter to continue after yes/no in C在 C 中是/否之后按 enter 继续
【发布时间】:2011-10-12 02:39:15
【问题描述】:

这里的新程序员只有一些 Java 经验,尝试用 C 编写一些东西。我想问某人一个是/否问题,根据他们的回答做一些事情,然后让他们按 Enter 键继续。我有两个问题:

1.) 我无法让程序接受“y”、“Y”或“是”作为答案。我可以让它接受一个,但不是全部三个。 “逻辑或”运算符 ||不工作。 2.) 如果没有以下两个“刷新”命令,我无法让它在“按 Enter 继续”处停止:

while (getchar() != '\n');

我拥有并尝试使用的代码如下:

int main (int argc, const char * argv[]) {
    printf("Would you like to continue? Please press y or n.\n");

    if(getchar() == 'y'){
        printf("You pressed yes! Continuing...");
    }
    else{
        printf("Pressed no instead of yes.");
    }
        //flush commands go here
    printf("\nPress ENTER to continue...");
    if(getchar()=='\n'){
        printf("\nGood work!");
    }else{
        printf("Didn't hit ENTER...");

    return 0;
}

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 您使用的是哪个操作系统?

标签: c input enter


【解决方案1】:

假设您在 *nix 环境中工作, 您可以创建一个缓冲区来一个接一个地存储传入的字符。 你有两种情况:

1. Single character input
2. 3 character String

对于所有其他情况,您可以盲目地说输入不正常
对于案例 1,我应该是 1character 应该是 'y' 或 'Y'
对于案例 2,我应该是 3string 应该是“是”
任何其他情况都是不正确的。这是代码:

#include<stdio.h>
int main()
{
char ch[3];
char c;
int i=0;
while(((c=getchar())!='\n')){
        ch[i]=c;
        i++;
}
ch[i]='\0';
if (i==1)
        if (ch[0]=='Y'||ch[0]=='y')
                printf("OK");
        else
                printf("Not OK");
else if(i==3)
        if (strcmp(ch,"Yes")==0)
                printf("OK");
        else
                printf("Not OK");
else
        printf("NOT OK");
return 0;
}

我会推荐使用这样的东西。

【讨论】:

    【解决方案2】:

    首先,您可能希望保存第一个 getchar() 的结果以测试每个可能的值 例如

    int c=getchar();
    if(c=='y' || c=='Y')
    ....
    

    “enter”部分跳过第二个测试的原因是,当您键入“y”或“n”时,您在发送输入后按 enter - \n 仍在缓冲区中,它被下次致电getchar()

    【讨论】:

    • 检查 EOF 是个好主意(因为您正确使用了 int,所以您可以这样做)。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2010-10-28
    • 2018-03-07
    • 1970-01-01
    • 2021-01-06
    • 2014-10-20
    • 2023-03-22
    相关资源
    最近更新 更多