Определение правильного цикла для использования

Я пытаюсь научить себя C. Для забавы и для собственного развития я создал код, который запрашивает у пользователя буквенную оценку, а затем выводит диапазон этой буквенной оценки. Вот что у меня так далеко:

//Ted C. Lim

#include "stdio.h"


int main()
{
char grade;

    printf("Enter a single character grade: ");
    scanf("%c", &grade);
    printf("You entered %c as the grade.  ", grade);

    switch(grade)
    {
        case 'A':
            printf("The grade range for A and A- is 100%% - 90%%.");
            break;
        case 'B':
            printf("The grade range for B and B- is 80%% - 89%%.");
            break;
        case 'C':
            printf("The grade range for C and C- is 70%% - 79%%.");
            break;
        case 'D':
            printf("The grade range for D and D- is 60%% - 69%%.");
        case 'F':
            printf("The grade range for F is 0%% - 59%%.");
        default:
            printf("That grade does not exist.");
            break;
    }


}

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

4 ответа

Здесь вы можете выбрать пару различных опций, и цикл while, и цикл do будут работать. Лично я бы сказал, что цикл do while лучше подходит для этого случая, в основном потому, что вы точно знаете, что хотите, чтобы программа запрашивала пользователя хотя бы один раз. Чтобы использовать его, вам нужно поместить do перед операторами printf, а затем выполнить, пока в конце вводится некоторая строка scanf!= "Q"

Включите ваш регистр переключателя в цикл while, который имеет значение true, и он будет работать бесконечно. Вы также можете использовать scanf, чтобы проверить, какой конкретный ключ нужно ввести, чтобы остановить его.

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

char grade;

while (1)
{
    printf("Enter a single character grade (or 'X' to exit): ");
    scanf(" %c", &grade);
    printf("You entered %c as the grade.  ", grade);

    if (grade == 'X') // Or another letter, make it clear what you're using
    {
        break;
    }

    // Output code here...
}

Я также рекомендовал бы вам проверять как строчные, так и прописные буквы. в switch заявление:

case 'A':
case 'a':
    printf("The grade range for A and A- is 100%% - 90%%.");
    break;

в if заявление:

if (grade == 'X' || grade == 'x')
{
    break;
}

Чтобы повторить действие бесконечно, вы можете обернуть его внутри while цикл с условием, которое всегда верно (например, while (1) { ... }) следующее:

#include <stdio.h>
#include <ctype.h>

int main()
{
    char grade;

    while (1)
    {
        printf("Enter a single character grade (or Q to quit):\n");
        scanf(" %c", &grade);
        grade = toupper(grade);
        if (grade == 'Q') break;

        printf("You entered %c as the grade.\n", grade);

        switch(grade)
        {
            case 'A':
                printf("The grade range for A and A- is 100%% - 90%%.\n");
                break;
            case 'B':
                printf("The grade range for B and B- is 80%% - 89%%.\n");
                break;
            case 'C':
                printf("The grade range for C and C- is 70%% - 79%%.\n");
                break;
            case 'D':
                printf("The grade range for D and D- is 60%% - 69%%.\n");
                break;
            case 'F':
                printf("The grade range for F is 0%% - 59%%.\n");
                break;
            default:
                printf("That grade does not exist.\n");
                break;
        }
    }
    return 0;
}

Вы заметите, что я сделал несколько других модификаций, которые я рассмотрю здесь:

  1. include "stdio.h" должно быть #include <stdio.h>, Угловые скобки указывают компилятору искать в стандартном каталоге файлы заголовков системы.

  2. Я также добавил #include <ctype.h> потому что я использую toupper() функция для преобразования входного символа в верхний регистр. Это облегчает использование вашего кода, потому что теперь он будет принимать как прописные, так и строчные буквы.

  3. scanf() строка формата содержит пробел перед %c, Это пропустит любые пробелы, включая символы новой строки. Без этого программа будет обрабатывать эти символы как фактические входные данные и сообщать вам, что \n Оценка не существует.

  4. break оператор может быть использован для выхода из цикла, когда пользователь вводит Q. Также было несколько breakотсутствует в вашем switch блок.

  5. main() функция объявлена ​​как int main() { ... }, поэтому он должен возвращать целочисленное значение. Если ошибок не было, это значение должно быть равно нулю.

Другие вопросы по тегам