Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定要使用的正确循环_C_Loops_Exit - Fatal编程技术网

C 确定要使用的正确循环

C 确定要使用的正确循环,c,loops,exit,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. ", g

我试着自学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”的内容退出。我知道我应该在这里使用某种循环,但我不太确定如何应用它。

这里有几个不同的选项,while和do-while循环都可以使用。就个人而言,我会说do-while循环更适合这种情况,主要是因为您确信希望程序至少提示用户一次。为了使用它,您需要将do放在printf语句之前,然后在末尾的一些scanf输入为!=“Q”

您可以使用
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...
}
我还建议您检查小写和大写字母。在
开关
语句中:

case 'A':
case 'a':
    printf("The grade range for A and A- is 100%% - 90%%.");
    break;
if (grade == 'X' || grade == 'x')
{
    break;
}
if
语句中:

case 'A':
case 'a':
    printf("The grade range for A and A- is 100%% - 90%%.");
    break;
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;
}
#包括
#包括
int main()
{
煤焦品位;
而(1)
{
printf(“输入单个字符的等级(或Q以退出):\n”);
scanf(“%c”级和等级);
等级=toupper(等级);
如果(等级=‘Q’)中断;
printf(“您输入了%c作为等级。\n”,等级);
道岔(坡度)
{
案例“A”:
printf(“A和A-的等级范围为100%-90%。\n”);
打破
案例“B”:
printf(“B和B的等级范围为80%-89%。\n”);
打破
案例“C”:
printf(“C和C的等级范围为70%-79%。\n”);
打破
案例“D”:
printf(“D和D-的等级范围为60%-69%。\n”);
打破
案例“F”:
printf(“F的等级范围为0%-59%。\n”);
打破
违约:
printf(“该等级不存在。\n”);
打破
}
}
返回0;
}
您会注意到,我还做了一些其他修改,我将在这里介绍:

  • include“stdio.h”
    应该是
    #include
    。尖括号告诉编译器在标准目录中查找系统头文件

  • 我还添加了
    #include
    ,因为我正在使用
    toupper()
    函数将输入字符转换为大写。这使您的代码更易于使用,因为它现在将同时接受大写和小写字母

  • scanf()
    格式字符串在
    %c
    前面包含一个空格。这将跳过任何空白字符,包括换行符。如果没有它,程序会将这些字符视为实际输入,并告诉您
    \n
    等级不存在

  • break
    语句可用于在用户输入Q时退出循环。您的
    开关
    块中还缺少两个
    break
    s

  • main()
    函数被声明为
    int main(){…}
    ,因此它应该返回一个整数值。如果未发生错误,则此值应为零


  • 将您的交换机外壳封装在一个while循环中,该循环为true,它将无限期运行。您还可以使用scanf检查要输入的特定密钥,以停止它