打印时为什么b.r不可见?

时间:2016-06-23 20:09:24

标签: c structure

扫描和打印后我有这种结构p和q打印而r没有打印你能告诉我原因吗?

struct book
{
int p;
float q;
char r;
};

int main()
{
struct book b;
scanf("%d%f",&b.p,&b.q);
scanf("%c",&b.r);
printf("%d......%f.....%c",b.p,b.q,b.r);

return 0;
}

1 个答案:

答案 0 :(得分:2)

问题:

这是因为b.r接收了在上一个\n语句末尾输入的scanf()字符

scanf("%d%f",&b.p,&b.q);

解决方案:

通过%c

scanf()之前的空格来避免它
scanf(" %c",&b.r); 
  

为什么要留出空间?

     

如果输入流中存在任何空格(' ''\n''\0'),则会消耗此信息

建议:

下次当您在打印时没有获得任何输出时,请尝试通过将其转换为int来打印它的ascii值,这样您就知道该变量的值是多少正在ascii table中查看相应的角色。

printf("%d",(int) b.r);

例如,除了printf语句之外,不对代码进行任何更改:

printf("%d......%f.....%d",b.p,b.q,(int)b.r);

你得到

输入:

2
2

输出

2.....2.....10
  

为什么 10

     

因为它是\n的ascii值或换行符