实验内容:Galgame中有选项的功能,我试着用C语言做了一个有类似的程序,当作是练习。
- 实验项目名称:ATRI-REPLY-2
- 实验任务:制作一个会回复的程序
- 实验条件:多平台兼容
- 编译环境:gcc
- 使用语言:C语言
- IDE:vscode
- 备注:输入选项触发对应回答。
- 日志:2021-10-17 实现运行,但存在多字符输入的问题。
2021-10-17 使用define定义_Bool类型,
并使用fflush(stdin)清空标准输入缓存区。
2021-10-17 出现第二次打开会打印“Sorry,I only can understand ABCD.”,
2021-10-17 将变量ch初始化,以此跳出循环,避免上述BUG。
暂时解决,但不完全。
2021-10-17 查阅ASCII码对照表,彻底解决问题。
#include2.入口循环#include #define ture 1 #define false 0 //定义Bool类型 int main(void) { char ch; //定义输入,并将ch变量初始化。 do { switch (ch) //判断选项 { case 'A': case 'a': printf("Answer1nn"); //打印回复1 break; case 'B': case 'b': printf("Answer2nn"); //打印回复2 break; case 'C': case 'c': printf("Answer3nn"); //打印回复3 break; case 'D': case 'd': printf("Answer4nn"); //打印回复4 break; case 'Q': case 'q': return 0; //终止程序 default: if (ch >= 32) //判断是否有输入字符 printf("Sorry,I only can understand ABCDQ.nn"); //向用户反馈错误信息。 break; } fflush(stdin); //清空标准输入缓存区 printf("What do you want to choose to ask?n" "A.Question1 B.Question2n" "C.Question3 D.Question4n" "Q.Exitn"); //用户引导 } while ((scanf("%c", &ch)) == ture); //输入执行出口循环 return 0; }
相比出口循环,可读性较高。
int main(void)
{
char ch; //定义输入。
printf("What do you want to choose to ask?n"
"A.Question1 B.Question2n"
"C.Question3 D.Question4n"
"Q.Exitn"); //用户引导
while ((scanf("%c", &ch)) == ture) //执行入口循环
{
switch (ch) //判断选项
{
case 'A':
case 'a':
printf("Answer1nn"); //打印回复1
break;
case 'B':
case 'b':
printf("Answer2nn"); //打印回复2
break;
case 'C':
case 'c':
printf("Answer3nn"); //打印回复3
break;
case 'D':
case 'd':
printf("Answer4nn"); //打印回复4
break;
case 'Q':
case 'q':
return 0; //终止程序
default:
printf("Sorry,I only can understand ABCDQ.nn"); //向用户反馈错误信息。
break;
}
fflush(stdin); //清空标准输入缓存区
printf("What do you want to choose to ask?n"
"A.Question1 B.Question2n"
"C.Question3 D.Question4n"
"Q.Exitn"); //用户引导
}
return 0;
}
- 实验成果:
1.fflush(stdin)刷新标准输入缓冲区,fflush(stdout)刷新标准输出缓冲区。
需要引用头文件stdlib.h。
2.出口循环先执行循环,再判断条件。
3.空格的ASCII码为32,大于空白字符。



