C Программирование да нет цикла с перехватчиком - PullRequest
0 голосов
/ 26 августа 2018

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

Так что, если пользователь вводит y или Y, он устанавливает, и если он вводит n или N, он выходит из программы. Кроме того, если они набирают w, m или любую другую букву, отличную от y или n, он возвращается к началу и запрашивает их снова.

Не уверен, что это цикл while или do while. Я пытался часами и до сих пор не могу заставить его работать. Программа ниже работает, но не имеет петель.

Любая помощь будет принята с благодарностью.

#include <stdio.h>

int main() {

    char yn;

    printf("Do you want to install this programme? y/n: ");
    scanf("%c", &yn);

    if(yn == 'y' ||  yn == 'Y') {
        printf("Installing...\n");
    }
    else if(yn == 'n' || yn == 'N') {
        printf("Exiting programme!\n");
    }
    else {
        // Go back to the start/top of the programme!
    }
    return 0;
}

Решено!

Это код, который работает. Спасибо @ govindparmar.

#include <stdio.h>

int main() {

    char yn;

    do {
    printf("Do you want to install this programme? y/n: ");
    scanf(" %c", &yn);
    }
    while(yn != 'n' && yn != 'N' && yn != 'y' && yn != 'Y');

    if(yn == 'n' ||  yn == 'N') {
    printf("Exiting programe!\n");
    }
    else {
    printf("Installing...\n");
    }

    printf("It works!\n");

    return 0;
}

Ответы [ 4 ]

0 голосов
/ 26 августа 2018

Решено!

Это код, который работает.Спасибо @ govindparmar.

#include <stdio.h>

int main() {

    char yn;

    do {
    printf("Do you want to install this programme? y/n: ");
    scanf(" %c", &yn);
    }
    while(yn != 'n' && yn != 'N' && yn != 'y' && yn != 'Y');

    if(yn == 'n' ||  yn == 'N') {
    printf("Exiting programe!\n");
    }
    else {
    printf("Installing...\n");
    }

    printf("It works!\n");

    return 0;
}
0 голосов
/ 26 августа 2018

В этом сценарии наиболее целесообразным является цикл do / while, поскольку получение ответа от пользователя - это то, что должно произойти хотя бы один раз и проверяться до получения желаемого ответа отПользователь.

Кроме того, использование tolower или toupper на yn при проверке на равенство может устранить необходимость проверки как в верхнем, так и в нижнем регистре.

do
{
     printf("Do you want to install this program? y/n: ");
     scanf(" %c", &yn);
}
while(tolower(yn) != 'n' && tolower(yn) != 'y');

if(tolower(yn) == 'n')
{
     printf("Exiting program\n");
}
else
{
     printf("Installing ...\n");
}
0 голосов
/ 26 августа 2018

fgets может использоваться для захвата ввода. Преимущество заключается в возможности очистки входного потока в случае слишком большого количества символов или неправильных символов.

#include <stdio.h>
#include <string.h>

int main ( void) {
    char input[3] = "";//can hold one char a newline and a '\0'

    printf("Do you want to install this programme? y/n: ");

    do {
        printf ( "\nenter y or n\n:");
        if ( fgets ( input, sizeof input, stdin)) {
            if ( !strchr ( input, '\n')) {//is there a newline?
                while ( !strchr ( input, '\n')) {//call until newline is found to clear input
                    if ( !fgets ( input, sizeof input, stdin)) {
                        fprintf ( stderr, "\nEOF problem\n");
                        return 1;
                    }
                }
                input[0] = 0;
                printf ( "\ntoo many characters. try again.");
            }
        }
        else {
            fprintf ( stderr, "\nEOF problem\n");
            return 1;
        }
        if ( input[0] == 'y' || input[0] == 'Y') {
            printf("Installing...\n");
        }
        if ( input[0] == 'n' || input[0] == 'N') {
            printf("Exiting programme!\n");
        }
    } while ( input[0] != 'y' && input[0] != 'n' && input[0] != 'Y' && input[0] != 'N');

    return 0;
}
0 голосов
/ 26 августа 2018

Вы можете заключить код в цикл while.

Что-то вроде:

while(1)
{
    printf("Do you want to install this programme? y/n: ");
    scanf("%c", &yn);

    if(yn == 'y' ||  yn == 'Y') {
        printf("Installing...\n");
        break;  // Stop the while-loop to end the program
    }
    else if(yn == 'n' || yn == 'N') {
        printf("Exiting programme!\n");
        break;  // Stop the while-loop to end the program
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...