A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

菜鸟一枚,自己一个人学的李伟老师的ios基础视频,目前看到第四天的,今天有一个问题想问一下。
李伟老师的基础视频里的石头剪刀布游戏里面有一个校验过程,视频里校验程序是
#include <stdio.h>
#include <stdlib.h>
  int main(){
int computer = -1,player = -1;
   computer =  arc4random_uniform(3) ;



怎么在玩家出1.2的情况下提示玩家按套路出牌?
是不是前面定义过player是整型,玩家输入实型的时候电脑自动取整数位?






11 个回复

倒序浏览
应该你的scanf截取的是%d类型,所以不管你输入的是回车、空格、TAB、字符都会被忽略,直到你输入数字。
回复 使用道具 举报
float a = 0;
scanf("%f",&a);
if(a != 1 && a != 2 && a != 3)
{
        printf("xxxxxxxxxx");
}

scanf格式化输入。也就是取整了
回复 使用道具 举报
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息才对么
回复 使用道具 举报
是这样的,scanf是以%d的形式读取的,因此它的有效读取是从第一个数字开始,到第一个非数字结束
例如如果输入3.1415926,第一个有效数字是3,第一个非法字符是“.",所以读取字符是3。
如果同理,如果输入是34.159926,则有效读取的是34。
回复 使用道具 举报
bowenfei 来自手机 中级黑马 2015-9-9 15:43:45
地板
jsh_513 发表于 2015-9-9 12:57
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息 ...

但是这样的结果就是玩家没按套路出拳,结果也正常运行了。
回复 使用道具 举报
bowenfei 来自手机 中级黑马 2015-9-9 15:46:03
7#
lixj1991 发表于 2015-9-9 14:33
是这样的,scanf是以%d的形式读取的,因此它的有效读取是从第一个数字开始,到第一个非数字结束
例如如果输 ...

在玩家输入float类型的时候怎么输出"请按套路出拳"啊?
回复 使用道具 举报
bowenfei 来自手机 中级黑马 2015-9-9 15:49:51
8#
jsh_513 发表于 2015-9-9 12:57
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息 ...

我想的是怎么实现这种情况:只有玩家键盘上输入0,1,2这三个数时,程序才会正常运行;输入别的数都提示请按套路出拳(例如输入1.2时)
回复 使用道具 举报
同样的问题想解决
回复 使用道具 举报
if后面再或一个(player!=int player)试试。我是这么想的,没有电脑去实践。
回复 使用道具 举报
不要用scanf("%d",&player)来解决问题,因为这样默认接收整型,1.2会把小数部分截断,player会接收值1,必然不会报出您想要的错误。可以用字符串来搞定问题,用字符串的话,可以轻松辨别出"1"和"1.2"的区别
回复 使用道具 举报
18503582292 发表于 2015-9-9 17:33
if后面再或一个(player!=int player)试试。我是这么想的,没有电脑去实践。

scanf ("%f",&player)这一步应该就已经取整了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马