2016-08-16 157 views
0
#include <stdio.h> 

int main() { 
    int c; 

    while ((c = getchar()) != EOF) { 
     if (c == '\t') 
      printf("\\t"); 
     else if (c == '\b') 
      printf("\\b"); 
     else if (c == '\\') 
      printf("\\\\"); 
     else 
      putchar(c); 
    } 
    return 0; 
} 

在這種情況下的C編程,任何人都可以解釋這一點嗎?

hi how are you\doing

輸入我得到一個輸出

hi\thow\tare\tyou\\doing

#include <stdio.h> 

int main() { 
    int c; 

    while ((c = getchar()) != EOF) { 
     if (c == '\t') { 
      c = '\b'; 
      printf("\\t"); 
     } 
     if (c == '\b') { 
      c = '\b'; 
      printf("\\b"); 
     } 
     if (c == '\\') { 
      c = '\b'; 
      printf("\\\\"); 
     } 
     putchar(c); 
    } 
    return 0; 
} 

當我運行此程序的輸入

hi how are you\doing 

(大空間是製表符)

我得到這個輸出

hi\t\how\t\are\t\you\doing 

代碼:

#include <stdio.h> 

int main() { 
    int c; 
    c = '\b'; 
    putchar(c); 
    return 0; 
} 

在運行此,我 什麼都沒得到。沒有輸出。回到shell提示符。

更確切地說,在第一個程序我得到我想要的輸出,但在第二個方案,我得到了反斜線後每\t但不是\後,我希望\\\是輸出考慮如何\t成爲\t\,是'\ b'造成的嗎?如果是,它是如何工作的?但如果是這樣,爲什麼第三個程序中不會發生同樣的情況?

對rasbian默認的gcc編譯器和mingw的msys-gcc軟件包進行了修改。

+2

''\ b''是「退格」。所以你什麼也得不到。 –

+0

是的,但在第一次輸出的情況下,我在「\ t」後面得到一個「\」,當它打印出「\\」時,它只是打印「\」 – user6723034

+3

''\\''是一個*轉義* 。通常,單個的'''是*轉義序列*的一部分,例如''\ b''。雙斜線擊敗逃跑,給出一個單一的斜線作爲實際輸出。與'printf'中的'%''類似,通常表示格式規範。如果你真的想要一個百分號,你必須把'「%%」'打敗預期的序列。 –

回答

2

原因第二個節目是表現這種方式是因爲你輸入多個if塊:

if (c == '\t') { 
     c = '\b'; 
     printf("\\t"); 
    } 
    if (c == '\b') { 
     c = '\b'; 
     printf("\\b"); 
    } 
    if (c == '\\') { 
     c = '\b'; 
     printf("\\\\"); 
    } 
    putchar(c); 

當你遇到一個標籤,在進入第一個塊,其中它打印\t到屏幕上,然後c更改爲退格

然後輸入第二個塊,因爲c是退格(因爲您只是將其更改爲)。該塊然後將\b打印到屏幕上,所以現在你在屏幕上有\t\b

當您然後撥打putchar來寫回退格時,b將被下一個字符覆蓋。所以當下一個字符被寫入時,屏幕上會顯示\t\

所以這裏的問題是你多次測試c並可能在兩者之間改變它。這種情況只發生在選項卡上的原因是您首先檢查選項卡,然後選擇退格,然後選擇反斜槓。

如果使用else if而不是if,你會不會進入多個塊:

if (c == '\t') { 
    c = '\b'; 
    printf("\\t"); 
} 
else if (c == '\b') { 
    c = '\b'; 
    printf("\\b"); 
} 
else if (c == '\\') { 
    c = '\b'; 
    printf("\\\\"); 
} 
putchar(c); 

隨着這一變化,因爲原來的輸入,輸出將是:

hi\how\are\you\doing 
+0

謝謝你,那太棒了!我現在終於可以睡了。 – user6723034

相關問題