Я работаю над программой, которая будет отслеживать введенные оценки. Программа должна спросить, закончил ли пользователь ввод оценок. Если пользователь не закончил, пользователь продолжит вводить оценки. Если пользователь закончил, программа напечатает оценки. Каждый раз, когда я запускаю программу, она вылетает.

Вот что я получил.

#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;
}
c
0
RLuck 28 Май 2017 в 01:44

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;
}
2
evandro10 27 Май 2017 в 23:31

Ваша программа вылетает из-за того, что вы не указали & in в вашем файле scanf. Без &, scanf обрабатывает значение в «ans» как адрес и пытается получить к нему доступ, что приводит к сбою.

PS: На каждой итерации вы перезаписываете значение в "gradeBook", если вы хотите напечатать набор значений, вы должны использовать массив.

1
jmds 28 Май 2017 в 00:40