輸出與輸出:putchar() getchar() printf() scanf() puts() gets() sscanf()

C語言中基本的輸入輸出函數有: 
putchar ():把變量中的一個字符常量輸出到顯示器屏幕上; 
getchar ();從鍵盤上輸入一個字符常量,此常量就是該函數的值; 
printf ();把鍵盤中的各種數據,加以格式控制輸出到顯示器屏幕上; 
scanf ();從鍵盤上輸入各種數據,並存放到程序變量中; 
puts ():把數組變量中的一個字符串常量輸出到顯示器屏幕上; 
gets ():從鍵盤上輸入一個字符串常量並放到程序的數組中. 
sscanf(); 從一個字符串中提取各種數據。 
 putchar() 和 getchar() 顧名思議就是從輸入流中獲取一個字符和輸出一個字符,比較簡單,再也不多講。 
例子以下: 
char c = getchar(); 
putchar©; 
 格式化輸入輸出scanf()和printf()是最有用的,因此重點講一下。 
printf(): 
通常形式: 
printf("格式控制".輸出列表);  
eg : printf("a=%d,b=%f,c=%c/n",a,b,c); 
1;格式控制. 
格式控制是用雙引號括起來的字符串,也稱"轉換控制字符串",它包含如下兩部分信息. 
格式說明:由"%"和格式字符組成,如%d,%f,%c,他的做用是把輸出數據轉換爲指定格式輸出,格式的說明老是由"%"字符開始的.正則表達式

普通字符:須要原樣輸出的字符,或者是一些有特殊含義的字符,如/n,/t。 
2;輸出列表 
就是須要輸出的一些數據,也能夠是表達式,若是在函數中須要輸出多個變量或表達式,則要用逗號隔開. 
 一些特殊字符的輸出: 
單引號,雙引號,和反斜槓的輸出在前面加轉義字符」/」 
如:」/’」 , 「/」」 , 「//」 
%的輸出用兩個連在一塊兒的%%,即printf(「%%」); 

經常使用的格式說明以下: 
格式字符 
d 以十進制形式輸出帶符號整數(正數不輸出符號)  
o 以八進制形式輸出無符號整數(不輸出前綴O)  
x 以十六進制形式輸出無符號整數(不輸出前綴OX)  
u 以十進制形式輸出無符號整數  
f 以小數形式輸出單精度實數  
lf以小數形式輸出雙精度實數 
e 以指數形式輸出單、雙精度實數  
g 以%f%e中較短的輸出寬度輸出單、雙精度實數  
c 輸出單個字符  
s 輸出字符串  
 這裏強調一下:網上不少文章都說f 和lf是同樣的,即無論單精度,雙精度浮點數,均可以用f, 但我在POJ上作過測試,輸出Double時用f確實也能夠 ,但讀入時,用f就報WA,因此你們若是對Double進行讀寫的話,都用lf吧。 
說到Double,再囉嗦一句,建議你們要用到浮點數時都用Double,不要用float,由於在不少狀況下,float精度不夠會致使WA。 
特殊: 
對64位整數的輸入輸出,在POJ上的C++環境下(即VC),64位整數是: 
__int64 (注意int前面是兩個下劃線) 
輸入輸出格式爲」%I64d」. 
在G++環境下(即Dev C++) 64位整數是 
long long 
輸入輸出格式爲」%lld」. 

輸出寬度 
  用十進制整數來表示輸出的最少位數。 注意若實際位數多於定義的寬度,則按實際位數輸出, 若實際位數少於定義的寬度則補以空格或0。 
精度 
  精度格式符以「.」開頭,後跟十進制整數。意義是:若是輸出數字,則表示小數的位數;若是輸出的是字符, 則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。 
標誌格式字符  
- 結果左對齊,右邊填空格  
+ 輸出符號(正號或負號)空格輸出值爲正時冠以空格,爲負時冠以負號 
例如: 
double c=24212345.24232; 
printf(「%020.4」); 表示輸出精確到小數點後4位,輸出佔20位,如有空餘的位補0. 
 scanf: 
scanf的不少用法都是和printf對應的,故再也不贅述。 
說一下scanf一個特別好用的地方,就是能夠濾去一些不想要的東西。 
舉例說明以下: 
好比輸入爲日期 yyyy-mm-dd,就能夠這樣寫: 
int year,moth,day; 
scanf(「%d-%d-%d」,&year,&moth,&day); 
再好比: 
scanf("%3d %*3d %2d",&m,&n); 輸入113 118 69回車(系統將113賦予m,將69賦予n,由於*號表示跳過它相應的數據因此118不賦予任何變量) 
puts()用的很少,且基本都能用printf()代替,故再也不多說。 
gets()是從輸入流中獲取一行字符串放入字符數組中: 
char in[100]; 
gets(in); 
你們可能最容易出錯的地方就是字符串的輸入,因此強調一下: 
能進行字符,字符串輸入的有: 
getchar(), scanf(「%c」); scanf(「%s」), gets() 
其中getchar() 和 scanf(「%c」)的功能是同樣的。 
須要注意的是,這兩個函數讀入的是輸入流中當前位置的字符, 
好比: 
 scanf(「%d」,&n); 
 c = getchar(); 
假設輸入 67/ (假設「/」表明回車),則第一個scanf讀入一個整數67後,當前輸入流的位置是67以後,即指向回車符,因此第二個getchar()讀入的就是一個回車符了,即 c = ‘/n’。 
一樣,gets()也是從當前位置讀入一行字符串。 
好比: 
scanf(「%d」,&n); 
gets(str); 
此時讀入字符數組中的字符串就是「/n」 了 
因此一般在用scanf讀入一個非字符串的類型以後,若是要讀入字符,或字符數組,都用一個額外的getchar()把回車符讀掉,若後面跟的不止一個回車符,可能還有多餘的空格的話,就用gets()讀掉。 
 和以上不一樣的是,scanf(「%s」) 讀入的時候是會忽略掉空格,回車和製表符的。而且以空格,回車和製表符做爲字符串結束的標誌。 
 常常會有這樣的題,輸入第一行是一個整數,接下來每行的第一個是一個字符,用來表示某種操做,後面再跟一些數據,好比: 

A 100 2 
B 23 
A 23 89 
B 34 
像這種輸入就須要當心,讀入字符時不要讀成回車符。 
爲了防止意外,我通常是這樣處理這類輸入的: 
char model[2]; 
Scanf(「%d」,&n); 
for(…,…,…){ 
 scanf(「%s」,model); 
 if(model[0] == ‘A’){ 

else{ 


 sscanf(): 
sscanf()常常用來分解字符串,功能很是強大,但不少功能都須要正則表達式的知識,因此就介紹一下最簡單的幾種用法,你們若是想了解更多的話,本身去網上找吧。 
1. 
char str[100],str1[100],str2[100]; 
gets(str); 
sscanf(str,」%s%s」,str1,str2); 
將讀入的一整行字符串按空格,製表符或回車符分割成兩個字符串。 

取指定長度的字符串。如在下例中,取最大長度爲4字節的字符串。 
sscanf("123456 ", "%4s", str);數組

相關文章
相關標籤/搜索