C語言scanf函式處理機制及getchar機制

2021-08-05 22:16:30 字數 1346 閱讀 7220

函式 scanf() 是從標準輸入流stdio (標準輸入裝置,一般指向鍵盤)中讀內容的通用子程式,可以說明的格式讀入多個字元,並儲存在對應位址的變數中。

其呼叫格式為: scanf(「《格式化字串》」,《位址表》);

scanf()函式返回成功賦值的資料項數,出錯時則返回eof。

格式字串包括三種字元「格式化符「,如」%d,%c,%s」等;」空白符」,如空格,製表符,新行符;」非空白符」,如」,」等。

空白符:空白字元會使scanf函式在讀操作中略去輸入中的乙個或多個空白字元。

非空白符:乙個非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。

如:scanf(「%d%d」,&a,&b);

或scanf(「%d %d」,&a,&b); 輸入時: 1 2

scanf(「%d,%d」,&a,&b); 輸入時:1,2

關鍵:在用格式化符%c時,空格,轉義符均為有效字元;

例:scanf(「%c%c%c」,&a,&b,&c);

輸入:a□b□c

則:a=』a』,b=』□』,c=』b』

實際遇到的問題:

int main()

4

gdb除錯:

6       scanf("%c",&a);

(gdb) n

a7 scanf("%c",&b);

(gdb) n

8 printf("%c %c",a,b);

(gdb) p a

$1 = 97 'a'

(gdb) p b

$2 = 10 '\n'

當輸入完a的值後,回車也被b接受,在實際執行輸入完a就直接列印a結束。

優化:

int main()

4

在scanf前加上getchar();

6       scanf("%c",&a);

(gdb) n

a7 getchar();

(gdb) n

8 scanf("%c",&b);

(gdb)

b9 printf("%c %c",a,b);

(gdb) n

10 return 0;

(gdb) p a

$1 = 97 'a'

(gdb) p b

$2 = 98 'b'

fflush(stdin)函式:對於上面情況處理無效,還沒能搞懂,此處保留。

C語言 訊號處理機制

c語言中訊號標示一種時間,它可能非同步地發生,也就是並不與城市執行過程中的任何事件保持同步,如果程式中未設定該訊號的處理函式,則選擇預設方式 大部分為終止程式執行。訊號標頭檔案 同樣可以顯示引發乙個訊號 int raise int sig 指定希望採取的措施 void signal int sig,...

c語言異常處理機制

異常處理機制 setjmp 函式與longjmp 函式 c標準庫提供兩個特殊的函式 setjmp 及 longjmp 這兩個函式是結構化異常的基礎,正是利用這兩個函式的特性來實現異常。所以,異常的處理過程可以描述為這樣 首先設定乙個跳轉點 setjmp 函式可以實現這一功能 然後在其後的 中任意地方...

golang panic及處理機制

目錄 panic會將這個異常不斷向上丟擲,直到有地方處理它,如果有處理,則不會再向上丟擲。倘若沒有處理,那麼最終會quenu導致main掛掉.golang雖然沒有try catch機制,卻有一種類似的recover機制,後續demo我們可以觀測到它的用法和作用 func main go test1 ...