搜索
查看: 1287|回复: 10
打印 上一主题 下一主题

让计算机判断这个数是否为(1~9)一位数,搞了很久都不明白。

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-3 23:29:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
        int a;
    scanf("%d",a);
    if (0<a<10)
                printf("yes");
    else
                printf("no");
        system("pause");
        return 0;
}



这样不对吗???求指点。

沙发
发表于 2013-12-3 23:42:46 | 只看该作者
if(a > 0 && a < 10)

点评

太对了  发表于 2013-12-5 18:24
板凳
发表于 2013-12-6 12:03:54 | 只看该作者
lz给rosynirvana啊哈币哇。。。
地板
发表于 2013-12-7 23:40:42 | 只看该作者
简单改了下~
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a;
    for(;;) //设置为无限循环,让程序重复运行
    {
    scanf("%d",&a); //输入的a的值必须要存入a的地址中,所以a前面要加  &
    if (a>0&&a<10) //变量必须是主动比较的,也就是a必须在数字前,而且每次只能和一个值比较,也就是
//不能写成0<a<10这样,&& 这个符号代表且的意思,就是a>0的同时也要a<10。
                printf("yes");
    else
                printf("no");
    }
    system("pause");
    return 0;
}
//鉴定完毕。
5#
发表于 2013-12-8 00:04:52 | 只看该作者
shiluo0827 发表于 2013-12-7 23:40
简单改了下~
#include
#include

两点,
第一, 0<a<10没有语法错误,只是语义和数学上0<a<10不同,并非像你所说的变量必须在数字前
(语义等同于数学上的 0<a, 因为(0<a) < 10总是成立的)

第二,在无限循环中用scanf要清缓冲区,不然输入错误之后就会一直死循环
6#
发表于 2013-12-8 00:11:03 | 只看该作者
rosynirvana 发表于 2013-12-8 00:04
两点,
第一, 0

多谢指正~~~
7#
发表于 2013-12-10 22:50:52 | 只看该作者
  1. if(a>=1  &&  a<=9)
复制代码
8#
发表于 2013-12-13 22:40:41 | 只看该作者
if(0<a<10)
gcc为向右结合的运算顺序
到了编译器那里这个语句就变成
if((0<a)<10)
重载过运算符的话 应该知道
template <class type1, class type2>
bool operator<(type1,type2){
...
};
即<返回一个布尔值

我们先假定a>=0
所以上面的代码经过一番旅行后有会变成
if(0<10)
现在聪明的你应该知道为什么了吧、
9#
发表于 2013-12-13 22:57:20 | 只看该作者
HUIH 发表于 2013-12-13 22:40
if(0

运算符的结合方向是C标准规定的,各家编译器不会有什么不同

而且表达式是有值的这个概念比cpp的模板和重载运算符简单多了吧,绕一圈去解释岂不是徒增困扰
10#
发表于 2013-12-14 11:16:48 来自手机 | 只看该作者
rosynirvana 发表于 2013-12-13 22:57
运算符的结合方向是C标准规定的,各家编译器不会有什么不同

而且表达式是有值的这个概念比cpp的模板和 ...

呵呵。本人学问低。还请大师指教!
11#
发表于 2013-12-14 11:36:05 | 只看该作者
HUIH 发表于 2013-12-14 11:16
呵呵。本人学问低。还请大师指教!

不不不,你说的没错的,只是我觉得那样子解释太绕圈子,别人也听不懂
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表