黑马程序员技术交流社区

标题: 想问一个C语言上的小问题,来帮下忙呗 [打印本页]

作者: bowenfei    时间: 2015-9-8 23:14
标题: 想问一个C语言上的小问题,来帮下忙呗
菜鸟一枚,自己一个人学的李伟老师的ios基础视频,目前看到第四天的,今天有一个问题想问一下。
李伟老师的基础视频里的石头剪刀布游戏里面有一个校验过程,视频里校验程序是
#include <stdio.h>
#include <stdlib.h>
  int main(){
int computer = -1,player = -1;
   computer =  arc4random_uniform(3) ;



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







作者: 408205555    时间: 2015-9-9 11:56
应该你的scanf截取的是%d类型,所以不管你输入的是回车、空格、TAB、字符都会被忽略,直到你输入数字。
作者: Meracle    时间: 2015-9-9 12:03
float a = 0;
scanf("%f",&a);
if(a != 1 && a != 2 && a != 3)
{
        printf("xxxxxxxxxx");
}

scanf格式化输入。也就是取整了
作者: jsh_513    时间: 2015-9-9 12:57
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息才对么
作者: lixj1991    时间: 2015-9-9 14:33
是这样的,scanf是以%d的形式读取的,因此它的有效读取是从第一个数字开始,到第一个非数字结束
例如如果输入3.1415926,第一个有效数字是3,第一个非法字符是“.",所以读取字符是3。
如果同理,如果输入是34.159926,则有效读取的是34。

作者: bowenfei    时间: 2015-9-9 15:43
jsh_513 发表于 2015-9-9 12:57
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息 ...

但是这样的结果就是玩家没按套路出拳,结果也正常运行了。
作者: bowenfei    时间: 2015-9-9 15:46
lixj1991 发表于 2015-9-9 14:33
是这样的,scanf是以%d的形式读取的,因此它的有效读取是从第一个数字开始,到第一个非数字结束
例如如果输 ...

在玩家输入float类型的时候怎么输出"请按套路出拳"啊?
作者: bowenfei    时间: 2015-9-9 15:49
jsh_513 发表于 2015-9-9 12:57
不合理呀,1.2取1那是自然,可取1后也合游戏规则的呀取值为(0,1,2),所以不该输出按套路出牌的提示信息 ...

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

scanf ("%f",&player)这一步应该就已经取整了,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2