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

C代码;带输入的嵌套do while循环,c,for-loop,do-while,C,For Loop,Do While,前几天我得到了一些很棒的帮助,解决了一个C代码问题,希望这一个能产生类似的响应。第一个任务是编写一个代码来接受未知数量的名称。第二种方法是允许为每个名称输入未知数量的值(等级),并对每组值取平均值,然后用名称打印。有一本书是我读过并找到了一些灵感的,但它仍然不是正确的 我没有接触过这段代码的任何特定部分,但我试图通过嵌套的Do…while循环保持它的简单性。我尝试过几种不同的方法,但都不能优雅地表达分配给未知人数的人的未知数量的值 我希望用户会被提示输入一个名称,然后只要该值没有被清空,就会立即

前几天我得到了一些很棒的帮助,解决了一个C代码问题,希望这一个能产生类似的响应。第一个任务是编写一个代码来接受未知数量的名称。第二种方法是允许为每个名称输入未知数量的值(等级),并对每组值取平均值,然后用名称打印。有一本书是我读过并找到了一些灵感的,但它仍然不是正确的

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

我希望用户会被提示输入一个名称,然后只要该值没有被清空,就会立即提示用户输入以表格形式列出的成绩值。当grade的值变为null时,循环退出,求和总数的平均值。名称和平均值一起打印,直到名称值为null,然后子项退出。非常感谢来自社区的任何意见

#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 != '\0');
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 != '\0');
return(0);}
#包括
#包括
int main(){
字符b,stu_名称;
浮动等级、总和、平均值;
int i,计数器;
做{
printf(“输入学生姓名?\n”);
scanf(“%s”和stu_名称);
做{
printf(“该学生需要输入多少个年级?\n”);
scanf(“%d”、&i);
用于(计数器=0;计数器
正如Helio Santos指出的那样,for循环中缺少了结束括号

您还存在各种语法类型问题:

  • 对于“输入等级”提示,您只需要%c而不是%s 将stu_名称定义为字符而不是字符[]
  • 内部Do/While循环的末端应检查i,而不是等级
  • 该检查还应针对scanf在您的设置中可能返回的值进行;%d将强制尝试获取数值

Bam!编译成功。非常感谢,我感谢您的帮助。看起来我无法完全测试它(请注意下面的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 = '\0'
    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]= '\0';
printf("Type q or Q to quit or enter to input another student \n");
scanf(" %c", &b);
} while (b != 'q' && b!='Q');
return(0);}
#包括
#包括
int main(){
字符b;
char stu_name[75];
浮动等级、总和、平均值;
int i,计数器;
做{
printf(“输入学生姓名?\n”);
scanf(“%s”,stu_名称);
b='\0'
i=0;
总和=0;
printf(“该学生需要输入多少个年级?\n”);
scanf(“%d”、&i);
用于(计数器=0;计数器
“它仍然没有正确编译”?听起来好像你做错了。从一个小而简单、工作完美的东西开始,然后一次增加一点复杂度。如果你的一个小改动破坏了编译,你就会知道应该去哪里查找。仍然有几个错误。1)在第一个
扫描中删除
&
。每当你扫描
%s
,您不需要
&
.2)在最后一次
扫描中的
之前添加
,因为
%c
需要一个
字符*
,而不是
字符
.3)您忘了给第三个
字符
因为
%s
需要一个以NUL结尾的
字符*
来打印。4)删除第二个
do…while
循环。这没有任何意义。5)在最后一次
printf
中,告诉用户输入
q
停止。6)在最后一次
scanf
%c
之前添加一个空格。7)将
while(b!='\0');
更改为
while(b!='q');
while(b!='q'));
如果
b
是大写的“Q”或小写的“Q”,则要退出-