能问下为什么一定要加这一行处理非整数输入的代码呢?不加的话为什么输入其他整数程序会自动清理多余的数,而输入字符却不能呢?

newshou1 2020-06-30 10:09:01
int getnights(void)
{
int nights;
printf("Please enter the days you want live: \n");
while (scanf("%d",&nights) != 1)
{
scanf("%*s"); //处理非整数输入
printf("Please enter an integer,sun as 2.\n");
}
return nights;
}
...全文
101 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
棉猴 2020-07-06
  • 打赏
  • 举报
回复
MSDN里面提到 An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored. 大致的意思是,scanf()函数的参数中,在百分号后面添加星号*,表示星号之后的所有参数都无效。使用星号的作用是读取流中的内容,但是不会存储这些内容。
qq_1457346882 2020-07-06
  • 打赏
  • 举报
回复
为什么要*s?字符的话%s就是字符串了啊,
因为你定义的是整数的变量,所以你获取的会省略小小数部分。
如果要输入带小数的,定义别的,如double类型,输入用%lf就好了啊
%c %s都是字符类型,你输进来也不对啊,输个数字也许可能隐式转换成功,这个我没这么写过,不太清楚,但是你输字母给数字变量,肯定会出问题啊,还不是单个字符
Simple-Soft 2020-06-30
  • 打赏
  • 举报
回复
对于字符串来讲,没有多余的
newshou1 2020-06-30
  • 打赏
  • 举报
回复
引用 1 楼 Simple-Soft 的回复:
对于字符串来讲,没有多余的

能稍微讲解一下 为什么输入字母子类的就不行吗 是因为有个回车字符在的原因吗?

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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