扫描和打印后我有这种结构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;
}
答案 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值或换行符