用C创建成绩册程序

时间:2017-05-27 22:44:12

标签: 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("%.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;
}

2 个答案:

答案 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”中的值,如果你想打印一组值,你应该使用一个数组。