我正在尝试在C程序中执行以下结构,但它无法正常工作。它无法正确打印给定值。
#include<stdio.h>
#include<conio.h>
int main()
{
struct book
{
char name;
int page;
float price;
};
struct book b1, b2, b3;
clrscr();
printf("\n 1st data \n");
scanf("%c%f%d",&b1.name,&b1.price,&b1.page);
printf("\n 2nd data");
scanf(" %c%f%d",&b2.name,&b2.price,&b2.page);
printf("\n3rd data");
scanf("%c%f%d",&b3.name,&b3.price,&b3.page);
printf("%c%f%d",b1.name,b1.price,b1.page);
printf("%c%f%d",b2.name,b2.price,b2.page);
printf("%c%f%d",b3.name,b3.price,b3.page);
getch();
return 0;
}
每次运行上面的代码,我得到不同的输出..其中一个是:: .... ....输出
data
p
1
2.2
s
2
3.3
p0.1000002.1.00000022015s-?.<00000000000000000000000000000e+15315872
答案 0 :(得分:0)
什么?您是否收到了错误的程序行为,并且您没有检查过单个返回值?对于scanf(3),例如?
答案 1 :(得分:0)
所以,在你的scanf中,你要求&#34;浮动&#34;那么&#34;十进制整数&#34;,但是在你的样本中你似乎传递整数然后浮动你正在放入stdin(请参阅你在问题中粘贴的输出 - c,d,f;不是c ,f,d)。此外,&#34;最古老的软件专家&#34;是对的 - 你需要检查你的退货代码(这样的事情不会发生),大多数人可能会建议你使用&#34; sscanf&#34;和&#34; fgets&#34;作为一种更安全的选择,特别是当你开始尝试扩展你的名字时,#34;不仅仅是一个&#34; char&#34;。
答案 2 :(得分:0)
在给出第二个输入后,输入缓冲区可能会变满,因此它不接受第3个输入。每次输入后尝试使用fflush(stdin)。