(C语言)不明白scanf("%*s"),求解释啊

嵌入式小侠 2012-07-10 12:44:33
#include<stdio.h>
int main()
{
int code;
int status;
status=1;
while((status=scanf("%d",&code))!=1||(code<1||code>5))
{
if(status!=1)
scanf("%*s");
printf("Enter an integer from 1 to 5:");
}
printf("%d\n",code);
return 0;
}
//不懂上面的代码中的scanf("%*s"),大家帮我解释下吧,
scanf("%*s")可以用while(getchar()!='\n' continue;代替,
后一个语句我懂,前一个不懂
...全文
202 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lx3275852 2012-07-10
  • 打赏
  • 举报
回复
4L正解,这么做只是为了清除缓冲区的。。
如果不写这句话的话。。。

你可以试一试把它注释掉
然后
程序运行 你输入
33 abcd
测试一下

然后把那句话还原 再测试一下~~


总之 那句话是为了清除缓冲区的,而更严格的连换行符都清除的 清除缓冲区方法也如楼上的代码
scanf("%*[^\n]");
scanf("%*c");

或者写到一起 scanf("%*[^\n]%*c");【注意,这样写在个别情况下会出小错误,建议分开写】
解释:%*[^\n] 是接收任意多个非\n字符,然后 缓冲区只剩下一个换行符, %*c把最后那个换行符也扔掉
垃圾清除干净~
hnzmdzcm 2012-07-10
  • 打赏
  • 举报
回复
%*表示抛弃后面的数据
如:scanf("%*c");抛弃输入缓冲区中的所有非空字符

这段代码可以清空输入缓冲区:

scanf("%*[^\n]");
scanf("%*c");
W170532934 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

加*号表示scanf("%*s")不读入到参数中,所以即便你后面加上&str的参数都没有,实现了类似于等待'\n'的效果。
[/Quote]
++
图灵狗 2012-07-10
  • 打赏
  • 举报
回复
加*号表示scanf("%*s")不读入到参数中,所以即便你后面加上&str的参数都没有,实现了类似于等待'\n'的效果。
Universe_Admin 2012-07-10
  • 打赏
  • 举报
回复
scanf("%*s");// * 表示本输入项在读入后不赋值给相应的变量

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧