輸入可以有三種方式:scanf(),getchar(),gets(),它們有哪些區別呢?
1. scanf()
功 能: 執行格式化輸入
用 法: int scanf(char *format[,argument,...]);
scanf()函式是通用終端格式化輸入函式,它從標準輸入裝置(鍵盤) 讀取輸入的資訊。可以讀入任何固有型別的資料並自動把數值變換成適當的機內格式。
其呼叫格式為: scanf("《格式化字串》",《位址表》);
scanf()函式返回成功賦值的資料項數,出錯時則返回eof。
而scanf()是擁有緩衝區的,舉個例子
程式執行到scanf()時會停止 請求外界輸入
也許你輸入了12然後回車了,但事實上 你從鍵盤上輸入的是字元'1''2', 還有換行符'\n' (因為你鍵入了回車),在你按回車鍵之前,字元'1''2'都處於乙個叫做緩衝區的位置裡,回車鍵是特殊的,它先將字元'\n'新增到緩衝區,隨後便清除緩衝區 ,將其中的所有字元傳送到乙個叫做輸入列表的地方 ,scanf函式以及其他標準輸入函式便會立刻從輸入列表中獲取內容
上述程式按照%d的規則從輸入列表中獲取字元 ,它獲取了'1''2',並且將其轉變為整數12,存入了變數n中,對於那些從輸人列表中獲取輸入的函式 ,它們並不知道什麼是整數 , 因為整數是程式設計中的概念,而無論是緩衝區還是輸入列表,其中只有字元,所以「獲取整數」只是從結果上看的,我們要求scanf獲取乙個整數到n中,它完成了但是並沒有結束, 因為輸入列表並不乾淨,回車符'\n'仍然留在輸入列表中,第二個scanf將不會給你輸入的機會 ,因為緩衝區中剩餘的'\n'已經足夠填飽ch的肚子,所以中間加乙個getchar(),以獲取『\n』;
解決該問題的第二種方法是scanf(「 %d」,&num1),按格式輸出前加乙個空格;
2. scanf()與gets 的區別
(1),scanf()讀句子的時候,會將所有的字元讀入緩衝區中,而scanf()函式取資料是遇到回車、空格、tab就會停止,不能獲得乙個句子;而gets()可以獲得乙個句子,因為gets沒有緩衝區,所以可能會出現越界的情況;
但用以下方法可使得scanf獲得乙個句子:
我們可以用getchar 處理越界的情況:
如下:
其特點是:效率低,但是可以控制越界。
另外,c語言裡提供了函式清空緩衝區,只要在讀資料之前先清空緩衝區就沒問題了!這個函式是fflush(stdin)。
C語言格式化輸入輸出
原創 2015年03月20日 20 08 32 printf 格式字串的一般形式 標誌 輸出最小寬度 精度 長度 型別 其中方括號 中的項為可選項。各項意義 1 型別 型別字元用以表示輸出資料的型別,其格式符和意義如下表所示 格式字元 意義d 以十進位制形式輸出帶符號整數 正數不輸出符號 o以八進位...
C語言 格式化輸入輸出
格式說明由 和格式字元組成,由 d f等。它的作用是將輸出的資料轉換為指定的格式輸出。格式說明總是由 字元開始的。不同型別的資料用不同的格式字元。格式字元有d,o,x,u,c,s,f,e,g等 如 d整型輸出,ld長整型輸出,o以八進位制數形式輸出整數,x以十六進製制數形式輸出整數,u以十進位制數輸...
C語言格式化輸入輸出
本文主要介紹一下c語言中printf和scanf兩個函式。printf函式被設計用來顯示格式串 format string 的內容,並且在該串中的指定位置插入可能的值。呼叫printf函式時必須提供格式串,格式串後面的引數是需要在顯示時插入到該串中的值 printf 格式串,表示式1,表示式2,顯示...