原题
分析:
(1) 输入3个整数存入变量num1、num2、num3;
(2) 求3个整数的平均值,赋给变量average;
(3) 输出average。
初级版本:
void main()
{ int num1,num2,num3;
float average;
printf(″Please input three numbers:″);
scanf(″%d,%d,%d″,&num1,&num2,&num3);
average = (num1+num2+num3)/3.0;
printf(″average=%7.2f\n″,average);
}
现在需要对代码进行验证操作,如:
- 判断输入是否完整,如果输入数数量少于要求数量,则提示用户重新输入并重复之前的输入步骤。
- 询问用户是否持续的输入并且窗口不会关闭。
- 未输入状态时按回车可以停留界面。
优化后的代码:
#include <stdio.h>
int main() {
int num1, num2, num3;
float average;
int success = 0; // 输入是否成功的标志
char choice; // 声明一个字符型变量
do {
// 输入三个整数
printf("请输入三个整数:\n");
if (scanf("%d%d%d", &num1, &num2, &num3) != 3) {
printf("输入错误,请重新输入三个整数!\n");
// 清空输入缓冲区
while (getchar() != '\n');
continue; // 继续循环
}
// 标记输入成功
success = 1;
// 计算平均值
average = (float)(num1 + num2 + num3) / 3;
// 输出平均值
printf("三个数的平均值为:%.2f\n", average);
// 询问是否继续输入
while (1) {
printf("是否继续输入?(Y/N)");
choice = getchar();
// 清空输入缓冲区
while (getchar() != '\n');
if (choice == 'Y' || choice == 'y' || choice == 'N' || choice == 'n') {
break; // 输入合法,跳出循环
}
printf("输入错误,请重新输入!\n");
}
} while (choice != 'N' && choice != 'n');
return 0;
}
需要注意的是:
- 及时清空getchar缓冲区的回车,确保输入后的判断不会出现问题。
- 计算平均值可以在前面加上类型转换,或者在后面用3.0代替。
- 字符型变量choice记得提前声明。