格式化輸入(scanf)輸出(printf)函數

格式化輸出函數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”來吃掉
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章