标题:制表符和空白符替换有疑惑
只看楼主
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
 问题点数:0 回复次数:2 
制表符和空白符替换有疑惑
练习5-11 修改程序entab和detab,使他们接受一组作为参数的制表符停止位。如果启动程序时不带参数,则使用默认的制表符停止位设置

疑问部分:代码绿色注释部分
程序代码:
Detab.cpp:#include<stdio.h>

[color=#0000FF]#define MAXLINE        100
#define TABINC    8
#define    YES    1
#define NO 0

void settab(int argc, char *arg[], char *tab);
void detab(char *tab);
int tabpos(int pos, char *tab);

int main(int argc, char *argv[])
{
    char tab[MAXLINE + 1];

    settab(argc, argv, tab);
    detab(tab);
    return 0;
}

void detab(char *tab)
{
    int c, pos = 1;

    while((c = getchar()) != EOF)
        if (c == '\t')
        {
            do
                putchar(' ');
            while (tabpos(pos++, tab) != YES);
        }
        else if (c == '\n')
        {
            putchar(c);
            pos = 1;
        }
        else
        {
            putchar(c);
            ++pos;
        }
}

Settab.cpp:
程序代码:
#include<stdlib.h>

#define MAXLINE 100
#define TABINC 8
#define YES        1
#define NO     0

void settab(int argc, char *argv[], char *tab)
{
    int i, pos;

    if (argc <= 1)                       // 这里if语句是没输入参数时默认制表,通过返回YES来确定pos现在的位置
        for (i = 1; i <= MAXLINE; i++)
            if (i % TABINC == 0)
                tab[i] = YES;
            else
                tab[i] = NO;
    else                               // 不明白就是else语句中他是怎么来确认制表长度的,没看懂
    {
        for (i = 1; i <= MAXLINE; i++)
            tab[i] = NO;
        while (--argc > 0)
            pos = atoi(*++argv);
        if (pos > 0 && pos <= MAXLINE)
            tab[pos] = YES;
    }
}

Tabpos.cpp:
程序代码:
#define MAXLINE 100
#define YES        1

int tabpos(int pos, char *tab)
{
    if (pos > MAXLINE)
        return YES;
    else
        return tab[pos];
}


[此贴子已经被作者于2017-5-15 18:18编辑过]

搜索更多相关主题的帖子: tab define void int char 
2017-05-15 18:04
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
这道题好像我没做,因为我做了类似的一道题。

74页,自己看。

[此贴子已经被作者于2017-5-15 19:25编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-15 19:18
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
得分:0 
回复 2楼 renkejun1942
这几个都看懂了。可能看烦躁了
2017-05-15 19:53



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




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

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