0

这里的新程序员只有一些 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;
}

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

4

2 回答 2

1

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

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

“进入”部分跳过第二次测试的原因是,当您键入“y”或“n”时,您在发送输入后按回车键 -\n它仍在缓冲区中,并被下一次调用拉到getchar()

于 2011-10-12T02:46:25.493 回答
1

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

1. Single character input
2. 3 character String

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

#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;
}

我建议使用这样的东西。

于 2011-10-12T03:59:28.373 回答