scanf易錯點解析

來源:互聯網
上載者:User

scanf易錯點解析 一、斷行符號也被擷取了例:       char a;       while(1)       {              scanf("%c",&a);              printf("getchar : %d\n", (int)a);       }輸入:1234結果:get char : 49   //1get char : 50   //2get char : 51   //3get char : 52   //4get 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 = 0x49b = 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);[解析:清楚掉鍵盤緩衝區]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.