第十一章 控制台輸入/輸出
成功取決於執行力
dennis ritchie想使c語言保持緊湊,處於這個想法,他特意從c語言中排除了與輸入/輸出(i/o)相關的一切。因此,c語言沒有提供從輸入裝置(如鍵盤、硬碟等)接收資料,或者向輸出裝置(如顯示器、硬碟等)傳送資料的功能。因此,該怎麼管理i/o呢?如果c語言沒有提供i/o,那所使用的printf()和scanf()又是怎樣工作的呢?這就是本章要**的問題。
11.1 首先了解一點,i/o裝置會隨著作業系統的不同而不同。因此,乙個作業系統在螢幕上顯示輸出的方式可能與另乙個作業系統不同。例如,對基於dos的c編譯器來說,標準庫函式printf()已經寫好了dos下將字元輸出到螢幕的方式。同樣的,對基於unix的c編譯器,printf()已經寫好了unix下將字元輸出到螢幕的方式。作為程式設計師,不必關心printf()函式是怎麼寫的,只要會用printf()就行了,其他的細節取決於作業系統。對於所有其它用於i/o的標準庫函式也是一樣的。
11.2 為i/o提供的庫函式有很多,大致可以分為兩個大類:
●控制台輸入/輸出函式:從鍵盤輸入、從顯示器輸出的函式。
●檔案輸入/輸出函式:在軟盤貨硬碟上進行輸入/輸出操作的函式。
11.3 什麼是控制台?簡單的說就是螢幕和鍵盤。
控制台輸入/輸出函式可以進一步分為兩大類:格式化的控制台函式和非格式化的控制台函式。它們之間的根本區別是----格式化的函式可以按照我們要求的格式從鍵盤讀取資料或將資料在顯示器上輸出。
格式化的輸入/輸出函式有:printf()、scanf()
非格式化的輸入/輸出函式有:getch()、putch()、getche()、putchar()、getchar()、gets()、puts()
11.4 %10.1f和%-10.1f代表什麼意思呢?
答曰:10表示欄位的寬度、0.1表示精度、+表示右對齊、-表示左對齊。
11.5 轉義字元
\n 換行符
\t 製表符
\b 退格
\r 回車
\a 警告
\』單引號
\」雙引號
\\反斜槓
11.6 sprintf()和sscanf()函式
sprintf()函式的功能和printf()函式的功能相類似,該函式是將內容輸出到乙個字元陣列,而不是像printf()那樣輸出到螢幕上。sscanf()與之相對應。例:
#include
int main(void)
int i=10;
char ch ='a';
float a=3.14;
char str[20];
printf("\n%d %c %f",i,ch,a);
sprintf(str,"%d %c %f",i,ch,a);
printf("\n%s",str);
system("pause");
11.7 非格式化的控制台輸入/輸出函式
到目前為止,我們一直用scanf()函式來輸入。但是有些情況下,scanf()函式有明顯的弱點,就是你需要按回車鍵,函式才能接受所輸入的值。而我們常希望函式可以在按下某個鍵的時候就讀入該單個字元,不需要等到按下回車鍵後。
下面我們來詳細了解一下這些可愛的函式。
●getch()函式
接受輸入的字元後返回,並不將該字元顯示在螢幕上。
●getche()函式
接受輸入的字元後返回,並將該字元顯示在螢幕上。
●getchar()函式
接受輸入的字元按回車鍵後返回,並將該字元顯示在螢幕上,巨集
●fgetchar()函式
接受輸入的字元按回車鍵後返回,並將該字元顯示在螢幕上,函式
值得注意的一點是:getch()和getche()的函式原型儲存在標頭檔案conio.h中,
巨集getchar()和fgetchar()函式的原型儲存在stdio.h中。
示例:#include
#include
int main(void)
char ch;
printf("\npress any key to continue");
getch();
printf("\ntype any character");
ch=getche();
printf("\n%c",ch);
printf("\ntype any character");
getchar();
printf("\ncontinue y/n");
fgetchar();
system("pause");
11.8 與getch()、getchar()、對應的是putch()、putchar(),它們將字元輸出在螢幕上。 例如:
#include
#include
int main(void)
char ch='a';
putch(ch);
putchar(ch);
fputchar(ch);
putch('z');
putchar('z');
fputchar('z');
system("pause");
C語言 第十一章第十二章
定義 字串是以空字元為結尾的char型別陣列。1.字串的輸入 gets 函式 它區別於getchar 函式,getchar 是輸入單個字元,gets 是輸入字串。區別於scanf s a 函式,scanf 只能讀取乙個單詞,gets 讀取整行輸入,直到遇到換行符。gets 會在顯示的字串末尾自動加上...
C 程式語言 第十一章 運算子過載
1 運算子函式 運算子函式的名字是由關鍵字operator後跟對應的運算子構成。二元運算子可以定義為取乙個引數的非靜態成員函式,也可以定義為去兩個引數的非成員函式。乙個運算子函式必須或者是乙個成員函式,或者至少有乙個使用者定義型別的引數。不存在運算子遮蔽,這就保證了內部運算子可以用,並且為運算子定義...
C語言學習與總結 第十一章 列舉(enum)
所謂列舉是指將變數的值一一枚舉出來,變數只限於列舉出來的值的範圍內取值。宣告列舉型別的一般形式為 enum 列舉型別名 例如 enum week 注意 1 列舉型是乙個集合,集合中的元素 列舉成員 是一些命名的整型常量,元素之間用逗號,隔開。2 day是乙個識別符號,可以看成這個集合的名字,是乙個可...