%*s ,%.s ,%.*.s详解

取决于在scanf中使用还是在printf中使用。

但占位符不限于%s,还是%g,%d,%lf,%c等等。

(1)在scanf中使用

在scanf中使用,则添加了 * 的部分会被忽略,不会被参数获取。

比如 %*d 就是读一个 %d 该读的东西,但不赋值给任何变量。

int index_t = 1;

scanf("%*d", &index_t);

printf("%d", index_t);

  //无论你怎么输入  获得的值都为1
int 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 10
    printf("%*.*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
 * 

学习于:https://zhidao.baidu.com/question/166904879.html

              https://www.cnblogs.com/ph829/p/5576832.html       

  • 14
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值