У меня странная проблема при использовании scanf()
для хранения данных в объединении.
Вот мой код
#include <stdio.h>
union Student
{
float score;
char grade;
};
int main(void)
{
union Student jack;
printf("Enter student score : ");
scanf("%f", &jack.score);
printf("Score : %f", jack.score);
jack.score=0;
printf("Enter student grade : ");
scanf("%c", &jack.grade);
printf("Grade : %c", jack.grade);
}
Я получаю следующий вывод
searock@searock-desktop:~/Desktop$ ./union
Enter student score : 12
Score : 12.000000Enter student grade : Grade :
но если я изменю свой код на:
#include <stdio.h>
union Student
{
float score;
char grade;
};
int main(void)
{
union Student jack;
printf("Enter student grade : ");
scanf("%c", &jack.grade);
printf("Grade : %c\n", jack.grade);
printf("Enter student score : ");
scanf("%f", &jack.score);
printf("Score : %f\n", jack.score);
}
Это даст мне точный вывод [правильный вывод].Я знаю, что это не хороший пример, но кто-то может объяснить мне, что происходит?
Модифицированный код: Добавьте \ n перед строкой форматирования.[scanf ("\ n% c", & ch);]
#include <stdio.h>
union Student
{
float score;
char grade;
};
int main(void)
{
union Student jack;
printf("Enter student score : ");
scanf("%f", &jack.score);
printf("Score : %f", jack.score);
jack.score=0;
printf("Enter student grade : ");
scanf("\n%c", &jack.grade);
printf("Grade : %c", jack.grade);
}