2014-06-27 131 views
0

我在Ritchie和kernighan C中遇到以下代碼,用於計數no。話..製表符,空格和空格之間的區別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'都在做同樣的工作。

有人可以解釋我的製表符,空格,空格,空格,換頁和垂直選項卡之間的區別?

+1

提示:C中的製表符,空格和空格用於代碼格式化:-) – dasblinkenlight

+0

VT(垂直製表符)詳細解釋[right here](http://stackoverflow.com/questions/3380538/what-是一個垂直選項卡) – fvu

+0

你不使用標籤...! ;-) @dasblinkenlight – alk

回答

2

空間和標籤有不同的表示在ASCII。 <空間>是0x20,而<標籤>是0x09。當程序檢查當前字符時,需要測試兩種可能性。

另外值得注意的是他們使用的newline字符是'\ n',它是「Line Feed」,是Unix/Linux/BSD的傳統換行符。在Windows上,典型的換行符由「\ r \ n」或CRLF(「回車符」和「換行符」)表示。

我不知道,像「垂直標籤」字符被大量使用。這些「控制角色」中的許多人回到他們習慣於給印刷商指導如何移動頭部的日子。

1

他們有不同的內部代碼和含義。例如,'\t'的內部代碼等於9,而空間' '的內部代碼爲32位,ASCII碼爲EBCDIC,而64爲EBCDIC。某些程序可以用tab替代一些空格。試試下面的代碼

#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; 
} 

上面的代碼會給你一些粗略的想法。

然而,這是很好的檢查條件水平選項卡,同時檢查空間。

相關問題