我正在尝试自学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...
}
我还建议您检查小写和大写字母。在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 (1) { ... }
)将其包装在一个while
循环中,如下所示:
#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;
}
您会注意到我进行了一些其他修改,我将在此处进行:
include "stdio.h"
真的应该#include <stdio.h>
.尖括号告诉编译器在标准目录中查找系统头文件。我还添加了
#include <ctype.h>
因为我正在使用toupper()
函数将输入字符转换为大写。这使您的代码更易于使用,因为它现在将同时接受大写和小写字母。scanf()
格式字符串在%c
之前包含一个空格。这将跳过任何空格字符,包括换行符。没有它,程序会将这些字符视为实际输入,并告诉您n
等级不存在。break
语句可用于在用户输入 Q 时退出循环。您的switch
块中还缺少几个break
。main()
函数被声明为int main() { ... }
,所以它应该返回一个整数值。如果未发生任何错误,则此值应为零。
将您的开关大小写包装在 while 循环中,该循环为 true,它将无限期运行。您还可以使用 scanf 检查要输入的特定密钥以阻止它。