程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言數據輸出大匯總以及輕量進階

C語言數據輸出大匯總以及輕量進階

編輯:C語言基礎知識
在C語言中,有三個函數可以用來在顯示器上輸出數據:
  • puts():只能輸出字符串,在《C語言在屏幕上顯示內容》中已經進行了介紹。
  • putchar():只能輸出單個字符,本節將會介紹。
  • printf():可以輸出各種類型的數據,在《在屏幕上輸出各種類型的數據》《C語言中的整數》中都進行了介紹,本節要進行更加深入的講解。

printf() 是最靈活、最復雜、最常用的輸出函數,完全可以替代 puts() 和 putchar(),大家一定要掌握。

putchar()

putchar() 函數只能用來輸出單個字符,例如:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    putchar('a');
    putchar(7);
    putchar('\x46');

    system("pause");
    return 0;
}
運行程序,輸出 aF,同時會聽到喇叭發出“嘟”的聲音。

關於換行

puts() 函數在輸出結束時會自動換行,而 printf() 和 putchar() 不會,需要手動添加換行符\n。如下所示:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char *str = "c.biancheng.net";
    int n = 100;
    char c = 'Z';
    puts(str);
    putchar(c);
    printf("%d", n);
    putchar(c);

    system("pause");
    return 0;
}
運行結果:
c.biancheng.net
Z100Z請按任意鍵繼續. . .

printf() 的高級用法

這一節的內容有些繁雜,如果你希望加快學習進度,盡早寫出有趣的代碼,也可以跳過這節,後面遇到不懂的 printf 輸出再來回顧。
雖然我們已經熟悉了 printf,但是還沒有把它發揮到極致,printf 可以有更加“炫酷”的輸出。

假如現在老師要求我們用C語言輸出一個 4×4 的整數矩陣,為了增強閱讀性,數字要對齊,怎麼辦呢?我們顯然可以這樣來做:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a1=20, a2=345, a3=700, a4=22;
    int b1=56720, b2=9999, b3=20098, b4=2;
    int c1=233, c2=205, c3=1, c4=6666;
    int d1=34, d2=0, d3=23, d4=23006783;

    printf("%d        %d       %d       %d\n", a1, a2, a3, a4);
    printf("%d     %d      %d     %d\n", b1, b2, b3, b4);
    printf("%d       %d       %d         %d\n", c1, c2, c3, c4);
    printf("%d        %d         %d        %d\n", d1, d2, d3, d4);

    system("pause");
    return 0;
}
運行結果:
20        345       700       22
56720     9999      20098     2
233       205       1         6666
34        0         23        23006783
矩陣一般在大學的《高等數學》中會講到,m×n 的數字矩陣可以理解為把 m×n 個數字擺放成 m 行 n 列的樣子。
看,這是多麼地自虐,要敲那麼多空格,還要嚴格控制空格數,否則輸出就會錯位。

類似的需求隨處可見,整齊的格式會更加美觀,讓人覺得生動有趣。我們大可不必像上面一樣,printf 可以更好的控制輸出格式。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a1=20, a2=345, a3=700, a4=22;
    int b1=56720, b2=9999, b3=20098, b4=2;
    int c1=233, c2=205, c3=1, c4=6666;
    int d1=34, d2=0, d3=23, d4=23006783;

    printf("%-9d %-9d %-9d %-9d\n", a1, a2, a3, a4);
    printf("%-9d %-9d %-9d %-9d\n", b1, b2, b3, b4);
    printf("%-9d %-9d %-9d %-9d\n", c1, c2, c3, c4);
    printf("%-9d %-9d %-9d %-9d\n", d1, d2, d3, d4);

    system("pause");
    return 0;
}
輸出結果:
20        345       700       22
56720     9999      20098     2
233       205       1         6666
34        0         23        23006783
這樣寫起來更加方便,即使改變某個數字,也無需修改 printf 語句。

%-9d中,d表示以十進制輸出,9表示最少占9個字符的寬度,寬度不足以空格補齊,-表示左對齊。綜合起來,%-9d表示以十進制輸出,左對齊,寬度最小為9個字符。大家可以親自試試%9d的輸出效果。

printf 格式控制字符的完整形式如下:
%[flags][width][.precision]type
[xxx] 並不是C語言規定的格式,只是一種習慣寫法,表示此處的內容可有可無,後面會經常見到這樣的寫法。
1) type 也就是以什麼類型輸出,比如 %d、%f、%c,type 就分別對應 d、f、c;%-9d中 type 對應 d。type 必須有。

2) width 表示最小輸出寬度,也就是占幾個字符的位置;%-9d中 width 對應 9。

對於整數和小數,默認右對齊,不足的寬度以空格補齊,例如:
printf("%10d%12f", 234, 9.8);
輸出結果為:
       234    9.800000
234 前面共有7個空格,9.8 前面有4個空格。

3) .precision 表示輸出精度。

對於 %d,.precision 表示的其實是最小輸出寬度,與 width 不同的是,不足的寬度以 0 補齊,例如:
printf("%.10d\n", 4309);
輸出結果為:
0000004309

對於 %f,.precision 表示小數的位數,不足以 0 補齊,也就是精度,例如:
printf("%.10f %.3f\n", 23.988, 2.9328745);
輸出結果為:
23.9880000000 2.933

4) flags 是標志字符,%-9d中 flags 對應-

幾種常見的標志字符 標志字符 含  義 - 左對齊 + 輸出符號(正號或負號) 空格 輸出值為正時冠以空格,為負時冠以負號 # 對c、s、d、u類無影響;
對o類,在輸出時加前綴o;
對x類,在輸出時加前綴0x;
對e、g、f 類當結果有小數時才給出小數點。
有興趣的讀者可以猛擊這裡查看更多關於 printf 的輸出格式。
printf 的這些格式規范不是“小把戲”,優美的輸出格式隨處可見,例如 dos 下的 dir 命令,會整齊地列出當前目錄下的文件:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved