當前位置:首頁 » 編程語言 » c語言中b和r都怎麼用啊
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中b和r都怎麼用啊

發布時間: 2023-05-29 15:01:54

c語言中,再對文件的操作模式中,a和a+、w和w+、r和r+有什麼區別

  1. r 打開只讀文件,該文件必須存在。r+ 打開可讀寫的文件,該文件必須存在。

  2. w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。

  3. a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾後,即文件原先的內容會被保留。

Ⅱ C語言文件中,「rb」和「r」有什麼區別

一、作用不同

1、rb:代表二進制文件,用來讀寫二進制文件。

2、r:代表文本文件,用來讀寫文本文件。

二、特點不同

1、rb:文件編碼是變長的,靈活利用率要高,而解碼要難一些,不同的二進制文件解碼方式是不同的。

2、r:是一種典型的順序文件,其文件的邏輯結構又屬於流式文件。


三、優劣不同

1、rb:二進制文件比較節約空間,這兩者儲存字元型數據時並沒有差別。但是在儲存數字,特別是實型數字時,二進制更節省空間。

2、r:文本文件存在於計算機系統中,通常在文本文件最後一行放置文件結束標志。文本文件的編碼基於字元定長,解碼相對要容易一些。


Ⅲ C語言中\r與\b 輸出結果的怎麼一樣的

是這樣的,
\r是回車,表示把輸入游標移到本行開頭。
\n是換行,租段做表示把輸入燃數游標移到下一行。
\b表示退格,刪除前一個字元
所以那個e不是被刪除了,而是被Press any key to continue給覆蓋了
printf("%c\n%c\n%c\r\n",c,d,t);這樣就能輸出t了
ps:一般我們按得弊衡回車鍵是兩個字元:回車+換行(ASCII碼13,10)

Ⅳ C語言中,編程用到r w rb wb r+等的時候怎麼分辨是用r呢還是用rb,怎麼區分是二

文件打開方式
r-read讀
w-write寫
a-在文件末尾追加數據
b-bite二進制文件
t-text文本文件
r+讀寫
w+寫讀
其他的只要把這些組合在一起就行了
好比rt rb wt wb rb+
而如at+可以這樣記 a-在文件末尾追加數據 +(寫的反面是讀)
所以at+表示 打開一個文本文件,允許讀或者在文件末尾追加數據

Ⅳ C語言中\b和\r都怎麼用

\r表示回車森伍高此尺
\b表示空格
用於printf函數。

比如
printf("測試內容\r\b");輸出結果就會出現橘態空格和回車

Ⅵ C語言中 freopen("b.txt","r",stdin);是用來幹嘛的啊為什麼有的地方是「r」,有的是「w」!!

函數名: freopen
功 能: 替換一個流,或者說重新分配文件指針,實現重定向。
用 法: FILE *freopen(char *filename, char *type, FILE *stream);
是文件流的東西
參數灶悉1:filename 為文件名,就是你要為stream該指針定義襪塵的新文件
參數2:告辯禪*type為指針類型,最基本的有r只讀(文件不存在則返回NULL),w只寫(不存在則自動新建,存在會清空源文件),a追加(存在則會指向添加到源文件的最後面,不存在返回NULL).
參數3:則為文件指針,就是之前定義過的指針修改為新的指針用的。

Ⅶ c語言中wb,rb是什麼意思

wb代表二進制模式文件,允許寫入文件,rb代表二進制模式,允許讀取文件。

形態字元串都可以再加一個 b 字元,如 rb、w+b 或 ab+ 等組合,加入 b 字元用來告訴函數庫以二進制模式打開文件。

如果不加 b,表示默認加了 t,即 rt、wt,其中 t 表示以文本模式打開文件。由 fopen() 所建立的新文件會具有 S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666) 許可權,此文件許可權也會參考umask值。

(7)c語言中b和r都怎麼用啊擴展閱讀

C語言之文件打開模式

r : 讀取文件,若文件不存在則會報錯

w: 寫入文件,若文件不存在則會先創建再寫入,會覆蓋原文件

a : 寫入文件,若文件不存在則會先創建再寫入,但不會覆蓋原文件,而是追加在文件末尾

rb,wb:分別於r,w類似,但是用於讀寫二進制文件

r+ : 可讀、可寫,文件不存在也會報錯,寫操作時會覆蓋

w+ : 可讀,可寫,文件不存在先創建,會覆蓋

a+ :可讀、可寫,文件不存在先創建,不會覆蓋,追加在末尾

Ⅷ C語言的轉義字元/r到底是怎麼用的

\r作用是將游標移動到行首,接下來輸出的字元將覆蓋行首的字元。
\n的作用才是將游標移動到下一行。

Ⅸ c語言中 \t \b \n \r , \後面的t b n r 分別是什麼英文的縮寫b是back嗎

TAB製表符

BACKSPACE退格符

NewLine換行符(本意:換一個新行,但列位置不變)

Return回車符(本意:行位置不變,將列位置切換到本行首)

不過現在 含義與本意有些變化了,在linux下, 的含義等於window下的

===========================================================

下面說nextline的兄弟,不知道是自己胡謅的,還是老師教錯了。完整的列表給大家寫一下:

十進制編碼 (對應)縮寫字元(或功能/解釋)
0 NUL(null) 空字元
1 SOH(start of headline) 標題開始
2 STX (start of text) 正文開始
3 ETX(end of text) 正文結束
4  EOT (end of transmission) 傳輸結束
5  ENQ (enquiry) 請求
6  ACK (acknowledge) 收到通知
7  BEL (bell) 響鈴
8  BS (backspace) 退格
9 HT (horizontal tab) 水平製表符
10 LF (NL line feed, new line) 換行鍵
11 VT (vertical tab) 垂直製表符
12 FF (NP form feed, new page) 換頁鍵
13 CR (carriage return) 回車鍵
14 SO (shift out) 不用切換
15 SI (shift in) 啟用切換
16 DLE (data link escape) 數據鏈路轉義 
17 DC1 (device control 1) 設備控制1
18 DC2 (device control 2) 設備控制2
19 DC3 (device control 3) 設備控制3
20 DC4 (device control 4) 設備控制4
21 NAK (negative acknowledge) 拒絕接收
22 SYN (synchronous idle) 同步空閑 
23  ETB (end of trans. block) 傳輸塊結束
24  CAN (cancel) 取消
25  EM (end of medium) 介質中斷
26  SUB (substitute) 替補
27  ESC (escape) 換碼(溢出)
28  FS (file separator) 文件分割符
29  GS (group separator) 分組符
30  RS (record separator) 記錄分離符
31  US (unit separator) 單元分隔符

Ⅹ C語言中\r的用法

bioskey(1)檢測是否有鍵按下,沒有鍵按下時返回0,有鍵按下時返回按鍵碼(任何按鍵碼都不為0),但此時並不將檢測到的按鍵碼從鍵盤緩沖隊列中清除.
bioskey(0)返回鍵盤緩沖隊列中的按鍵碼,並將此按鍵碼從鍵盤緩沖隊列中清除.
bioskey(2)返回按鍵的狀態(如組合鍵等),返回的整數中的每一個位含義如下:

┌——┬———————————┬———————————┐
│ 位 |為0時意義 │為1時意義 │
├——┼———————————┼———————————┤
│ 7 │插入狀態 │改寫狀態 │
│ 6 │大寫狀態 │小寫狀態 │
│ 5 │數字狀態,NumLock燈亮│游標狀態,NumLock燈熄 │
│ 4 │ScrollLock燈亮 │ScrollLock燈熄 │
│ 3 │Alt按下 │Alt未按下 │
│ 2 │Ctrl按下 │Ctrl未按下 │
│ 1 │左Shift按下 │左Shift未按下 │
│ 0 │右Shift按下 │右Shift未按下 │
└——┴———————————┴———————————┘

這些都是從 C函數速查 中找的,大家可以從網上搜一下.bioskey()是返回鍵盤狀態的基本函數,它擁有3個參數
函數原型為:

int bioskey(int cmd)

其中cmd有3個參數:0,1,2

各參數的用法為:

當cmd是0,bioskey()返回下一個在鍵盤鍵入的值(它將等待到按下一個鍵)。它返回一個16位的二進制數,包括兩個不同的值。當按下一個普通鍵時,它的低8位數存放該字元的ASCII碼;對於特殊鍵(如方向鍵、F1~F12等等),低8位為0,高8位位元組存放該鍵的掃描碼。
cmd = 1:
當cmd是1,bioskey()查詢是否按下一個鍵,若按下一個鍵則返回非零值,否則返回0。
cmd = 2:
當cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert鍵的狀態。各鍵狀態存放在返回值的低8位位元組中。
位元組位 含義
0 右邊Shift鍵狀態
1 左邊Shift鍵狀態
3 Ctrl鍵狀態
4 Alt鍵狀態
5 ScrollLock鍵狀態
6 NumLock鍵狀態
7 CapsLock鍵狀態
8 Insert鍵狀態bioskey函數
函數原型: int bioskey(int cmd);
函數功能:
利用函數bioskey可以實現三種功能,參數cmd為要實現的功能號,值只能為0、1、2,具
體含義如下:
0:在系統中有一個按鍵隊列,所有的鍵盤按鍵都在這里排成隊。該功能就是如果按鍵隊
列中有按鍵,那麼讀取隊列首位的按鍵,並返回按鍵值;否則等待鍵盤按鍵出現。(其
中按鍵值的高位元組為掃描碼,低位元組為ASCII碼)
1:如果按鍵隊列中沒有按鍵,那麼返回零,否則返回非零。
2:返回特殊按鍵Shift、Ctrl、Alt等鍵的按鍵狀態
bioskey函數用於從內存中讀取一個按鍵的scancode值.
格式是: int bioskey(int cmd)
參數cmd取值:
0: 讀取scancode,並從內存中刪除,如果沒有按鍵則等待.
1: 讀取scancode,但不從內存中刪除(其它函數可以繼續使用),如果無按鍵則返回0
2: 返加shift alt ctrl鍵的狀態
按下shift返回1,按下ctrl返回4,按下alt返回8,
如果是 shift+ctrl 則返回5(相加),依此類推....下面是一個例子:
#include <bios.h>
main()
{
while(!kbhit())
{
printf("\n%d,%d",bioskey(0),bioskey(2));
}
}
注意:這是一個死循環,因為參數0表示接收按鍵碼,但將其清除,所以kbhit()函數就接收不到按鍵了.
可按ctrl+break組合鍵來終止這個程序.然後將 bioskey(0)改為 bioskey(1),
如果不按鍵將顯示0,若按鍵則立即結束

函數名: bioskey
功 能: 直接使用BIOS服務的鍵盤介面
函數原型:int bioskey (int cmd)
說明:bioskey()的函數原型在bios.h中
bioskey()完成直接鍵盤操作,cmd的值決定執行什麼操作。
cmd = 0:
當cmd是0,bioskey()返回下一個在鍵盤鍵入的值(它將等待到按下一個鍵)。它返回一個16位的二進制數,包括兩個不同的值。當按下一個普通鍵時,它的低8位數存放該字元的ASCII碼;對於特殊鍵(如方向鍵、F1~F12等等),低8位為0,高8位位元組存放該鍵的掃描碼。
cmd = 1:
當cmd是1,bioskey()查詢是否按下一個鍵,若按下一個鍵則返回非零值,否則返回0。
cmd = 2:
當cmd是2,bioskey()返回Shift、Ctrl、Alt、ScrollLock、NumLock、CapsLock、Insert鍵的狀態。各鍵狀態存放在返回值的低8位位元組中。

位元組位 含義
0 右邊Shift鍵狀態
1 左邊Shift鍵狀態
3 Ctrl鍵狀態
4 Alt鍵狀態
5 ScrollLock鍵狀態
6 NumLock鍵狀態
7 CapsLock鍵狀態
8 Insert鍵狀態

位元組位為1表示該鍵被按下,為0表示松開。
程序例:

#include <stdio.h>
#include <bios.h>
#include <ctype.h>

#define RIGHT 0x01
#define LEFT 0x02
#define CTRL 0x04
#define ALT 0x08

int main(void)
{
int key, modifiers;

/* function 1 returns 0 until a key is pressed */
while (bioskey(1) == 0);

/* function 0 returns the key that is waiting */
key = bioskey(0);

/* use function 2 to determine if shift keys were used */
modifiers = bioskey(2);
if (modifiers)
{
printf("[");
if (modifiers & RIGHT) printf("RIGHT");
if (modifiers & LEFT) printf("LEFT");
if (modifiers & CTRL) printf("CTRL");
if (modifiers & ALT) printf("ALT");
printf("]");
}
/* print out the character read */
if (isalnum(key & 0xFF))
printf("'%c'\n", key);
else
printf("%#02x\n", key);
return 0;
}

bioskey 返回的值有兩種情況。
就 ASCII 而言:按一個按鍵會有兩種情況發生。
1.按一個按鍵,產生一個ASCII,這樣 bioskey 返回的值就是:hi:掃描碼,lo:ASCII
2.按一個按鍵,產生兩個ASCII,一個是0,另一個是每個鍵不同的ASCII, bioskey 的返回值就是:hi:ASCII, lo:0
有很多鍵沒有ASCII,例如Shift, Ctrl, CapsLock 等,但是他們有掃描碼,只要是按鍵就有掃描碼。

掃描碼和ASCII是完全不同的兩個概念,是硬體識別鍵盤的編碼,每個按鍵都有固定的掃描碼,用來區別每個按鍵,不同的按鍵的掃描碼都不同。
兩個按鍵的ASCII有可能相同,但是掃描碼一定不同,只要是兩個鍵,掃描碼就不同,例如兩個回車,ASCII相同,但是掃描碼不同。

我以前的程序編過一段掃描碼,貼出來給你看看:(7年前編的,本來是我當時想做的一個游戲引擎的一段程序,可以判斷和處理鍵盤上任意多個鍵同時按下/抬起的情況,可惜因種種原因中斷了,因DOS程序,現在也沒什麼意義了)
掃描碼的D7位為0,表示這個按鍵被按下產生的中斷,D7為1表示這個按鍵被抬起產生的中斷。

//特殊按鍵
//Pause = 0xe145 / 0xe1c5 (0xe1,0x1d(Ctrl),0x45(NumLock) - 0xe1,0x9d,0xc5)
//Break = 0xe046 / 0xe0c6 (0xe0, ScrollLock)
//PrtSc = 0xe037 / 0xe0b7 (0xe0, KeyPad - *)
//SysRq = Ctrl - PrtSc

char PauseKeyName=
{
"NULL", //00
"Esc", //01
"1 !", //02
"2 @", //03
"3 #", //04
"4 $", //05
"5 %", //06
"6 ^", //07
"7 &", //08
"8 *", //09
"9 (", //0A
"0 )", //0B
"- _", //0C
"+ =", //0D
"BackSpace", //0E
"Tab", //0F
"Q", //10
"W", //11
"E", //12
"R", //13
"T", //14
"Y", //15
"U", //16
"I", //17
"O", //18
"P", //19
" }", //1B
"Enter", //1C
"L-Ctrl", //1D
"A", //1E
"S", //1F
"D", //20
"F", //21
"G", //22
"H", //23
"J", //24
"K", //25
"L", //26
"; :", //27
"" \"", //28
"` ~", //29
"L-Shift", //2A
"\\ |", //2B
"Z", //2C
"X", //2D
"C", //2E
"V", //2F
"B", //30
"N", //31
"M", //32
", <", //33
". >", //34
"/ ?", //35
"R-Shift", //36
" *", //37
"L-Alt", //38
"Space", //39
"CapsLock", //3A
"F1", //3B
"F2", //3C
"F3", //3D
"F4", //3E
"F5", //3F
"F6", //40
"F7", //41
"F8", //42
"F9", //43
"F10", //44
"NumLock", //45
"ScrollLock",//46
" 7 Home", //47
" 8 Up", //48
" 9 PgUp", //49
" -", //4A
" 4 Left", //4B
" 5", //4C
" 6 Right", //4D
" +", //4E
" 1 End", //4F
" 2 Down", //50
" 3 PgDn", //51
" 0 Ins", //52
" . Del", //53
"PrtSc(Alt)",//54
"??? 55H", //55
"Added \\ |",//56
"F11", //57
"F12", //58
"??? 59H", //59
"??? 5AH", //5A
"??? 5BH", //5B
"??? 5CH", //5C
"??? 5DH", //5D
"??? 5EH", //5E
"??? 5FH", //5F
"??? 60H", //60
"??? 61H", //61
"??? 62H", //62
"??? 63H", //63
};

char KeyNamesE0=
{
"NULL", //E000
"??? E001H", //E001
"??? E002H", //E002
"??? E003H", //E003
"??? E004H", //E004
"??? E005H", //E005
"??? E006H", //E006
"??? E007H", //E007
"??? E008H", //E008
"??? E009H", //E009
"??? E00AH", //E00A
"??? E00BH", //E00B
"??? E00CH", //E00C
"??? E00DH", //E00D
"??? E00EH", //E00E
"??? E00FH", //E00F
"??? E010H", //E010
"??? E011H", //E011
"??? E012H", //E012
"??? E013H", //E013
"??? E014H", //E014
"??? E015H", //E015
"??? E016H", //E016
"??? E017H", //E017
"??? E018H", //E018
"??? E019H", //E019
"??? E01AH", //E01A
"??? E01BH", //E01B
" Enter", //E01C
"R-Ctrl", //E01D
"??? E01EH", //E01E
"??? E01FH", //E01F
"??? E020H", //E020
"??? E021H", //E021
"??? E022H", //E022
"??? E023H", //E023
"??? E024H", //E024
"??? E025H", //E025
"??? E026H", //E026
"??? E027H", //E027
"??? E028H", //E028
"??? E029H", //E029
"??? E02AH", //E02A
"??? E02BH", //E02B
"??? E02CH", //E02C
"??? E02DH", //E02D
"??? E02EH", //E02E
"??? E02FH", //E02F
"??? E030H", //E030
"??? E031H", //E031
"??? E032H", //E032
"??? E033H", //E033
"??? E034H", //E034
" /", //E035
"??? E036H", //E036
"PrtSc", //E037
"R-Alt", //E038
"??? E039H", //E039
"??? E03AH", //E03A
"??? E03BH", //E03B
"??? E03CH", //E03C
"??? E03DH", //E03D
"??? E03EH", //E03E
"??? E03FH", //E03F
"??? E040H", //E040
"??? E041H", //E041
"??? E042H", //E042
"??? E043H", //E043
"??? E044H", //E044
"??? E045H", //E045
"Break", //E046
"Home", //E047
"Up", //E048
"PageUp", //E049
"??? E04AH", //E04A
"Left", //E04B
"??? E04CH", //E04C
"Right", //E04D
"??? E04EH", //E04E
"End", //E04F
"Down", //E050
"PageDown", //E051
"Insert", //E052
"Delete", //E053
"??? E054H", //E054
"??? E055H", //E055
"??? E056H", //E056
"??? E057H", //E057
"??? E058H", //E058
"??? E059H", //E059
"??? E05AH", //E05A
"L-Start95", //E05B
"R-Start95", //E05C
"Menu95", //E05D
"Power", //E05E
"Sleep", //E05F
"??? E060", //E060
"??? E061", //E061
"??? E062", //E062
"Wake Up", //E063
};

得到掃描碼的方法:攔截鍵盤硬體中斷,計算的結果保存在 KeyScanCode 里,KeyboardProc();就是處理這個值的函數。

unsigned far *_Key_Flags = (unsigned far *)0x00000417L;
unsigned far *_Key_Flags1= (unsigned far *)0x00000496L;
unsigned int far KeyScanCode = 0;
unsigned char far KeyScBuffer=;
unsigned char far KeyTempChar = 0;

void interrupt NewKb09(...)
{
asm cli
KeyTempChar=inportb(0x60);

KeyScBuffer=KeyScBuffer;
KeyScBuffer=KeyScBuffer;
KeyScBuffer=KeyScBuffer;
KeyScBuffer=KeyTempChar;

KeyTempChar=inportb(0x61);
outportb(0x61,KeyTempChar|0x80);
outportb(0x61,KeyTempChar&0x7f);

if((KeyScBuffer!=0xe0) && (KeyScBuffer!=0xe1))
{
KeyScanCode=KeyScBuffer;
if(KeyScBuffer==0xe0)
KeyScanCode|=0xe000;

if((KeyScBuffer==0xe1) &&
((KeyScBuffer==0x1d) || (KeyScBuffer==0x9d)))
KeyScanCode|=0xe100;

if((KeyScanCode!=0xe02a) &&
(KeyScanCode!=0xe0aa) &&
(KeyScanCode!=0xe036) &&
(KeyScanCode!=0xe0b6) &&
(KeyScBuffer!=0xe1))
KeyboardProc();
}

asm sti
outportb(0x20,0x20);
}

//這是一段測試程序,可以顯示出當前按下或者抬起那個按鍵:

char FmtKscCode="%-10s\r\n";
char FmtUnkName="\rScanCode: ";
char StrKeyName="Press any key or Esc to quit ...";
char ByeStr);
}
else
{
cprintf(FmtKeyName, KeyNames00);
}
}
else
{
cprintf(FmtUnkName, ksCode&0xff7f);
}

textcolor(LIGHTBLUE);
cprintf(StrWait);

ksCode=0;
}
}

textcolor(LIGHTGRAY);
cprintf(ByeStr);

ResOldKb();
return 0;
}
Top
希望對你有幫助