2012-04-18 29 views
1

一個簡單的代碼是:如何從stdin獲得帶有轉義序列的字符串?

#include <stdio.h> 

int main() { 
    printf("Hello\tworld"); 
    char line[1000]; 
    gets(line); 
    printf("%s\n",line); 
    return 0; 
} 

所以,如果我輸入「你好\ t世界」,它會打印出「你好\ t世界」,而是一個預先定義字符串「Hello \ t世界」將被打印出來:

hello  world 

有什麼辦法讓gets函數知道轉義序列嗎?

+0

當您輸入「你好\t世界」時,你會發生什麼? – Perception 2012-04-18 03:05:38

回答

0

不是我所知道的。您需要手動替換轉義字符序列的occurrances到其對應的字符

2

你得到,當你在標準輸入它存儲爲'\''t'而不是對應的ASCII碼'\t'。爲什麼的輸入「\ t」的您鍵入的內容你不使用std中的\t的「tab-key」嗎?

0

gets函數不會查看任何符號(例如:\ t \ n),只是給出每個輸入的字符的ascii。據我所知,沒有辦法讓它注意到這一點,除了手動替換你關心的那些。 scanf是相同的方式,並會給你同樣的問題。

1

printf上的字符串(「Hello \ tworld」); 它被編譯器轉換爲編譯字符串,其中轉義碼被轉換爲字符,因此printf函數在執行時看不到兩個字符「\ t」字符串,而是單個製表符的等效代碼。但gets()函數在運行時獲取每個輸入字符的字符串,並且不轉換轉義碼。所以如果你想轉換這些轉義碼,你必須做一個替換功能。

相關問題