版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言中換行符與回車符的區(qū)別能不能說“換行符就是輸入完一行內(nèi)容后,光標(biāo)轉(zhuǎn)到下一行的起始位置”,而“回車符就是輸入完一行后光標(biāo)轉(zhuǎn)到該行的起始位置,其并不換行”?如果是,那我們平時在鍵盤上用的 Enter 和 Tab 又屬于什么符呢?你說的沒錯,換行(n)就是光標(biāo)下移一行卻不會移到這一行的開頭,回車(r)就是回到當(dāng)前行的開頭卻不向下移一行.Enter鍵按下后會執(zhí)行nr這樣就是我們看到的一般意義的回車了,所以你用16進(jìn)制文件查看方式看一個文本,就會在行尾發(fā)現(xiàn)nrTab是制表符,就是t,作用是預(yù)留8個字符的顯示寬度,用于對齊。在計(jì)算機(jī)還沒有出現(xiàn)之前,有一種叫做電傳打字機(jī)(Teletype Model
2、33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結(jié)束的字符。一個叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來歷,從它們的英語名字上也可以看出一二。后來,計(jì)算機(jī)發(fā)明了,這兩個概念也就被般到了計(jì)算機(jī)上。那時,存儲器很貴,一些科學(xué)家認(rèn)為在每行結(jié)尾加兩個字符太浪費(fèi)了,加一個就可以。于是,就出現(xiàn)了分歧。 Unix系統(tǒng)里,每行結(jié)尾只有“”,即
3、“n”;Windows系統(tǒng)里面,每行結(jié)尾是“”,即“nr”;Mac系統(tǒng)里,每行結(jié)尾是“”。一個直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結(jié)尾可能會多出一個M符號。 在ascii中,回車和換行是不同的字符。0x0A是回車,即光標(biāo)移動到本行的最左面; 0x0D是換行,即光標(biāo)移動到下一行。 在dos窗口中按回車鍵,其實(shí)是輸入了兩個字符0x0A,0x0D,對應(yīng)到c中,就是r(回車)n(換行) 在C語言中 將 n 存入文件 window: 0d 0a unix: 0d 如果不存到文件中,不會變。
4、如果從文件中提取, windows: 0d 0a - n unix : 0d - n回車鍵,即鍵盤上的ENTER鍵,是一個比較有用的鍵,在文字編輯時,回車鍵的作用是換行,在輸入網(wǎng)址時回車鍵的作用是“轉(zhuǎn)到”,在執(zhí)行DOS命令時,回車鍵的作用是執(zhí)行 在標(biāo)準(zhǔn)鍵盤上,回車鍵一共有2個,一個在主鍵盤區(qū)的右邊,Shift鍵的上面,一個在小鍵盤的右下角,加號鍵的下面。 回車鍵的歷史 關(guān)于“回車鍵”的來歷,還得從機(jī)械的英文打字機(jī)說起。在打字機(jī)上,有一個部件叫“字車”,每輸入一個單詞,“字車”就前進(jìn)一格。當(dāng)輸滿一行后,使用者就要推動“字車”到起始位置,這時打字機(jī)會有兩個動作:“字車”歸位、滾筒上卷一行(相當(dāng)于“
5、字車”下移一行),以便開始輸入下一行,這中推動“字車”的動作叫“回車”。后來,在電動的打字機(jī)上,人們增加了一個直接起“回車”作用的鍵。他被稱為“回車鍵”。 在現(xiàn)今的電腦鍵盤上,“回車鍵”上曾使用過“CR”、“RETURN”的字樣,后來才統(tǒng)一確定為“Enter”。 回車的ASCII代碼 16進(jìn)制是“0x0d” 10進(jìn)制是“13” 在某些語言中可以用r表示。如果用過機(jī)械打字機(jī),就知道回車和換行的區(qū)別了。 換行就是把滾筒卷一格,不改變水平位置。 回車就是把水平位置復(fù)位,不卷動滾筒。 但是我們平時按得Enter到底是回車還是換行,不太清楚? 看到一種說法:windows下enter是 nr,unix下
6、是n,mac下是r 在MS的系統(tǒng)中純文本格式按一個回車鍵是輸入了兩個字符,一個回車一個換行。在LINUX系統(tǒng)中則只是一個回車。 /以上內(nèi)容參考了/t/23/.html#和/t/09/.html的討論 還有在編程時文件操作 wb(二進(jìn)制方式)或者wt(文本方式)也會有影響。我做了個實(shí)驗(yàn)(實(shí)驗(yàn)用.net2003) 在01.txt文件中輸入12然后enter,在ultraedit中看到的二進(jìn)制是31 32 0d 0a 然后程序如下: int mian() FILE *fp1,*fp2,*fp3,*fp4,*fp5,*fp
7、6; char a10; char b10; fp1 = fopen(01.txt,r); fp3 = fopen(02.txt,w); fread(a,sizeof(unsigned char),8,fp1); /a里是31 32 0a fwrite(a,sizeof(unsigned char),8,fp3); /02.txt里是31 32 0d 0a ,原因是輸入的情況下,換行回車轉(zhuǎn)換成換行,然后輸出時換行又會轉(zhuǎn)成換行回車 fclose(fp1); fclose(fp3); fp2 = fopen(01.txt,rb); fp4 = fopen(03.txt,wb); fread(b,s
8、izeof(unsigned char),8,fp2); /b里是31 32 0d 0a fwrite(b,sizeof(unsigned char),8,fp4); /03.txt里是31 32 0d 0a ,原因是二進(jìn)制情況下回車和換行的(類似文本方式的那種轉(zhuǎn)換)是不存在的 fclose(fp2); fclose(fp4); return 0; 好像結(jié)論是這樣的:讀的方式下,在文本方式下,enter是0x0a;在二進(jìn)制方式下,enter是0x0d,0x0a。 MSDN中查到這樣的話:Also, in text mode, carriage returnlinefeed combinatio
9、ns are translated into single linefeeds on input, and linefeed characters are translated to carriage returnlinefeed combinations on output. (輸入的情況下,換行回車轉(zhuǎn)換成換行,然后輸出時換行又會轉(zhuǎn)成換行回車)When a Unicode stream-I/O function operates in text mode (the default), the source or destination stream is assumed to be a se
10、quence of multibyte characters. Therefore, the Unicode stream-input functions convert multibyte characters to wide characters. For the same reason, the Unicode stream-output functions convert wide characters to multibyte characters. Open in binary (untranslated) mode; translations involving carriage
11、-return and linefeed characters are suppressed. (二進(jìn)制情況下回車和換行的轉(zhuǎn)換是不存在的). 再引用一篇:/question/.html?fr=qrl3 軟硬回車 硬回車就是普通我們按回車產(chǎn)生的,它在換行的同時也起著段落分隔的作用。 軟回車是用 Shift + Enter 產(chǎn)生的,它換行,但是并不換段,即前后兩段文字在 Word 中屬于同一“段”。在應(yīng)用格式時你會體會到這一點(diǎn)。 切換: 編輯替換,點(diǎn)擊高級,在“查找內(nèi)容”點(diǎn)入“特殊字符”中的手動換行符,再在“替換為”中點(diǎn)入“特殊字符”中的段落標(biāo)記,最后點(diǎn)
12、擊全部替換。 鍵盤上只有一種回車鍵Enter,但卻有兩種不同性質(zhì)的換行標(biāo)記,不能不說是一個奇跡。 我們常用的回車是硬回車,就是在word中敲擊Enter鍵產(chǎn)生的那個彎曲的小箭頭,占兩個字節(jié)。這種回車可以有效地把段落標(biāo)記出來分清楚。在兩個硬回車之間的文字自成一個段落,可以對它單獨(dú)設(shè)置段落標(biāo)記而不用擔(dān)心其他段落受到影響。這也是我們習(xí)慣用硬回車的原因:排版方便。 但是硬回車也給我們帶來了麻煩。你如果是網(wǎng)頁設(shè)計(jì)者,或者是論壇游俠,一定有這樣的經(jīng)歷:當(dāng)你打算換行時,換出的行卻實(shí)在不能恭維,行間距太大了!其實(shí)這和硬回車的原理是一樣的,只不過在word等文本編輯器中沒有顯示出它的“本來面目”。不過這樣的排版
13、的確造成了不小的困難,這時我們就得請出硬回車的兄弟:軟回車。 軟回車只占一個字節(jié),在word中是一個向下的箭頭。如果你從很復(fù)雜的網(wǎng)頁中向word中復(fù)制過文字的話,對它一定不會陌生。但是想在word中直接輸入軟回車可不是那么容易的。因?yàn)檐浕剀嚥皇钦嬲亩温錁?biāo)記,它只是另起了一行,不是分段。所以它不是很利于文字排版,因?yàn)樗鼰o法作為單獨(dú)的一段被賦予特殊的格式。但是盡管如此,它在網(wǎng)頁設(shè)計(jì)中還是具有舉足輕重的地位的。 軟回車能使前后兩行的行間距大幅度縮小,因?yàn)樗皇嵌温錁?biāo)記,要和法定的段落標(biāo)記硬回車區(qū)別出來。硬回車的html代碼是.,段落的內(nèi)容就夾在里面,而軟回車的代碼很精悍:。因此在網(wǎng)頁中想用到軟回車
14、,只需切換到代碼頁面,鍵入軟回車的代碼即可。 下面我講一下不同編輯器文字互相拷貝時回車的轉(zhuǎn)化情況。 地球人都知道的,網(wǎng)頁的文字如果復(fù)制到word中,則硬回車變?yōu)閺澢募^,軟回車變?yōu)橄蛳碌募^。結(jié)果造成習(xí)慣用word編輯文本的朋友很不習(xí)慣很不舒服的情況。 word中的文本復(fù)制到網(wǎng)頁中也是同樣的道理??梢哉fword和網(wǎng)頁比較兼容的,要不怎么會有“保存為web頁”這種選項(xiàng)呢? 記事本也是大家摸的比較多的編輯器。但是近年來隨著社會發(fā)展外加記事本的種種弊端,許多人都將其打入冷宮。對此我只能表示遺憾,因?yàn)橛浭卤颈旧淼墓δ懿回S富就是別的編輯器所取代不了的優(yōu)點(diǎn)。大家再次將網(wǎng)頁的文字復(fù)制時,不妨粘貼到記事本里
15、試試。哈哈,不管網(wǎng)頁設(shè)計(jì)者用的是什么回車,現(xiàn)在都變成一種回車了!怎么,你不信?那就看看吧:軟回車變成了普通的回車,硬回車變成了兩個普通的回車。你再從記事本里復(fù)制文字到word,記事本里的回車無一例外全都變成了硬回車!你再再從記事本里復(fù)制文字到網(wǎng)頁編輯器,所有回車就都變成軟回車了!n是換行,英文是linefeed,ASCII碼是0xA。 r是回車,英文是carriage return ,ASCII碼是0xD。-回車的傳說-兼談nr區(qū)別(轉(zhuǎn)載)IT文摘2010-08-31 11:40:24閱讀86評論0 字號:中訂閱如果你有在windows下編程的經(jīng)驗(yàn)就會發(fā)現(xiàn)windows下敲下回車鍵會產(chǎn)生兩個字
16、符CR和LF,用16進(jìn)制編輯器打開windows下的文本文件也會看到換行是0D和0A表示的,也就是CR和LF的ASCII編碼。而在UNIX類系統(tǒng)中換行只有一個字符LF,所以UNIX中的文本文件在windows中用記事本打開會出現(xiàn)不可解析字符且丟失換行格式,所有字符連成一行。因?yàn)閣indows下的記事本讀到LF時不知道這就是換行(只有CR和LF連續(xù)出現(xiàn)才能解釋為換行),于是當(dāng)作不可打印字符處理,就是一個黑色方框。CR和LF分別表示“回車”(carriage return)和“換行”(line feed),ASCII編碼為13和10,在C語言中用r和n表示。為什么windows下要用兩個字符表示換
17、行?這就是今天要講的故事:回車的傳說在計(jì)算機(jī)剛剛誕生之時,廣泛使用Teletype公司制造的一種古老的終端(console terminal)電傳打字機(jī)ASR33。ASR33每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,打印頭從行尾移到行首再下移一行要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失,那時可沒有緩沖區(qū)暫存。Teletype的研究人員想了個辦法解決這個問題,就是在每行后面加兩個表示結(jié)束的字符。一個叫做“回車”,告訴打字機(jī)把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機(jī)把紙向下移一行。這就是“換行”和“回車”的來
18、歷,從它們的英語名字上也可以看出一二。( 1968年蓋茨在湖濱中學(xué)玩的就是這種機(jī)器,他們通過這種終端編寫B(tài)ASIC程序。因?yàn)?ASR 33只使用大寫字母,所以BASIC程序以大寫字母為主)后來,計(jì)算機(jī)的史前時代結(jié)束了,小型機(jī)誕生了,現(xiàn)代文明的鍵盤也發(fā)明了,但回車和換行的概念仍被保留下來。一些計(jì)算機(jī)設(shè)計(jì)者認(rèn)為在每行結(jié)尾加兩個字符太浪費(fèi)也沒有必要了,加一個就可以。于是就出現(xiàn)了分歧。Unix系統(tǒng)里使用表示換行,每行結(jié)尾只有一個換行符n,MSDOS和Windows系統(tǒng)里面每行結(jié)尾是()即rn,Apple的Mac系統(tǒng)里每行結(jié)尾是()即r。一個直接后果是,Unix/Mac系統(tǒng)下的文件在Windows里打開
19、的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,某些文本編輯器可能在每行的結(jié)尾會多出一個M符號。本人覺得用兩個字符表示換行實(shí)在有些畫蛇添足,但是在網(wǎng)絡(luò)的世界里這一現(xiàn)象卻大量存在,不少網(wǎng)絡(luò)協(xié)議規(guī)定報文必須使用CR-LF換行模式。你怎么看呢?前不久在CU的論壇對這一問題進(jìn)行了討論:/thread-1-1.html這個和編程有關(guān)系嗎?有的,但是在標(biāo)準(zhǔn)C里通常情況下是體會不到的,標(biāo)準(zhǔn)C的流提供系統(tǒng)無關(guān)抽象層??梢栽趙indows系統(tǒng)中進(jìn)行一下實(shí)驗(yàn):程序一:-#include int main(void)int i;FILE
20、 *fp;if(fp=fopen(test.txt,w) = NULL) fprintf(stderr,open file errorn);return 1;for(i=0;i100;i+)fprintf(fp,testn);fclose(fp);return 0;程序二:-#include int main(void)int i;FILE *fp;if(fp=fopen(test.bin,wb) = NULL) fprintf(stderr,open file errorn);return 1;for(i=0;i100;i+)fprintf(fp,testn);fclose(fp);retu
21、rn 0;-程序一輸出文件大小是600字節(jié),程序二輸出文件大小是500字節(jié),用記事本打開程序一的輸出沒有什么問題,每行一個test,打開程序二的輸出發(fā)現(xiàn)所有的test連成一行,test之間是一個黑色方框符號分隔。用UltraEdit-32以16進(jìn)制編輯模式打開test.bin可以查看到黑色方框符號就是0A也就是n,打開test.txt則會發(fā)現(xiàn)換行是rn,這就是兩個文件大小相差100字節(jié)的原因。Unix類系統(tǒng)用戶打開windows中的文件就會遇到這種苦惱。為什么會有這種區(qū)別呢?畢竟是源自Unix系統(tǒng),C語言中使用n表示換行,而在實(shí)際的文件中換行符號需要同操作系統(tǒng)一致,所以當(dāng)我們在C中使用fopen打開一個文本文件時流實(shí)現(xiàn)了實(shí)際換行符與C中n之間的轉(zhuǎn)換。在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:兼容視聽障礙的VR博物館時空導(dǎo)覽與審美補(bǔ)償研究
- 基于區(qū)塊鏈技術(shù)的2025年物流追蹤系統(tǒng)開發(fā)合同3篇
- 2025年度漁船買賣合同(含漁民福利保障)4篇
- 2025年度個人與金融機(jī)構(gòu)客戶信息保密及合規(guī)管理協(xié)議4篇
- 二零二五版林業(yè)資源保護(hù)與木材采購合作協(xié)議4篇
- 二零二五年度出差人員差旅費(fèi)用結(jié)算與報銷合同4篇
- WPS格式2024年度建筑工程施工合作合同一
- 退房時2025年度物業(yè)管理費(fèi)結(jié)算協(xié)議3篇
- 二零二五年度充電樁充電接口標(biāo)準(zhǔn)制定合同3篇
- 2025年度無人機(jī)配送司機(jī)合作協(xié)議范本
- 2025-2030年中國草莓市場競爭格局及發(fā)展趨勢分析報告
- 華為智慧園區(qū)解決方案介紹
- 奕成玻璃基板先進(jìn)封裝中試線項(xiàng)目環(huán)評報告表
- 廣西壯族自治區(qū)房屋建筑和市政基礎(chǔ)設(shè)施全過程工程咨詢服務(wù)招標(biāo)文件范本(2020年版)修訂版
- 人教版八年級英語上冊期末專項(xiàng)復(fù)習(xí)-完形填空和閱讀理解(含答案)
- 2024新版有限空間作業(yè)安全大培訓(xùn)
- GB/T 44304-2024精細(xì)陶瓷室溫?cái)嗔炎枇υ囼?yàn)方法壓痕(IF)法
- 年度董事會工作計(jì)劃
- 《退休不褪色余熱亦生輝》學(xué)校退休教師歡送會
- 02R112拱頂油罐圖集
- 2021年新教材重慶生物高考真題(含答案解析)
評論
0/150
提交評論