格式化輸出函數printf與格式化輸入函數scanf是我們經常需要使用的函數,用來輸出和輸入的。
下面的例子,用來實現從鍵盤獲取不同類型的數據並輸出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
int j = 0;
int num;
char ch;
long l_num;
float f_num;
double d_num;
char *src;
char ptr[100];
int a[3];
printf("input a num:");
scanf("%d", &num);
printf("num = %d\n",num);
printf("input a char1:");
scanf("%c", &ch);
printf("ch = %c\n", ch);
printf("input a char2:");
getchar();
putchar(ch);
printf("input a long :");
scanf("%ld", &l_num);
printf("l_num = %ld\n", l_num);
printf("input a float:");
scanf("%f", &f_num);
printf("f_num = %f\n", f_num);
printf("input a double:");
scanf("%lf", &d_num);
printf("d_num = %lf\n", d_num);
src = ( char *) malloc ( sizeof ( char *));
printf("input a str:");
scanf("%c", src);
printf("src = %c\n", *src);
printf("input a ptr1:");
scanf("%s", ptr);
printf("ptr1 = %s\n", ptr);
printf("input a ptr2:");
while( ptr[j] != '\0')
{
scanf("%c", &ptr[j]);
j++;
}
printf是一個行緩衝函數,先寫到緩衝區,滿足條件後,纔將緩衝區刷到對應文件中,刷緩衝區的條件如下:
- 緩衝區填滿
- 寫入的字符中有‘\n’’\r’
- 調用fflush手動刷新緩衝區
- 調用scanf要從緩衝區中讀取數據時,也會將緩衝區內的數據刷新
滿足上面4個條件之一緩衝區就會刷新,也就是printf會真正調用write來寫入。
printf函數的使用技巧
顏色代碼:
QUOTE:
字背景顏色範圍: 40–49 字顏色: 30–39
40: 黑 30: 黑
41: 紅 31: 紅
42: 綠 32: 綠
43: 黃 33: 黃
44: 藍 34: 藍
45: 紫 35: 紫
46: 深綠 36: 深綠
47: 白色 37: 白色
ANSI控制碼:
QUOTE:
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m – \033[37m 設置前景色
\033[40m – \033[47m 設置背景色
\033[nA 光標上移n行
\03[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\33[?25h 顯示光標
這樣, 在某些時候就可以實現動態的輸出.
scanf函數在輸入數據時,遇到以下情況認爲該情況結束:
- 遇到空格,TAB,或回車
- 與寬度結束
- 與非法輸入
scanf函數有可能會留下一些“垃圾”數據,我們可以用以下的方法來解決:
- 用getchar()清除
- 用格式串中空格或“%*c”來吃掉