取决于在scanf中使用还是在printf中使用。
但占位符不限于%s,还是%g,%d,%lf,%c等等。
(1)在scanf中使用
在scanf中使用,则添加了 *的部分会被忽略,不会被参数获取。
比如 %*d 就是读一个 %d 该读的东西,但不赋值给任何变量。
int index_t = 1;scanf("%*d", &index_t);printf("%d", index_t);//无论你怎么输入 获得的值都为1int index_t = 1;scanf("%d", &index_t);printf("%d", index_t);//无论你怎么输入 获得的值都是你输入的值
int a, b;char b[10];scanf("%d%*s",&a,b);/*** 输入为:12 abc* 那么12将会读取到变量a中,但是后面的abc将在读取之后抛弃,* 不赋予任何变量(例如这里的字符数组b)*/
(2)在printf中使用
printf格式字符串中,与宽度控制和精度控制有关的常量都可以换成变量,方法就是使用一个 * 代替那个常量,然后在后面提供参数给 * ,以实现动态格式输出。
① %*s
* 在 . 前面面,表示输出的总宽度,具体的数据来自参数表
如果参数 小于 字符串长度 ,则按照 原字符串 输出;
如果参数 大于 字符串长度,则按照 参数的长度 输出, 不足的在字符串左边补空格。
char s[] = "ABC";printf("%*s", 10, s);/** * 意思是输出字符串s,但至少占10个位置,不足的在字符串s左边补空格,* 这里等同于printf("%10s", s);*/
② %.*s
在 . 后面,表示输出的字符个数,具体的数据来自参数表*
如果参数 小于 字符串长度 ,则按照 参数的长度输出;
如果参数 大于 字符串长度,则按照 字符串实际长度 输出。
char s[] = "ABCD";printf("%.*s\n", 2, s);printf("%.*s\n", 10, s);/*** 输出结果为:* AB * ADCD*/
此外,如果是浮点型,%.*lf,还可以控制输出精度。
double a = 3.14;printf("%.*lf\n", 2, a);printf("%.*lf\n", 5, a);/*** 输出结果为:* 3.14* 3.14000*/
③%*.*s
综上,.前面定义输出总宽度,后面定义输出字符个数。
#include <cstdio>#include <iostream>using namespace std;int main(){char *s = "this is test example";int a, b;printf("%.*s\n", 10, s);//这里的常量10就是给*号的,控制输出字符,也可以用一个变量来控制printf("%*.*s\n", 20, 10, s); //常量20控制输出所占位宽,也可以用一个变量控制cin >> a >> b; //输入15 10printf("%*.*s\n", a, b, s); //输出为:-----this is te 前面定义输出总宽度,后面定义输出字符个数cin.get();cin.ignore(); //暂停程序执行}/*** 输出结果为:( -代表空格)* this is te //输出10个字符* ----------this is te //输出10个字符,总宽度为20* 15 10 //输入* -----this is te //输出10个字符,总宽度为15*
学习于:/question/166904879.html
/ph829/p/5576832.html