确定要使用的正确循环

时间:2017-05-17 03:08:45

标签: c loops exit

我正在尝试自学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 个答案:

答案 0 :(得分:0)

你可以在这里选择几个不同的选项,while和do while循环都可以。就个人而言,我会说while while循环更适合这种情况,主要是因为你肯定知道你希望程序至少提示用户一次。为了使用它,你需要在printf语句之前放置do,然后在最后输入一些scanf时运行!=“Q”

答案 1 :(得分:0)

您可以使用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;
}

答案 2 :(得分:0)

要无限期地重复某个操作,您可以将其包含在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. 当用户输入Q时,break语句可用于退出循环。break块中还有一些switch个缺失。

  5. main()函数声明为int main() { ... },因此它应返回一个整数值。如果没有发生错误,则此值应为零。

答案 3 :(得分:0)

将你的开关盒放入一个真正的while循环中,它将无限期地运行。您还可以使用scanf检查要输入的特定键以停止它。