在 C 語言中列印格式化文字

Jinku Hu 2023年1月30日 2021年1月22日
  1. 使用帶有%s 指定符的 printf 函式列印字串
  2. 使用 printf 函式和%i 指定符來列印整數
在 C 語言中列印格式化文字

本文將介紹幾種在 C 語言中列印格式化文字到控制檯的方法。

使用帶有%s 指定符的 printf 函式列印字串

printf 函式是標準輸入/輸出庫中使用最多的部分之一。實際上,有一整套專門用於多種場景的 printf 函式,所有這些函式在這個網頁上都有詳細的記錄。在本文中,我們只演示使用 printf 函式進行格式化輸出。

printf 的獨特之處在於它可以接受可變數量的引數。也就是說,函式引數可以分為格式字串和其他引數兩部分。格式字串指定了函式的格式化部分,它包括普通字元和以%符號開頭的指定符。最簡單的形式在下面的例子中演示,在第一次呼叫中,printf 將字串本身作為唯一的引數,第二次呼叫在格式字串中宣告一個%s 的指定符,後面是字串變數引數。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char* str1 = "fabulae mirabiles";

    printf("String literal\n");
    printf("%s\n", str1);

    exit(EXIT_SUCCESS);
}

輸出:

String literal
fabulae mirabiles

格式字串的另一個有用的功能是指定從傳遞給函式的字串引數中顯示多少個字元。接下來的示例程式碼演示了這個問題的兩種解決方案。

第一個將表示字元數的整數放在%s 符號之間;因此,從給定的字串引數中只列印 6 個字元。第二種 printf 呼叫將*字元代替,讓使用者從其中一個引數中傳遞積分值。後一種方法的好處是可以在執行時計算出值,而前一種方法需要硬編碼。請注意,在這兩種情況下,%符號後面的 . 是必要的。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char* str1 = "fabulae mirabiles";

    printf("%.6s\n", str1);
    printf("%.*s \n", 6, str1);

    exit(EXIT_SUCCESS);
}

輸出:

fabula
fabula

使用 printf 函式和%i 指定符來列印整數

printf 可以列印不同表示方式的整數。常見的方法包括修改顯示整數的基數。整數引數可以用%i%d 指定符表示。正數和負數都是自動格式化的,除了正數不顯示加號外,可以用明確的指定符%+i 來表示。十六進位制和八進位制數字可以用%x%o 指定符相應地輸出。%X 指定符顯示大寫字母格式的十六進位制數字。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("%i %d %.6i %+i %i\n", 11, 22, 12, 41, -31);
    printf("%.4x %x %X %#x\n", 126, 125, 125, 100);
    printf("%.4o %o\n", 8, 11);

    exit(EXIT_SUCCESS);
}

輸出:

11 22 000012 +41 -31
007e 7d 7D 0x64
0010 13
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C IO