关于printf()和scanf()的 * 修饰符的一些解释

printf()与 *

如果你不想预先指定字段宽度,希望通过程序来指定,那么可以用 * 修饰符代替 字段宽度。但还是要用一个参数告诉函数,字段宽度应该是多少。也就是说,如果转换说明是 %*d,那么参数列表中应包含 *d对应的值。这个技巧也可用于浮点值指定精度和字段宽度。

 一个问题:

编写一个程序,先提示用户输入 ,然后提示用户输入 名 。
在一行打印用户输入的 姓 和 名  ,下一行分别打印的 字母数。
字母数要与相应 姓 和 名 的结尾对齐

上代码!

#include<stdio.h>    
#include<string.h>                                //引用一个<string.h> 当使用strlen需要引入

int main(){
	char name[20];                                //给定一个数组长度
	char surname[20];
	printf("please input your frist name :");
	scanf("%s",name);                             //当给数组数据时不需要 & 符号 
	printf("good! now , input your last name  :");
	scanf("%s",surname);

	int len_1 = strlen(name);                    //得到该数组的字符长度
	int len_2 = strlen(surname);                

	printf("%s %s\n",name,surname);            

    printf("%*d %*d\n", len_1, len_1,len_2,len_2);

	                                        // 当使用*d 的 形式的时候需要注意要分别给定数据
	                                        // *  表示字符长度 d 表示你所想要打印的数据
                                            //当然如果你想打印浮点数时 应该使用 f

     
	printf("%-*d %-*d\n", len_1, len_1,len_2,len_2);

                                            //注意要要在*前面添加 - 号
                                            //这样即为从左侧开始打印,即左对齐	


	return 0;
}

结果如图所示:

 

 scanf()的与*

scanf()  * 的用法与此不同。把   *    放在  %  和转换字符之间时,会使得  scanf()  跳过相应的输出项。

#include<stdio.h>
int main(void) {
	int a, b, c;
	                        
	scanf("%*d %*d %d",&c);		            //这个时候可以把想要赋值的数给定对应变量
                                            //可以看到这个时候并不需要给前两个数给地址
                                            //系统会直接跳过前两个数

	printf("跳过两个数之后 %d",c);

	return 0;
}

结果如下: 

 

 在方法在需要读取文件中特定列的内容时,这项跳过功能很有用哦(⊙*⊙)!

一些小技巧……

未完持续…………………… 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风玉骨

爱了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值