scanf的輸入字元時的陷阱

2021-09-30 09:03:08 字數 1979 閱讀 6582

//這個例子證明了:scanf("%c", &ch)等價於ch = getchar()

//在用%c的時候要格外小心

//int型:正確

#include int main()

return 0;

}//char型:錯誤

#include int main()

return 0;}/*

有空格時的執行結果:

a bvar1 = 97, var2 = 98

i = 0

c dvar1 = 10, var2 = 99

i = 1

var1 = 32, var2 = 100

i = 2

e fvar1 = 10, var2 = 101

i = 3

var1 = 32, var2 = 102

i = 4

g hvar1 = 10, var2 = 103

i = 5

沒空格時的執行結果:

a bvar1 = 97, var2 = 32

i = 0

var1 = 98, var2 = 10

i = 1

c dvar1 = 99, var2 = 32

i = 2

var1 = 100, var2 = 10

i = 3

e fvar1 = 101, var2 = 32

i = 4

var1 = 102, var2 = 10

i = 5

*///char型:解決

#include int main()

return 0;

}//再看乙個例子,注意①②③④處

#include #define max_vertex_num 20

#define infinity 0x00ffffff

typedef char vertexdatatype;//頂點資料型別

typedef char *otherinfo;//弧結點的其它資訊

enum graphkind;//directed graph,directed net,undirected graph,undirected net

typedef struct

arcnode;//弧節點

typedef struct

adjmatrix;//adjacency matrix(鄰接矩陣)

void createdn(adjmatrix *g);

//鄰接矩陣表示有向網

int main(void)

//locate the index of the vertex

int locatever(adjmatrix *g, const vertexdatatype *ver)

}return i;

}//create directed net

void createdn(adjmatrix *g)

for(i = 0; i < g->vernum; i++)

printf("\n");

//初始化鄰接矩陣

for(i = 0; i < g->vernum; i++)

}//建立鄰接矩陣

printf("請輸入弧的起點、終點、權值:\n");

for(i = 0; i < g->arcnum; i++)

g->kind = dn;

}/* test data and result

請輸入頂點個數、弧的個數:6 10

請輸入頂點元素:a b c d e f

請輸入弧的起點、終點、權值:

a b 5

a c 4

a d 1

b d 6

b e 3

c d 7

c f 6

d e 5

d f 2

e f 5

*/

連續scanf輸入字元型資料時,出現跳過輸入問題

例 include main 通過新增fflush stdin 來清空鍵盤緩衝區。include main 或者通過新增getchar 來臨時接收回車enter include main 總結 sacnf函式接收輸入資料時,遇見以下三種情況結束乙個資料當輸入 遇空格,回車,跳格鍵 遇寬度格式修飾符 ...

Scanf的輸入型別

scanf的輸入型別 1.格式字元與printf函式中的使用方式相同,以 d o x c s f e,無 u格式 g格式。2.可以指定輸入資料所佔列寬,系統自動按它擷取所需資料。3.後的 附加說明符,用來表示跳過它相應的資料。4.輸入資料時不能規定精度。5.根據格式字元的含義從輸入流中取得資料,當輸...

scanf函式的輸入

是不是也有人和我一樣,有時候輸入達不到自己預想結果呢?又很難找到自己的錯誤,覺得輸入的格式是對的,但是儲存卻不再在自己預想的位置。下面來講一下我關於字元和數字輸入的順序和方式的認識。首先我們來看第乙個 include includevoid main 是不是感覺是乙個非常簡單的程式。但有時候不懂也是...