用C语言创建成绩册程序

用C语言创建成绩册程序,c,C,我正在做一个程序,它将记录输入的分数。程序应询问用户是否完成了分数输入。如果用户未完成,用户将继续输入成绩。如果用户完成,程序将打印成绩。每次我运行这个程序,它都会崩溃 这是我得到的 #include <stdio.h> int main (){ int i = 0; float gradeBook; char ans, y, Y, n, N; printf("Please enter grade %d: ", i + 1); scanf(

我正在做一个程序,它将记录输入的分数。程序应询问用户是否完成了分数输入。如果用户未完成,用户将继续输入成绩。如果用户完成,程序将打印成绩。每次我运行这个程序,它都会崩溃

这是我得到的

#include <stdio.h>

int main (){
    int i = 0;
    float gradeBook;
    char ans, y, Y, n, N;

    printf("Please enter grade %d: ", i + 1);
    scanf("%.2f", &gradeBook);

    printf("\nDo you have more grades to enter? [Y or N] ");
    scanf("%c", ans);

    while(ans == 'y' || ans == 'Y'){
        printf("Please enter the next grade %d: ", i + 1);
        scanf("%i", &gradeBook);

        printf("\nDo you have more grades to enter? ");
        scanf("%c", ans);
    }
    printf("You have entered %d grades", i);
    printf("The grades you have entered are %.2f ", gradeBook);
    return 0;
}
#包括
int main(){
int i=0;
浮动成绩册;
字符ans,y,y,n,n;
printf(“请输入等级%d:,i+1);
scanf(“%.2f”和成绩册);
printf(“\N您是否有更多分数需要输入?[Y或N]”);
scanf(“%c”,ans);
while(ans==“y”| ans==“y”){
printf(“请输入下一个等级%d:,i+1);
scanf(“%i”和成绩册);
printf(“\n您还有更多的分数要输入吗?”);
scanf(“%c”,ans);
}
printf(“您已输入%d个等级”,i);
printf(“您输入的成绩是%.2f”,成绩册);
返回0;
}

对于此类问题,您应该使用数组。以下是我所做的:

#include <stdio.h>

int main (){
int i = 0, j;
float gradeBook[20];
char ans;

printf("Please enter grade %d: ", i + 1);
scanf("%f", &gradeBook[0]);

printf("\nDo you have more grades to enter? [Y or N] \n");
scanf(" %c", &ans);

while (ans == 'y' || ans == 'Y') {
printf("Please enter the next grade: \n");
i += 1;
scanf("%f", &gradeBook[i]);

printf("\nDo you have more grades to enter? \n");
scanf(" %c", &ans);
}

printf("You have entered %d grades\n", i+1);
printf("The grades you have entered are: \n");
for (j=0; j<=i; j++)
printf("%.2f ", gradeBook[j]);

printf("\n\n");

return 0;
}
#包括
int main(){
int i=0,j;
浮动成绩册[20];
查尔安斯;
printf(“请输入等级%d:,i+1);
scanf(“%f”和成绩册[0]);
printf(“\N您还有更多的分数要输入吗?[Y或N]\N”);
scanf(“%c”和“&ans”);
while(ans==“y”| ans==“y”){
printf(“请输入下一个等级:\n”);
i+=1;
scanf(“%f”和成绩册[i]);
printf(“\n您还有更多的分数要输入吗?\n”);
scanf(“%c”和“&ans”);
}
printf(“您已输入%d个等级,\n”,i+1);
printf(“您输入的成绩为:\n”);

对于(j=0;j您应该使用数组来处理类似的问题。下面是我所做的:

#include <stdio.h>

int main (){
int i = 0, j;
float gradeBook[20];
char ans;

printf("Please enter grade %d: ", i + 1);
scanf("%f", &gradeBook[0]);

printf("\nDo you have more grades to enter? [Y or N] \n");
scanf(" %c", &ans);

while (ans == 'y' || ans == 'Y') {
printf("Please enter the next grade: \n");
i += 1;
scanf("%f", &gradeBook[i]);

printf("\nDo you have more grades to enter? \n");
scanf(" %c", &ans);
}

printf("You have entered %d grades\n", i+1);
printf("The grades you have entered are: \n");
for (j=0; j<=i; j++)
printf("%.2f ", gradeBook[j]);

printf("\n\n");

return 0;
}
#包括
int main(){
int i=0,j;
浮动成绩册[20];
查尔安斯;
printf(“请输入等级%d:,i+1);
scanf(“%f”和成绩册[0]);
printf(“\N您还有更多的分数要输入吗?[Y或N]\N”);
scanf(“%c”和“&ans”);
while(ans==“y”| ans==“y”){
printf(“请输入下一个等级:\n”);
i+=1;
scanf(“%f”和成绩册[i]);
printf(“\n您还有更多的分数要输入吗?\n”);
scanf(“%c”和“&ans”);
}
printf(“您已输入%d个等级,\n”,i+1);
printf(“您输入的成绩为:\n”);

对于(j=0;j您的程序崩溃,因为您的scanf中缺少ans中的&in。没有&,scanf将“ans”中的值视为一个地址,并尝试访问它,因此seg fault


PS:在每次迭代中,您都会覆盖“成绩册”中的值,如果您想要打印一组值,您应该使用数组。

您的程序会崩溃,因为您的scanf中缺少了ans中的和。如果没有&,scanf会将“ans”中的值视为一个地址,并尝试访问它,从而导致seg fault


PS:在每次迭代中,你都会覆盖“成绩册”中的值,如果你想打印一组值,你应该使用数组。

你需要在调试器下运行它,但请注意:'scanf(“%c”,ans);'需要一个'&'。实际上,你不应该尝试这种复杂的程序,(这意味着'比'Hello world'更复杂'),而不知道如何有效地使用调试器。您至少应该能够告诉我们是哪一行导致了崩溃。您如何期望单个变量
成绩册
包含多个值?哪些变量是
y
y
n
n
?启用编译器警告,例如使用
gcc
,compile with
gcc-std=c11-Wall-Wextra-pedantic
。此外,这句话“每次我运行程序时,它都会崩溃。”也没有什么帮助。如果你告诉我们在崩溃之前它会崩溃到什么程度,这至少是一个稍微好一点的问题。你需要在调试器下运行它,但请注意:'scanf(“%c”,ans)“需要一个”&。真的,你不应该尝试这种复杂的程序,(这意味着“比“Hello world”更复杂),而不知道如何有效地使用调试器。您至少应该能够告诉我们是哪一行导致了崩溃。您如何期望单个变量
成绩册
包含多个值?哪些变量是
y
y
n
n
?启用编译器警告,例如使用
gcc
,compile with
gcc-std=c11-Wall-Wextra-pedantic
。此外,这句话“每次我运行程序时,它都会崩溃。”也没有什么帮助。如果你告诉我们它在崩溃之前能走多远,这至少是一个稍微好一点的问题。这应该是一个注释谢谢你的帮助evandro10!我得到了它,并做了一些修改。现在有一个wa吗当然,只需编辑最后一个for循环,删除前面的行:printf(“您输入的分数是:\n”);并将其放入:for(j=0;j这应该是一个评论谢谢你的帮助evandro10!我做了一些修改。现在有没有一种方法可以让我得到这样的答案:1年级是88,2年级是99,3年级是78等等。当然,只需编辑最后一个for循环,删除前面的一行:printf(“你输入的成绩是:\n”);然后把这个放进去:for(j=0;j