C中制表符,空格和空格之间的区别

时间:2014-06-27 16:08:25

标签: c tabs space

我在Ritchie和kernighan C中遇到了以下代码,因为我没有计算。单词..

#include<stdio.h>
#define IN 1
#define OUT 0
main()
{
    int c,n1,nw,nc,state;
    state = OUT;
    n1 =nw = nc = 0;
    while((c = getchar())!=EOF)
    {
        ++nc;
        if(c == '\n')
            ++n1;
        if(c == ' '||c == '\n' ||c == '\t')
            state = OUT;
        else if(state == OUT)
        {
            state = IN;
            ++nw;
        }
    }

    printf("%d %d %d\n",n1,nw,nc);
}

我猜这里c == ' 'c == '\t'正在做同样的工作。

有人可以解释一下标签,空格,空白,空白,换页和垂直标签之间的区别吗?

3 个答案:

答案 0 :(得分:2)

空格和标签在ASCII中有不同的表示形式。 &lt;空&GT;是0x20,而&lt; tab&gt;是0x09。当程序检查当前字符时,需要测试两种可能性。

另外值得注意的是,他们使用的newline字符是'\ n',这是“Line Feed”,Unix / Linux / BSD的传统换行符。在Windows上,典型的换行符由“\ r \ n”或CRLF(“回车符”和“换行符”)表示。

我不知道像“垂直标签”这样的字符使用得太多了。许多“控制角色”可以追溯到他们习惯于给打印机提供如何移动头部的指示。

答案 1 :(得分:1)

他们有不同的内部代码和含义。例如,'\t'的内部代码等于9,而空格' '的内部代码为32,而EBCDIC为64。有些程序可以用tab替换一些空格。试试以下代码

#include <stdio.h>

int main()
{
    printf( "From here" " " "to here\n" );
    printf( "From here" "\t" "to here\n" );
}

并比较两次printf调用的输出。

答案 2 :(得分:0)

Space和whitespace都有相同的含义。 垂直(dec 11)和水平(dec 9)标签描绘了它们的含义。这些是文件格式化时使用最多的字符。请考虑以下代码。

#include<stdio.h>

int main()
{
 int i =0;
 int a[] = {97,32,98,9,65,10,66,11,67};
 while(i<9)
 printf("%c",a[i++]);
 return 0;
}

上面的代码会给你一些粗略的想法。

但是,检查空间时检查水平标签的条件是好的。