c - 循环没有超出预期的结果
问题描述
我正在尝试创建一个循环,在其中输入 30 或更少的学生 GPA 并获得:平均 gpa、最高和最低 gpa、调整后的平均值、查看是否输入了特定 gpa 并显示数组的内容。但是当我运行我拥有的代码时,我只能输入一个gpa ...
#include <stdio.h>
#include <stdlib.h>
#define GPA_COUNT 30
main(){
int gpa [GPA_COUNT];
int total = 0, i;
double average;
for(i = 0; i < GPA_COUNT; i++){
printf("Enter student %i's GPA: \n", i + 1);
scanf("%i", &gpa[i]);
}
for(i = 0; i < GPA_COUNT; i++){
total += gpa[i];
if(gpa[i] > 2.0){
printf("You need to study harder! \n");
}
else if(gpa[i] < 3.5){
printf("Nice work! \n");
}
}
average = (double)total / GPA_COUNT;
printf("The average GPA is: %.2lf \n", average);
system("pause");
}
我希望能够进入 gpa 的其余部分。
解决方案
正如 Antii Haapala 在他的评论中所说,你的问题是你已经初始化gpa
为一个整数,并且正在使用printf
一个整数进行扫描——但实际上是在输入一个双精度数。
要修复它,您只需要期待一个双精度:
double gpa [GPA_COUNT];
// -- snip --
scanf("%lf", &gpa[i]);
我假设您是学生,所以这里有一些其他说明可以帮助您改进代码:
- 检查学生的 GPA 时看看你的条件(如果学生得分 1.0 会发生什么?4.0?)
\n
您可以从此行 ( )中删除printf("Enter student %i's GPA: \n" i + 1);
以使输入位于同一行。- 考虑一下如果有人向您的程序扔垃圾输入会发生什么——清理用户输入很重要!一种更安全但仍然简单的方法是将用户输入读取为字符串,然后尝试将输入转换为
strtod
.
推荐阅读
- callback - ESP8266,客户端通过 Ticker 连接
- unity3d - unity:如何在地形上粘贴 arial 照片?
- ignite - 点燃缓存 TreeMap
- c# - XML 中的不同值
- python - 单击 PushButton 时如何打印多个 QLabel?
- python - 更多主题当代
- django - Django crontab,每 12 小时运行一次作业
- reactjs - 使用 Enzyme & Jest 测试关于状态的 IF 语句不起作用
- laravel-5.6 - 当我将数据从控制器传递到作业时,Laravel 排队问题
- python - /edit/3 处的 ValueError 视图 main_panel.views.edit 未返回 HttpResponse 对象。它返回 None 而不是