我正在开发一个能够跟踪输入成绩的程序。该程序应询问用户是否已完成输入成绩。如果用户未完成,则用户将继续输入成绩。如果用户完成,程序将打印成绩。每次我运行程序时,它都会崩溃。
这就是我得到的。
#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;
}
答案 0 :(得分:2)
您应该使用数组来解决这类问题。这是我做的:
#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;
}
答案 1 :(得分:1)
你的程序崩溃是因为你错过了&amp;在您的scanf中的ans。如果没有&amp ;,则scanf将“ans”中的值视为地址,并尝试访问它,从而产生seg错误。
PS:在每次迭代中你都要覆盖“gradeBook”中的值,如果你想打印一组值,你应该使用一个数组。