scanf(“%*s“);的作用——分析一段程序

在这里插入图片描述
这是一个while循环。循环条件有两部分组成,中间用“或”连接。先看循环条件中(status = scanf(“%d”, &code)) != 1这一段。首先要知道,scanf函数是有返回值的,它返回的是输入正确的值的个数,很明显这里只要求输入一个值,%d表示有符号整数。所以如果我们这里输入的是整数,scanf函数会返回1(输入错误的情况可能是0,也可能是EOF,这里就不考虑了,视具体情况而定)。接着,status = scanf(“%d”, &code)就是把scanf的返回值赋值给了status,这段就可以简化成status != 1,也就是scanf的返回值不是1,也就是输入的不是整数的情况。
再看后面(code < 1 || code > 5),这段代码和前面也是或的关系,而括号内也是或的关系,所以((status = scanf(“%d”, &code)) != 1 || (code < 1 || code > 5))和((status = scanf(“%d”, &code)) != 1 || code < 1 || code > 5)拿掉括号所表达的逻辑关系是一样的,即有一个条件为真,整个语句就为真。所以,这段语句其实是说如果我们输入的变量(被称为code)不是整数,或者是整数但取值范围是大于5或小于1,都要进入该while循环中,,也可以说当我们输入的整数是大于等于1且小于等于5(只有1,2,3,4,5者五个数字满足条件)的一个数时,跳出该循环。
这次看循环内部。要明确,能进入循环内部,scanf函数的返回值也就是status的值必然不是1了,所以if (status != 1)正是说的这个意思。再看scanf(“%*s”);这是比较难的一个地方。第一,我们要知道,*是scanf函数中的一种修饰符,标准解释是滞后赋值,表示输入项输入后不转送给任何数据,%s表示输入的是字符串,%*s也就是将当前输入的一个字符串不送给任何变量,执行后光标直接到这个字符串后面的空格。printf(“Enter an integer from 1 to 5, please.\n”);这句很简单,就是打印出“Enter an integer from 1 to 5, please.”这句话。这句话的中文意思是“请输入1到5的一个整数”,这和我们前面分析的while的循环条件是相符合的。
总结,图中这段程序的功能是提示输入错误的人要输入1到5这五个数中的一个才能跳出while循环进入到下一步。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值