• 请不要在回答技术问题时复制粘贴 AI 生成的内容
GPU
V2EX  ›  程序员

C 语言新手 , 练习代码求指导 . 用 if 用乱了 .

  •  
  •   GPU · Jul 29, 2014 · 7546 views
    This topic created in 4484 days ago, the information mentioned may be changed or developed.
    https://gist.github.com/p0w3r-/e518ff71c6a9d68c3981

    这是代码 .

    搞来搞去 编译不出来 .并且看不懂编译出错后返回的英文.
    Supplement 1  ·  Jul 29, 2014
    经过了10多分钟的挣扎我写出来这个了 . 你们继续喷吧 , 我承受得了 不怕


    .js
    Supplement 2  ·  Jul 30, 2014
    早上又学习了一下 ,知道了switch/case 了.
    但是不知道为什么 讲解的说 要把那个判断的数除10 变成个位数再去判断 ,而不直接用100,90,80,这样子去判断的呢 ?

    我自己试过直接用 100,90,80 这样的数去编译运行也是什么任何问题的啊.



    81 replies  •  2014-07-31 13:58:19 +08:00
    yangqi
    yangqi
    Jul 29, 2014
    1
    ....
    无语了, if后面只能有一个else, 之前的用else if
    sy1989
    sy1989
    Jul 29, 2014
    2
    不用else if的话后面应该是一个包一个的
    lightening
    lightening
    Jul 29, 2014
    3
    90 < result >= 80
    leavic
    leavic
    Jul 29, 2014
    4
    哥,能买本教材不?
    GPU
    GPU
    OP
    Jul 29, 2014
    5
    @yangqi 我不是都括起来 .重新 if了吗?
    yukirock
    yukirock
    Jul 29, 2014 via iPhone
    6
    if (cond 1) {
    } else if (cond 2) {
    }

    注意花括号的位置。

    另外 int main() 需要返回 0。
    bombless
    bombless
    Jul 29, 2014
    7
    看不懂提示至少能看懂行号吧…
    GPU
    GPU
    OP
    Jul 29, 2014
    8
    @leavic 我有TCPL . 估计看多了就傻了 .然后估计脑子抽了.
    @lightening 哈哈 . 我承认我是乱来的.
    iyaozhen
    iyaozhen
    Jul 29, 2014
    9
    90 < result >= 80,不能这样用啊,不要想当然。还是4楼说的好,借本教材吧。
    GPU
    GPU
    OP
    Jul 29, 2014
    10
    @iyaozhen 有 The C Programming Language .
    @bombless 还不是很懂 if else 的 花括号的运用啊
    iyaozhen
    iyaozhen
    Jul 29, 2014
    11
    @GPU 不应该是 result > 90 && result >= 80 吗?
    tjmao
    tjmao
    Jul 29, 2014
    12
    哥,能买本正规教材不?判断大小的表达式,如果区间的两边是有理数,你要拆成两个表达式中间用逻辑运算符连接起来的。

    我照着词法分析器和语法分析器画三天瓢就知道怎么写代码了……
    tjmao
    tjmao
    Jul 29, 2014
    13
    另外你这算法太烂,result/10, select...case就能完成的事情,写那么多表达式。第一个还写错了,运算符应该是>=。
    yangqi
    yangqi
    Jul 29, 2014
    14
    @tjmao 人家syntax都没弄明白, 就别提算法了吧
    Tinet
    Tinet
    Jul 29, 2014
    15
    大家就不要喷了
    ifconfig
    ifconfig
    Jul 29, 2014
    16
    楼上不要太打击人,咱初中学C的时候还不是对着书一行行敲的,楼主多看书多动手就是了
    icylogic
    icylogic
    Jul 29, 2014
    17
    看不懂英文请用正版中文vs, 免费版express已足够.

    GPU
    GPU
    OP
    Jul 29, 2014
    18
    我一共就学习C的时间就不够两个星期 。 别怪我啊。
    GPU
    GPU
    OP
    Jul 29, 2014
    19
    @icylogic 请问ubuntu 的gcc 编译器有没有中文版 ?
    GPU
    GPU
    OP
    Jul 29, 2014
    20
    @ifconfig 谢谢鼓励啊。 好感动。 终于有一个不喷的
    tonyluj
    tonyluj
    Jul 29, 2014
    21
    BTW:看到LZ每行都有花括号,突然有Go的感觉
    GPU
    GPU
    OP
    Jul 29, 2014
    22
    @tonyluj 我想先学习研究一下C 。然后再去玩玩Go
    RHFS
    RHFS
    Jul 29, 2014
    23
    90 < result >= 80

    90 < result && result > 80 && result = 80
    才对吧,然后别看谭浩强的书。
    icylogic
    icylogic
    Jul 29, 2014
    24
    @GPU

    ...目测没有. 既然用 linux, 那就做好一切自力更生, 并且初期花费一半以上的时间熟悉工具的思想准备, 否则穷温富麦.
    GPU
    GPU
    OP
    Jul 29, 2014
    25
    @icylogic 我会慢慢习惯 linux的 GCC的. 谢了

    @RHFS 我没有看过谭浩强的,也不知道他的书是什么样子 . 只是可能自己不知道从哪里冒出来的想法,然后这样子写了下去.
    GPU
    GPU
    OP
    Jul 29, 2014
    26
    @Livid

    https://gist.github.com/p0w3r-/e518ff71c6a9d68c3981

    看上面我这个链接 , 用户ID 包括了 ” - " 这个符号会导致无法成功把代码发出来 ,算不算bug呢?
    acros
    acros
    Jul 29, 2014
    27
    想起我当年自学C++一个Hello World近十个error的年代,吓尿了···
    zhujinliang
    zhujinliang
    Jul 30, 2014 via Android
    28
    result < 90这个条件是没意义的,上面是result>= 90,不成立了,则进行else if条件的判断,已隐含此时值<90,同理后面的<80 <70
    rentaro
    rentaro
    Jul 30, 2014
    29
    return 0;
    jetbillwin
    jetbillwin
    Jul 30, 2014
    30
    我觉得要好好看看出错的信息,哪怕是英文的,配合着字典也能看懂的。现在的编译器都非常智能,基本上都能找到出错点,尤其是LLVM。所以,看懂编译器的出错信息非常有用。
    GPU
    GPU
    OP
    Jul 30, 2014
    31
    @acros 怎么样能弄得十个error 出来 不解啊。
    @rentaro 编辑器居然也没有报错哦。
    @zhujinliang 谢谢提点 。
    rentaro
    rentaro
    Jul 30, 2014
    32
    @GPU 什么开发环境,gcc中return语句后不加分号一定是会报错的,最好贴一下编译的信息。
    Ricepig
    Ricepig
    Jul 30, 2014
    33
    int main()
    {
    int result;

    scanf("%d",&result);
    int rank = 9 - result/10;
    if(rank < 0) {
    rank = 0;
    }else if(rank > 4){
    rank = 4;
    }

    printf("%c/n", 'A'+rank);
    return 0
    }

    这样行吗?
    jesse_luo
    jesse_luo
    Jul 30, 2014
    34
    lz期末考应该已经过了吧……

    另外else if里貌似有一半不用写
    crab
    crab
    Jul 30, 2014
    35
    @tjmao 谁都是从不懂到懂。你这么强,可以去weibo和袁哥试试。
    tioover
    tioover
    Jul 30, 2014
    36
    最近在用模式匹配,简化这些代码非常爽
    em70
    em70
    Jul 30, 2014 via Android
    37
    编译错误看不懂不要紧,可以直接贴google搜索,解决方案马上就出来了,多几次就看懂了。

    另外,程序员英语不需要多好,但至少有查字典阅读的程度
    tjmao
    tjmao
    Jul 30, 2014 via iPhone
    38
    @crab 对,谁都是从不懂到懂。如果我的回复中存在疏漏和错误,也请指出。比如你可以写:select/case还不如查表法快。我将接受这样的批评。

    谢谢。
    abscon
    abscon
    Jul 30, 2014 via Android
    39
    附言1里的代码,if语句中所有的&&后面的判断是否小于的部分都是多余的,可以删掉。

    你的失误在于把if else看成一堆状态的并行的**罗列**,而不是一个串行的**过程**。比如说,当你来到第一个else if的时候,result一定是<90的,否则就掉进前面那个if分支了。

    秀个当年我同学的经典错误的简化版:变更字符串里的字母A的大小写状态,a换成A,A换成a。他是这么写的--
    if( ch == 'a' ) ch = 'A';
    if( ch == 'A' ) ch = 'a';
    bombless
    bombless
    Jul 30, 2014
    40
    一开始是这样的…照着书来看一下表达式是怎么构成的吧,初学的时候不要想当然。
    acros
    acros
    Jul 30, 2014
    41
    @acros
    namespace前面忘了写std;缺少封号;大小写不对;夹杂中文字符...能出错的地方多了,而且以前的编译器警报也没现在的准确。
    lu18887
    lu18887
    Jul 30, 2014
    42
    楼主值得鼓励,不懂就问,没有错!不要气馁!
    roychan
    roychan
    Jul 30, 2014
    43
    呃……为什么不用 switch 呢?
    byron
    byron
    Jul 30, 2014
    44
    @roychan 还没学到哪里。
    Geeker
    Geeker
    Jul 30, 2014
    45
    很多人在不会的时候连问的勇气都没有!每个人都是这么过来的。加油
    rulerstorm
    rulerstorm
    Jul 30, 2014
    46
    写得还可以啊,这明显是小朋友的炫耀贴~
    frankzeng
    frankzeng
    Jul 30, 2014
    47
    result >= 80 && result < 90 ,没这么写的啊,明显是result<90是多余的,你想啊,如果result=85,第一个判断肯定为假,第二个>=80就为真的,后面的&& result<90就是多余的
    GPU
    GPU
    OP
    Jul 30, 2014
    48
    @rentaro 我用的是ubuntu 的GCC 随便装的环境 , 我编译好运行成功了 才发现你说的没有添加 分号

    @Ricepig 我数学略渣 .要慢慢意会一下.哈.

    @jesse_luo 是的,上面有人也提过我 , 在#28里

    @em70 是的呢,昨晚找到了一个百度文库有人分析的常见错误可以看啊可能.

    @abscon 你这个错误是不是缺少花括号了?


    @bombless @lu18887 @Geeker 谢谢你们鼓励 .我会努力的 , 恩!
    GPU
    GPU
    OP
    Jul 30, 2014
    49
    @frankzeng 原本是" result < 90 && result >= 80 " 这样子写的,然后编译出来结果不对就掉过来了,然后也没有想太多成立不成立,结果对就可以,然后就发上来了.

    @rulerstorm 这算是损还是什么呢 ,^ ^ .
    zuo
    zuo
    Jul 30, 2014
    50
    @frankzeng 猛然发现确实,尼玛,以前学习的时候怎么就没有想到了
    ljcarsenal
    ljcarsenal
    Jul 30, 2014
    51
    @crab yuange真的已经达到十分吊的地步了嘛。。。。。不过他可真是毫不谦虚啊。。。那些大神也是一直吹捧他
    frankzeng
    frankzeng
    Jul 30, 2014
    52
    @zuo 逻辑上没有什么区别,就是代码看起来不够优雅而已。

    @GPU 这C/C++编译出错容易解决了,难的是跑出来的结果不是你想要的,调试才麻烦。
    C0VN
    C0VN
    Jul 30, 2014
    53
    LZ web app都能写,这点C搞不定?
    shawngao
    shawngao
    Jul 30, 2014
    54
    } else if ( result >= 80 && result < 90 ){

    这个“ && result < 90 ”没必要吧
    precisi0nux
    precisi0nux
    Jul 30, 2014
    55
    这样来问很浪费时间,不如找本正统的教材看。
    kid177
    kid177
    Jul 30, 2014
    56
    这样低级的错误,感觉还是LZ没有仔细去学吧。

    不过也不能怪LZ,想当初我int main写成int mian硬是调了1个下午
    auser
    auser
    Jul 30, 2014
    57
    @yukirock 标准规定main函数可以不显示return的

    C中的函数要是没有参数,建议加上void,例如:
    long random(void);
    写成:
    long random()
    这种形式编译器无法帮助检查错误的参数传递

    吹毛求疵下:
    result是否应该有一个合理的范围呢?比如[0,100]
    如果scanf时候输入了非法字符怎么办?[好多年没用过scanf这个函数了……这里楼主可以暂时先检查scanf的返回值]
    abscon
    abscon
    Jul 30, 2014
    58
    @GPU 不是我的错误,是我同学的错误。错误不在于缺少花括号。如果你坚持要花括号的话我给你花括号。你看看,能看出错误在哪里不。看不出的话说明你的那个错误意识还没有纠正过来(代码是动态的过程,不是静态的状态)

    #include <stdio.h>

    int main()
    {
    char ch;
    scanf( "%c",&ch );
    if( ch == 'a' ) {
    ch = 'A';
    }
    if( ch == 'A' ) {
    ch = 'a';
    }
    printf( "%c\n", ch );
    return 0;
    }
    abscon
    abscon
    Jul 30, 2014
    59
    @livid 抗议编辑器自作主张去掉了排版用的空格
    sampeng
    sampeng
    Jul 30, 2014
    60
    你需要一本正规的教材。靠猜是没戏的
    hcy
    hcy
    Jul 30, 2014
    61
    如果LZ一会反应不过来可以先这样写
    #include <stdio.h>

    int main()
    {
    int result;
    scanf("%d",&result);

    if ( result >= 90 ){
    printf("A\n");

    } if ( result >= 80 && result < 90 ){
    printf("B\n");

    } if ( result >= 70 && result < 80 ){
    printf("C\n");

    } if ( result >= 60 && result < 70 ){
    printf("D\n");

    } if(result <60){

    printf("E\n");
    }
    return 0;
    }
    GPU
    GPU
    OP
    Jul 30, 2014
    62
    @abscon 我明白了 , 最后他还是输出一个 小写'a' .. 他应该在判断 是否等于 'A' 的那个if 前面添加一个else 就可以了.

    @sampeng 真不是教材问题 我也有K&R 在哪里.
    @kid177 我看视频学的 .过后再看一次K&R .
    @xavierskip 我哪里会写Web App 了啦.
    gejigeji
    gejigeji
    Jul 30, 2014
    63
    要不LZ自杀呗
    StackGao
    StackGao
    Jul 30, 2014
    64
    楼上心理有问题, 楼主不要介意.
    hcy
    hcy
    Jul 30, 2014
    65
    看了下那个switch 我觉得LZ还是去弄本教材吧... 你输入个92之类参数再看看?
    abscon
    abscon
    Jul 30, 2014
    66
    @GPU Bingo. 你自己的那个程序,画一个流程图,你就会发现哪里有冗余的判断了。
    GPU
    GPU
    OP
    Jul 30, 2014
    67
    @hcy 突然又傻了. 没想到这个哈.
    @abscon 你是说的if 那个还是switch 的 ?

    反正看了#65 的我又学到东西了.原来除10 就是为了这个.
    GPU
    GPU
    OP
    Jul 30, 2014
    68
    @hcy 你是想让我明白什么呢? 我还没看出你的意图来.
    abscon
    abscon
    Jul 30, 2014
    69
    @GPU 就是本帖顶楼贴出来的那个。if的
    lemonlwz
    lemonlwz
    Jul 30, 2014
    70
    很想知道楼今年贵庚
    cassyfar
    cassyfar
    Jul 30, 2014 via iPad
    71
    lz这理解力肯定是来卖萌的
    amon
    amon
    Jul 30, 2014
    72
    不建议把这样的问题发到v2,v2的精神是explore。
    可以考虑去相关的学习群或者bbs。
    LZ加油:)
    gejigeji
    gejigeji
    Jul 30, 2014
    73
    @StackGao 嘻嘻
    gejigeji
    gejigeji
    Jul 30, 2014
    74
    @StackGao 我错了
    Geass
    Geass
    Jul 30, 2014
    75
    @kid177 我写嵌入式的时候也干过这种事情==
    tttwww18
    tttwww18
    Jul 30, 2014
    76
    #include <stdio.h>
    int main()
    {
    char* g="FFFFFFDCBAA";
    int d;
    scanf("%d",&d);
    (d>=0 && d<=100)?printf("%c\n",g[d/10]):printf("Out of range");
    return 0;
    }
    这样写如何呢?
    GPU
    GPU
    OP
    Jul 30, 2014
    77
    @tttwww18 屌爆了. 但是看不懂.
    magine
    magine
    Jul 30, 2014
    78
    @tttwww18
    出门拜大神。
    话说三目运算符现在都不怎么推荐使用了吧。
    w2angel
    w2angel
    Jul 31, 2014 via Android
    79
    居然看到一个这样写的
    90 < result && result > 80 && result = 80
    麻烦不要误导别人好不好
    HatMatrix
    HatMatrix
    Jul 31, 2014
    80
    我怎么觉得你们都被楼主嫖了,都用github了不应该这个水平啊,你们说呢
    GPU
    GPU
    OP
    Jul 31, 2014
    81
    @HatMatrix 我git 命令都不懂三个以上,你真确定我懂github?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1579 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 104ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    ♥ Do have faith in what you're doing.