在 scanf 和 printf 里效果是不一樣的。
在printf,動態控制顯示格式用的
printf("%*s",5,"123");
執行一下,這條語句,輸出
##123
(#代表一個空格)
類似於%5d 這樣的狀況
這里*被常量5代替,用於控制最小字符寬度,主要是針對,最小字符寬度未知的情況,當然*可以對應整型變量
在 scanf 里的意思,表示忽略要讀的項。比如 %*d 就是讀一個 %d 該讀的東西,但不賦值給任何變量。
scanf("%*d %*d %d", &n);
如果輸入2004 2005 2006
那么n=2006
關於%*.*s
小數點.后“*”表示輸出位數,具體的數據來自參數表
printf格式字符串中,與寬度控制和精度控制有關的常量都可以換成變量,方法就是使用一個“*”代替那個常量,然后在后面提供變量給“*”。
同樣,小數點.前也可以添加*,也要用戶輸入一個位寬值來代替,表示輸出的字符所占位寬。
也就是說,前面定義輸出總寬度,后面定義輸出字符個數。
舉例:
- #include <cstdio>
- #include <iostream>
- int main()
- {
- char *s = "this is test example";
- int a,b;
- printf("%.*s\n", 10, s);//這里的常量10就是給*號的,你也可以用一個變量來控制寬度
- printf("%*.*s\n", 20, 10, s);//常量20控制輸出所占位寬,也可以用一個變量控制
- std::cin>>a>>b; //輸入15 10
- printf("%*.*s\n", a, b, s);//輸出為:-----this is te 前面定義輸出總寬度,后面定義輸出字符個數
- std::cin.get();
- std::cin.ignore();//暫停程序執行
- }
輸出結果為:
this is te
----------this is te//-代表空格
15 10 //輸入
-----this is te