C 中制表符、空格和空白的区别

问题描述 投票:0回答:4

我在 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'
正在做同样的工作。

有人可以解释一下制表符、空格、空白、空白、换页符和垂直制表符之间的区别吗?

c tabs space
4个回答
3
投票

空格和制表符在 ASCII 中具有不同的表示形式。 是 0x20,而 是 0x09。当程序检查当前字符时,需要测试两种可能性。

还值得注意的是,他们使用的 newline 字符是 ' ',这是“换行符”,Unix/Linux/BSD 的传统换行符。在 Windows 上,典型的换行符由“ " 或 CRLF(“回车”和“换行”)。

我不知道像“垂直制表符”这样的字符用得多。许多“控制字符”可以追溯到它们被用来向打印机提供如何移动打印头的指令的日子。


1
投票

它们有不同的内部代码和含义。例如,

'\t'
的内码等于 9,而空格
' '
在 ASCII 中的内码为 32,在 EBCDIC 中的
64
的内码。有些程序可以用制表符代替一定数量的空格。例如尝试以下代码

#include <stdio.h>

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

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


0
投票

空格和空白具有相同的含义。 垂直(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;
}

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

但是,最好在检查空间的同时检查水平制表符的情况。


0
投票

空白下,所有的东西都来了:

  1. 制表符空格 ( ),
  2. 空格(''),
  3. 换行符 ( ),
  4. 回车(将光标移动到当前行的开头),
  5. 换页(用于打印输出中的分页符),
  6. 垂直制表符(类似于制表符空间,但垂直移动光标)
© www.soinside.com 2019 - 2024. All rights reserved.