标题:i++ 的逻辑不知道哪里误解了
只看楼主
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
 问题点数:0 回复次数:6 
i++ 的逻辑不知道哪里误解了
程序代码:
    char string[] = " Beware the Jabberwock, \nmy son!";
    int i = 0;
    while( string[i] != '\0')
        if(string[i] != '\n')
        putchar(string[i++]);

书上的例子,讲的是屏幕非格式化输出
在用这段代码,讲解putchar()函数

书中的输出为: Beware the Jabberwock, my son!

但实测试出为:Beware the Jabberwock,

个人理解:当数组中字符为“\n”时,if不执行,所以没有i++,返回到while(),

请问:1,返回之后程序结束了么,这时 \n != '0' 为真  >  执行if,为假 > 返回while() > ...
2,要如何像书中那样输出?应该递增i才对吧, 在if后直接写else i++; 输出了乱码

预谢!  


[此贴子已经被作者于2019-5-5 16:04编辑过]

搜索更多相关主题的帖子: i++ string the while 输出 
2019-05-05 15:40
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
你这个应该是死循环了吧,还有'0'和'\0'意思是不一样滴

char string[] = " Beware the Jabberwock, \nmy son!";
    int i = 0;
    while( string[i] != '\0')
        if(string[i] != '\n')
            putchar(string[i]);
        i++;
2019-05-05 15:58
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
得分:0 
回复 2楼 word123
这个是我打错了,但是除此之外,要如何达到书中输出效果呢?
Beware the Jabberwock, my son!
直接写i++似乎不行啊,还要用个else if 判断么?

我试了下这个,输出正常,请问逻辑正确么?
else if(string[i-1] != '\0')
    i++;


[此贴子已经被作者于2019-5-5 16:10编辑过]

2019-05-05 16:04
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
不行是因为while这里没有打括号,i++跑到while外面去了,所有在写代码的时候,像while,for,if这些的时候最好打个括号方便自己看
char string[] = " Beware the Jabberwock, \nmy son!";
    int i = 0;
    while( string[i] != '\0'){
        if(string[i] != '\n')
            putchar(string[i]);
        i++;
    }

[此贴子已经被作者于2019-5-5 16:32编辑过]

2019-05-05 16:30
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:0 
回复 3楼 bxe
这是个多余代码,就是一定会成立的,因为你已经到i这里了,所有前面都没有遇见'\0',若if没执行,这句一定执行。也可以这样想,若if不执行,则i++必定执行,这不就是我写的那个代码吗,所以你这个else if多余了
else if(string[i-1] != '\0')
    i++;
2019-05-05 16:36
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
得分:0 
回复 5楼 word123
谢谢,这下算是搞明白了!
2019-05-05 16:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
代價風格不好造成的問題。像4樓那樣,按照標準的花括號寫法,自己都能看出哪裏錯了,換言之,一開始寫的時候,就應該把花括號寫全了。

[此贴子已经被作者于2019-5-5 20:51编辑过]


授人以渔,不授人以鱼。
2019-05-05 20:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494557-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135737 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved