C代码;带输入的嵌套 do while 循环

C Code; nested do while loops with inputs

所以前几天我在 C 代码问题上得到了一些很棒的帮助,希望这个能产生类似的响应。第一个任务是编写一个代码来接受未知数量的名字。其次是允许为每个名称输入未知数量的值(等级),并且对每组值进行平均并与名称一起打印。我阅读了 a similar thread 并找到了一些灵​​感,但它仍然没有正确编译。

我不喜欢这段代码的任何特定部分,但我试图通过嵌套的 Do...while 循环使其保持简单。我尝试了几种不同的方法,都没有优雅地表达分配给未知数量的人的未知数量的值。

我希望系统会提示用户输入姓名,然后只要该值未被清空,系统就会立即提示用户输入成绩值,这些值列在 运行 总计中。当 grade 的值为 null 时,循环退出并对总和进行平均。 name 和 average 一起打印,直到 name 值为 null,然后 sub 退出。非常感谢社区的任何意见。

#include <stdio.h>
#include <math.h>

int main(){

char b, stu_name;
float grade, sum, avg;
int i,counter;
do{
printf("Enter a student's name? \n");
scanf("%s", &stu_name);

do{
printf("How many grades are to be entered for this student? \n");
scanf("%d", &i);

for (counter = 0; counter < i; counter++) {
printf("Enter %s's grade, hit enter and enter another \n");
scanf("%f", &grade);
sum = sum + grade;


} while (grade != '[=10=]');
avg = sum/i;

printf("GPA for %s is %f\n", stu_name,avg);
printf("Press any key to enter another student");
scanf("%c",b);
}while (b != '[=10=]');
return(0);}

正如 Helio Santos 指出的那样,您在 for 循环中缺少结尾大括号。

您还遇到了各种语法类型的问题:

  • 对于 "Enter grade" 提示,您需要 %c 而不是 %s,因为您只 将 stu_name 定义为 char 而不是 char[]
  • 内部 Do/While 循环的结尾应该检查 i,而不是等级
  • 该检查还应针对 scanf 在您的设置中可能 return 的值; %d 将强制尝试获取数值

砰!编译成功。非常感谢,感谢您的帮助。看起来我无法对其进行全面测试(请注意下面的 GPA),因为我不知道如何使用此在线编译器多次添加成绩(在循环中)。如果有人知道 GPA 标准输出是怎么回事,我会洗耳恭听,使用此代码进入作业的下一步。

*在更多评论后进行编辑。目前正在使用以下代码。它有效……但由于某种原因只有 3-4 次。

#include <stdio.h>
#include <math.h>


int main(){

char b;
char stu_name[75];
float grade, sum, avg;
int i,counter;
do{
printf("Enter a student's name? \n");
scanf("%s", stu_name);
    b = '[=10=]'
    i = 0;
    sum = 0;

printf("How many grades are to be entered for this student? \n");
scanf("%d", &i);

for (counter = 0; counter < i; counter++) {
printf("Enter %s's grade, hit enter and input another \n",stu_name);
scanf("%f", &grade);
sum = sum + grade;}

avg = sum/i;

printf("GPA for %s is %f\n", stu_name,avg);
stu_name[0]= '[=10=]';
printf("Type q or Q to quit or enter to input another student \n");
scanf(" %c", &b);
} while (b != 'q' && b!='Q');
return(0);}