| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 789 人关注过本帖
标题:久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下是什么 ...
只看楼主 加入收藏
stupidsteve
Rank: 1
来 自:赛博坦星
等 级:新手上路
帖 子:18
专家分:3
注 册:2011-4-8
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:14 
久负盛名的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
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
int c; ==》 char c;

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-08 23:34
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
int c; ==》 char c;

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-04-08 23:43
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
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:5 
程序代码:
root@~ #cat 1.c
#include <stdio.h>

int main (void) {

        char a[80];
        int i,j;
        gets(a);

        for(i=0;a[i]!='\0';i++) {
                if(a[i]==' '&&a[i+1]==' ') {
                        for(j=i+1;a[j]!='\0';j++) {
                                a[j]=a[j+1];
                        }
                i--;
                }
        }
        printf ("%s\n",a);
        return 0;

}

root@~ #./1
a  b             c d e f      h
a b c d e f h
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-08 23:55
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:15 
第一题的问题出在if ((c=getchar())!=' ')这里,应该改为if(c==' ')因为开始c就读入了一个数,现在如果再读就会跳过那个while循环里读的数

我的地盘
2011-04-09 00:04
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:0 
不上改为if(c==' ')是if(c!= ' ')  写错

我的地盘
2011-04-09 00:05
快速回复:久负盛名的K&R C Bible里面练习时出现的问题,希望大家帮忙一起分析下 ...
数据加载中...
 
   



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

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