#include<stdio.h>
int main()
{
struct book
{
char name;
float price;
int pages;
};
struct book b1, b2, b3;
char ch;
printf("\nEnter the info of the books:\n");
while ((ch = getchar()) == '\n' && ch != EOF) { }
scanf_s("%c", &b1.name, sizeof(char));
scanf_s("%f", &b1.price, sizeof(float));
scanf_s("%d", &b1.pages, sizeof(int));
while ((ch = getchar()) != '\n' && ch != EOF) {}
scanf_s("%c", &b2.name, 1);
scanf_s("%f", &b2.price, sizeof(float));
scanf_s("%d", &b2.pages, sizeof(int));
while ((ch = getchar()) != '\n' && ch != EOF) {}
scanf_s("%c", &b3.name, 1);
scanf_s("%f", &b3.price, sizeof(float));
scanf_s("%d", &b3.pages, sizeof(int));
printf("\n%c %f %d", b1.name, b1.price, b1.pages);
printf("\n%c %f %d", b2.name, b2.price, b2.pages);
printf("\n%c %f %d", b3.name, b3.price, b3.pages);
printf("\n");
return 0;
}
任何人都可以告诉我为什么我无法在以下程序中打印b1的名称,我是C的新人,感谢任何帮助。
结果
输入图书信息:
A 2454.45 344
B 56566.55 355
C 5676.66 566
输出结果为:
2454.45 344
B 56566.55 355
C 5676.66 566`
答案 0 :(得分:2)
你的问题在这里:
struct book b1, b2, b3;
char ch;
printf("\nEnter the info of the books:\n");
while ((ch = getchar()) == '\n' && ch != EOF) { }
scanf_s("%c", &b1.name, sizeof(char));
scanf_s("%f", &b1.price, sizeof(float));
scanf_s("%d", &b1.pages, sizeof(int));
while语句完全没必要。 printf()调用后stdin为空,它不会影响它,而while循环会占用输入的第一个字符。摆脱它,代码按预期工作。
也许值得注意的是,当您刚刚学习时,您可能希望坚持使用更多标准功能。 scanf_s是Microsoft扩展。