用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 withgcc-std=c11-Wall-Wextra-pedantic
。此外,这句话“每次我运行程序时,它都会崩溃。”也没有什么帮助。如果你告诉我们在崩溃之前它会崩溃到什么程度,这至少是一个稍微好一点的问题。你需要在调试器下运行它,但请注意:'scanf(“%c”,ans)“需要一个”&。真的,你不应该尝试这种复杂的程序,(这意味着“比“Hello world”更复杂),而不知道如何有效地使用调试器。您至少应该能够告诉我们是哪一行导致了崩溃。您如何期望单个变量成绩册包含多个值?哪些变量是y
,y
,n
,n
?启用编译器警告,例如使用gcc
,compile withgcc-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