| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下是什么 ...
取消只看楼主 加入收藏
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:7 
久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下是什么原因!
菜鸟一枚,最近在读K&R C Bible

自己尝试着编写了下第一章的几个练习,最后发现出现了问题,百思不得其解,希望大家能够帮助下看看是什么问题:

Q1:编写一个程序,将输入的信息在屏幕上输出,并将连续的多个空格转换成一个空格输出。eg: 1234    5678===>1234 5678

我的code:

#include <stdio.h>
#include <stdlib.h>
#define OUT 0
#define IN 1
main()
{
    int c, state;

    state=IN;
   
    printf("This is a minyfunction designed to omit blanks you typed in into one blank\n");
    printf("Please type in 'Control + Z ' in a new line when you have finished typing\n");
   
   
    while ((c=getchar())!=EOF)
    {
        
        if ((c=getchar())!=' ')
        {
            if (state==OUT)
            {
                 printf(" ");
                state=IN;
                putchar(c);
            }
            else putchar(c);
        }
        else state=OUT;
    }
    system("Pause");

}

按照方框图,逻辑上应该没有问题,测试中多个空格的合并也成功了,只是其他的字符会二缺一,即:1234    5678==>24 78
反复思考,也没有找出是什么原因。。。希望大家能够帮我这个菜鸟分析下究竟是什么原因。。。


Q2:编写程序,将输入的信息在键盘上输出,把其中的空格用“b”替换,缩进(TAB)用“\t”替换,斜杠(\)用“\\”替换。

我的code:

#include <stdio.h>

main()
{
    int c;

    while ((c=getchar()!=EOF))
    {
        if (c==' ')
        {
            printf("\\n");
        }
        else if (c=='\t')
        {
            printf("\\t");
        }
        else if (c=='\n')
        {
            printf("\\n");
        }
        else if (c=='\\')
        {
            printf("\\");
        }
        else
        putchar(c);
    }

    system("Pause");
}

依旧按照逻辑框图应该没有问题,但是测试的时候,发现输出统统变成了笑脸符号。。。(测试环境VC2010),但是从笑脸符号的个数来看,如果对应着正确字符的话,貌似程序是正确的,希望大家能够帮助分析下这是什么原因。。。菜鸟遁地。。。
搜索更多相关主题的帖子: blank 
2011-04-08 22:42
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
通宵等待帮助。。。嗯,今天不搞明白就不睡觉了。。。继续读
ps, 的确是好书

How can we win, when fools can be kings?
2011-04-08 22:45
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
在线等。。。希望好心的高手帮忙指点下

How can we win, when fools can be kings?
2011-04-08 23:27
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 4楼 ansic
谢谢前辈的回复,可是刚刚更换过下试了试,发现还是不行啊。。。

而且K&R前面的例子中也多次使用了int c来实现getchar() putchar()的输入输出,也没有什么问题啊。。。

想不通。。。郁闷

How can we win, when fools can be kings?
2011-04-08 23:45
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 5楼 vandychan
斑竹大人。。。我试过把c定义为char了,还是不行啊。。。第一个程序依然少字符,第二个依然笑脸。。。

而且书里面也有用int c来实现getchar() putchar()的例子呀。。。

继续求帮助,自己太菜鸟了。。。

How can we win, when fools can be kings?
2011-04-08 23:54
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 9楼 hnuhsg1226
嗯!刚刚也发现了的确每个loop都进行了两次扫描导致第一次的数据丢失了!~

谢谢hnuhsg1226!

How can we win, when fools can be kings?
2011-04-09 00:06
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 8楼 ansic
谢谢ansic啦~
不过这个练习之前都还没有提到array的用法。。。所以我觉得单纯通过int一定也可以实现的~

能麻烦您帮我检查下我的代码到底哪里出了问题了吗?或者说出现笑脸是怎么回事呀。。。

谢谢啦!

How can we win, when fools can be kings?
2011-04-09 00:09
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
收藏
得分:0 
回复 13楼 hnuhsg1226
太感谢了!

果然是自己的typo错误。。。好尴尬啊。。。

感谢hnuhsg1226!

How can we win, when fools can be kings?
2011-04-09 00:28
快速回复:久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下 ...
数据加载中...
 
   



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

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