scanf问题求助
c语言吧
全部回复
仅看楼主
level 1
xibuhuangbang 楼主
一个关于设置和查询商品价格的题目,部分代码如下
while(1)
{
if(scanf("Set item %d price to %f",&index,&price) == 2)
{
item[index - 1] = price;
}
if(scanf("Print item %d Price",&index) == 1)
{
printf("%f\n",item[index - 1]);
}
}
预期效果是等待输入,输入
正确的
命令后执行设置或查询价格,但实际运行过程中只有第一次输入时正常执行命令,然后就进入死循环不让输入了,请问是哪里有错误
2023年01月11日 05点01分 1
level 1
xibuhuangbang 楼主
2023年01月11日 05点01分 2
吧务
level 14
要输出提示信息,使用printf而不是scanf,scanf中的格式字符串用于匹配用户的输入。
2023年01月11日 05点01分 3
我那个不是提示信息,是要整个输入的,比如输入Set item 2 price to 9.9。
2023年01月11日 09点01分
@xibuhuangbang 没有清空缓冲区,在循环的最后加while(getchar() != '\n');
2023年01月11日 11点01分
吧务
level 13
第一次输入后,缓冲区有\n残留。从第二次开始,scanf匹配format的第一个字符和缓冲区的第一个字符,因为缓冲区第一个字符为\n,匹配不上,scanf把\n扔回缓冲区后直接返回0退出,因此不会执行if中的代码。同时,由于缓冲区不为空,scanf不会让你输入,所以就造成了死循环的局面
2023年01月11日 10点01分 4
1