日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

printf函数的格式修饰符

發布時間:2024/9/27 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 printf函数的格式修饰符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文介紹printf函數的一些特殊的格式控制修飾符

1、域寬修飾符 –> 數字
對所有格式控制符都有效,即便是%%也不例外
寬度修飾符出現在%和格式控制符之間的數字,使數據在固定區域打印。如果待打印的數值不能填滿位置,它的左側會被天上空格以滿足填滿域寬區域,這些數值是右對齊的;如果超過了給定域寬,輸出區域會調整域寬以恰好能容納該數值,而不會把該數值截斷。

#include <stdio.h>int main() {printf("%2d %2d\n", 0, 1);printf("%2d %2d\n", 2, 3);printf("%2d %2d\n", 12, 34);printf("%2d %2d\n", 123, 456);system("pause");return 0; }

2、精度修飾符 -> ”. + 數字“
①對于整數格式項%d、%o、%x和%u,精度修飾符指定了它們打印數字的最少位數,要是待打印的數值小于指定位數,那么打印該數值時會在它的前面補0,以湊足指定的位數;要是到打印的數值大于指定位數,那么指定無效,打印該數值的全部位數。

#include <stdio.h>int main() {printf("%.2d %.2d\n", 0, 1);printf("%.2d %2.d\n", 12, 34);printf("%.2d %.2d\n", 123, 456);system("pause");return 0; }

②對于%e、%E和%f格式控制符,精度修飾符指定了小數點后應該出現的數字位數,只有當精度大于0時,才會出現小數點。

#include <stdio.h> #include <math.h>int main() {double pi = 4 * atan(1.0);printf("%.0f %.1f %.3f %.10f\n", pi, pi, pi, pi);printf("%.0e %.1e %.3e %.10e\n", pi, pi, pi, pi);printf("%.0E %.1E %.3E %.10E\n", pi, pi, pi, pi);system("pause"); return 0; }

③對于%g和%G格式控制符來說,驚呆修飾符指定了打印數據中有效數字的位數,如果小數點之后沒有數字,那么小數點也不會被打印。

#include <stdio.h>int main() {printf("%.1g %.1g %.2g %.3g %.8g\n", 1 / 3.0, 10/3.0, 10 / 3.0, 10 / 3.0, 10 / 3.0);printf("%.1G %.1G %.2G %.3G %.8G\n", 1 / 3.0, 10/3.0, 10 / 3.0, 10 / 3.0, 10 / 3.0);system("pause");return 0; }

④用于%s格式控制符,指定要從相應的字符串中打印的字符個數。當指定的值小于字符串中字符個數時,只輸出字符串中的前N個字符(N為精度值),當指定的大于字符串中字符個數時,輸出的字符個數為字符串中全部字符的個數。

#include <stdio.h>int main() {int ret1 = 0;int ret2 = 0;int ret3 = 0;ret1 = printf("%.10s\n", "abcdefg");ret2 = printf("%.5s\n", "abcde");ret3 = printf("%.3s\n", "abcdefg");printf("%d %d %d\n", ret1, ret2, ret3); system("pause");return 0; }

3、標志符
①-
此標識符后必須跟有域寬才會有意義,它的作用是使指定了域寬的數據輸出時左對齊。

#include <stdio.h>int main() {printf("%5d%5d%5d\n", 1, 2, 3);printf("%-5d%-5d%-5d\n", 1, 2, 3);system("pause");return 0; }

②+
規定每個待打印的數值在輸出時都應以它的符號(“+”、“-”)作為第一個字符。

#include <stdio.h>int main() {printf("%+d\n", 1);printf("%+d\n", 0);printf("%+d\n", -1);system("pause");return 0; }

③空白字符(空格)
如果數值是非負數,就在它的前面添加一個空格。
PS:要是空白字符修飾符與+修飾符出現在一起,以+修飾符為準。

#include <stdio.h>int main() {printf("% d\n", 1);printf("% d\n", 0);printf("% d\n", -1);printf("% +d\n", 1);system("pause");return 0; }

④#
%o格式控制符在打印輸出時在數字的前面加一個0,%x或%X在打印輸出時在數字的最前面加一個0x或0X。

#include <stdio.h>int main() {printf("%#o\n", 12);printf("%#x\n", 24);printf("%#X\n",24);system("pause");return 0; }

對浮點數格式來說,#標志符要求小數必須被打印出來,即使小數點之后沒有數字,對于%g和%G來說,不會去掉數值尾綴的0.

#include <stdio.h> #include <math.h>int main() {printf("%.0f %#.0f %g %#g\n", 3.0, 3.0, 3.0, 3.0);system("pause");return 0; }

4、%n
%n與其他格式說明符號不同。不向printf傳遞格式化信息,而是用于指出函數已經打印的字符的個數,這個數被存儲在對應參數(整型指針)所指向的整數中。

#include <stdio.h>int main() {int n = 0;printf("Hello\n%n", &n);printf("%d\n", n);system("pause");return 0; }

這兒的&n就是我們存儲字符個數的整型指針。
PS:是不是趕腳有些像用scanf()給n輸入一個值

5、使用 * 替換域寬或精度值

有時候,因為數據的不同,我們可能想使用的域寬或精度值也不同,例如,字符數組里面每次存儲的字符個數可能是不同的,那么我們想要不管每次給的字符數是多少,都不用改變printf()函數格式控制字符串里的域寬和精度值該怎么做呢。
因為數值的長度在程序中是寫“死”的數字(magic number),那么可能我們經常會這樣來定義數組

#define MAXSISE 20 char str[MAXSIZE];

那么為了方便每次打印str里面存儲的字符時不用修改printf()函數格式控制字符串里的域寬和精度值,我們可能會這樣寫:

printf("%MAXSIZE.MAXSIZEs", str);

但是,預處理器的范圍不能作用到字符串的內部,所以這樣是不可能達到我們的期望的。
而通過一個格式修飾符 * 我們可以很巧妙的做到這一點:

#include <stdio.h> #define MAXSIZE 20int main() {char str[MAXSIZE] = "Hello world!";printf("%*.*s\n", 20, 20, str);printf("%*%", 8);system("pause");return 0; }

這兒用 * 替換域寬和精度值,使printf()的參數列表里依次出現代表域寬的參數和代表精度值的參數,巧妙的避免的預處理器不能作用于字符串內部的問題。

總結

以上是生活随笔為你收集整理的printf函数的格式修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。