簡體   English   中英

printf函數字符串printout參數的用法

[英]printf function string printout argument usage

我目前遇到此問題。 我想打印出來的#我在下面的代碼塊中定義的,就是當我通過printf參數作為printf("%*s\\n", x, BORDER) ,它打印出的所有#我在定義開始。 但是,當我將其寫為printf("%.*s\\n", x, BORDER)它會根據需要打印出# 誰能告訴我引發此問題的區別是什么? 我知道寬度和精度在浮點數打印輸出中起着重要作用,但這是字符串打印輸出...

#include <stdio.h>
#include <string.h>

#define BORDER "############################################"

int main(void) {
    char word[26];
    int x;

    scanf("%25s", word);
    x = strlen(word) + 2;
    printf("x = %d\n", x);
    printf("%*s\n", x, BORDER);
    printf("#%s#\n", word);    
    printf("%*s\n", x, BORDER);

    return 0;
}

這是兩種語法之間的區別:

  • %*s一起傳遞的可選字段寬度指定了要為字符串打印的最小寬度。 如果字符串較短,則會在字符串之前打印多余的空格。

  • %.*s傳遞的可選精度指定從字符串參數打印的最大字符數。

在您的情況下,您想限制從BORDER字符串打印的字符數,因此您應該使用%.*s格式:

printf("%.*s\n", x, BORDER);

但是請注意,這種方法不是通用的,因為您必須保持BORDER定義與數組大小同步。

這是另一種方法:

#include <stdio.h>
#include <string.h>

int main(void) {
    char word[26];

    if (scanf("%25s", word) == 1) {
        int x = strlen(word) + 2;
        char border[x + 2];

        memset(border, '#', x);
        border[x] = '\0';

        printf("x = %d\n", x);
        printf("%s\n#%s#\n%s\n", border, x, border);
    }    
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM