2011-10-12 136 views
0

新程序员在这里只有一些小的Java经验试图用我的手写一些东西C.我想问某人是/否问题,根据他们的答案做一些事情,然后要求他们按Enter继续。我有两个问题:按回车后继续在C中的是/否后继续

1.)我无法让程序接受“y”,“Y”或“是”作为答案。我可以让它接受一个,但不是全部三个。 “逻辑或”操作符||不工作。 2)我不能让它停止在“按回车键继续”没有的两个“同花顺”的命令:

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

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

+0

您正在使用哪种操作系统? –

回答

1

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

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

我会建议使用这样的事情。

1

首先,你可能想保存第一getchar()的结果来测试每个可能值 如

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

究其原因,第二次测试的“输入”部分跳过是因为当你键入“Y '或‘N’按Enter键后,发送你的输入 - 在\n仍然在缓冲区中,它通过在下次调用拉到getchar()

+0

这将是一个好主意,检查EOF(你可以正确使用'int')。 –