歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> scanf易錯點解析

scanf易錯點解析

日期:2017/3/1 16:20:41   编辑:關於Linux
scanf易錯點解析 一、回車也被獲取了 例: char a; while(1) { scanf("%c",&a); printf("getchar : %d\n", (int)a); } 輸入: 1234 結果: get char : 49 //1 get char : 50 //2 get char : 51 //3 get char : 52 //4 get char : 10 //\n(換行) [解析: scanf獲取字符時是一個一個獲取的,當輸入1234和一個回車鍵,總共5字符,所有分別取出這五個字符] 二、嚴格匹配字符串 scanf("1123%s",&str); [輸入:1123aaabb時str為 aaabb,但是,輸入 24aabbdd時,會出錯,因為1123必須進行] 三、避免回車被自動獲取 例: char a,b; scanf("%c", &a); scanf("%c", &b); //scanf(" %c", &b); printf("a = 0x%d\nb = 0x%d\n", (int)a, (int)b); 輸入: 輸入1後回車。 結果: a = 0x49 b = 0x10 [解析: 原因是a取了1,b取了\n %c的前面必須有一個空格,否則系統會將你前面輸入別的值之後鍵入的回車符讀入該變量,造成死循環。當然,如果scanf("%c",&b)是第一條讀入語句,就可以不需要空格。] 四、限定讀取字符串大小 例: char *p, str[20]; scanf("10%s", p); scanf("%s", str); [解析: 一旦輸入字符個數大於10,p就不再繼續讀入,而後面的一個讀入函數即scanf("%s", str)就會從第11個字符開始讀入。] 五、清空鍵盤緩沖區 fflush(stdin); [解析: 清楚掉鍵盤緩沖區]
Copyright © Linux教程網 All Rights Reserved