Как символы хранят значения при сравнении друг с другом в if else? - PullRequest
0 голосов
/ 07 февраля 2019

Я создаю цикл, который в основном имеет (да / нет) ответ да, нет, и я хотел использовать if if внутри цикла do while.При использовании input == Y он, кажется, не принимает его, поэтому мне интересно, что это вообще возможно в C?Или, если я подхожу не так, как надо.

Я попробовал простой ввод, если == Y, но это не сработало, тогда я попытался strcmp, и это тоже не сработало.,Я нахожусь на strcmp части, потому что я думаю, что я мог бы быть близок к ответу с этим, но я не совсем уверен, понимаю ли я, что происходит со значениями символов.

printf("Would you like to print another invoice? Y=yes, N=No\n");
do {
    scanf("%s", &newInvoice);
    if(strcmp(newInvoice, Y)!= 0) {
        main();
    }
    else if(strcmp(newInvoice, N)!= 0) {
        printf("Goodbye!\n");
    }
    else {
        printf("Invalid Entry (it has to be y or n):\n");
    }
} while(strcmp(newInvoice, N)!= 0); 

Когда у меня было только input == Y, он хотел, чтобы я инициализировал Ym и N, так что это не было ответом.Я бы хотел, чтобы цикл повторял вопрос и вводил до тех пор, пока они не скажут «да» или «нет»;если они вводят что-то вроде G или любой другой символ, он должен повторить цикл.

1 Ответ

0 голосов
/ 07 февраля 2019

учтите следующее (немного изменил код абеленки).Ниже приведено подтверждение того, что буквы в нижнем регистре принимаются, но это, вероятно, немного неуклюже, и может быть представлено немного более элегантно.

int main()
{
    char newInvoice, buffer;
    do 
    {
        newInvoice = getchar();
        bufferClean(&buffer); //see underneath the code for the explanation.
        if (newInvoice == 'Y' || newInvoice == 'y') 
        {
            printf("you've chosen YES, continue ......\n");
            break; // breaks the loop and continues with the code.
        }
        else if (newInvoice == 'N' || newInvoice == 'n') 
        {
            printf("you've chosen NO, Goodbye!\n");
            return 1; //main returns 1 and ends the program
        }
        else 
        {
            printf("Invalid Entry (it has to be y or n):\n");
        }
    } while(1);

    printf("exited the loop\n");
    return 0;
}

Кроме того, запросить ввод пользователя немного сложно.Я предлагаю очистить буфер после его использования, так как он передает newline char и может пропустить любое дальнейшее приглашение ввода.Я создал небольшую функцию для этого:

void bufferClean(char *buff)
{
    while ((*buff = getchar()) != '\n' && *buff != EOF);
}

Просто объявите char buffer в main() без значения и передавайте его функции каждый раз, когда вы хотите очистить буфер (яделать каждый раз после запроса на ввод пользователя).Я новичок, и если я делаю какие-либо ошибки, пожалуйста, укажите на них!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...