Нажмите ввод, чтобы продолжить после да / нет в C - PullRequest
0 голосов
/ 12 октября 2011

Здесь новый программист с небольшим опытом работы с Java, пытающимся написать что-то на C. Я хочу задать кому-нибудь вопрос Да / Нет, сделать что-то в зависимости от их ответа, затем попросить их нажать Enter, чтобы продолжить. У меня две проблемы:

1.) Я не могу заставить программу принимать «у», «у» или «да» в качестве ответов. Я могу заставить его принять один, но не все три. Оператор «логическое ИЛИ» || не работает 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;
}

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Предполагая, что вы работаете в среде * nix, вы можете создать буфер для хранения входящих символов один за другим.У вас есть два случая:

1. Single character input
2. 3 character String

Для всех остальных случаев вы можете вслепую сказать, что ввод не ОК !Для случая 1 я должен быть 1, а character должен быть 'y' или 'Y'Для случая 2 я должен быть 3, а string - «Да».Любой другой случай неверен.Вот код:

#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 голос
/ 12 октября 2011

Прежде всего вы можете сохранить результат первого getchar(), чтобы проверить каждое возможное значение например,

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

Причина, по которой часть "enter" пропускается для второго теста, заключается в том, что когда вы набираете 'y' или 'n', вы нажимаете ввод после, чтобы отправить свой ввод - \n все еще находится в буфере, и он извлекается следующий звонок на getchar()

...