是的,你好。我对编程很陌生。我真的需要帮助,因为我希望既能理解我做错了什么又能通过我的课程。
我参加了编程简介课程,我的任务是创建一个程序,该程序使用数组来存储0到100(含)范围内的百分比等级。该程序应允许用户指示何时完成成绩。当用户输入成绩时,程序应打印输入的成绩。
我有一个在Code :: Blocks中编译的运行代码。但我的问题是:
A。)用户完成后告诉C的最佳方法是什么?我应该
B。)如何只打印已输入的成绩而不通过所有100个插槽?我无法找到解决方案。
欢迎并赞赏任何和所有建议!
int i = 0;
float percentScore[100];
for (i = 0; i < 10; i++) {
printf("Grade %d: ", i + 1);
scanf("%f", &percentScore[i]);
}
for (i = 0; i < 10; i++) {
printf("\n%.2f%%", percentScore[i]);
}
return 0;
答案 0 :(得分:1)
您对A)的选择并不相互排斥;第一个是用户可以做的事情,第二个是在代码中表示的东西。因此,你可以合理地做到这两点。
对于B),你需要一种方法来表示输入的成绩数(提示:一个变量);然后可以用它来控制打印的数量。
答案 1 :(得分:1)
以下是解决问题的简单方法:
sscanf()
; 用户可以通过输入空行来表示列表的结尾。
这是一个例子:
#include <stdio.h>
#define GRADE_NB 100
int main(void) {
int i, n;
float grade, percentScore[GRADE_NB];
char buf[100];
for (n = 0; n < GRADE_NB;) {
printf("Grade %d: ", n + 1);
if (!fgets(buf, sizeof buf, stdin)) {
/* end of file reached: input exhausted */
break;
}
if (sscanf(buf, "%f", &grade) != 1) {
/* not a number: input exhausted */
break;
}
if (grade >= 0 && grade <= 100) {
/* value is OK, grade accepted */
percentScore[n] = grade;
n++;
} else {
printf("Invalid grade: %f\n", grade);
}
}
for (i = 0; i < n; i++) {
printf("%.2f%%\n", percentScore[i]);
}
return 0;
}
如果潜在的输入数量不受限制,则必须从堆中分配数组并在收集更多输入时重新分配它。这是一个简单的解决方案,为每个输入重新分配数组:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i, n;
float grade, *percentScore;
char buf[100];
for (n = 0, percentScore = NULL;;) {
printf("Grade %d: ", n + 1);
if (!fgets(buf, sizeof buf, stdin)) {
/* end of file reached: input exhausted */
break;
}
if (sscanf(buf, "%f", &grade) != 1) {
/* not a number: input exhausted */
break;
}
if (grade >= 0 && grade <= 100) {
/* value is OK, grade accepted */
percentScore = realloc(percentScore, (n + 1) * sizeof(*percentScore));
if (percentScore == NULL) {
printf("allocation failed\n");
return 1;
}
percentScore[n] = grade;
n++;
} else {
printf("Invalid grade: %f\n", grade);
}
}
for (i = 0; i < n; i++) {
printf("%.2f%%\n", percentScore[i]);
}
free(percentScore);
return 0;
}