当前位置:   article > 正文

【c语言】printf和scanf中* # %g的作用

【c语言】printf和scanf中* # %g的作用
写这一片博客是因为在写题的时候遇到了一些相关的麻烦

一、printf和scanf中* 的作用

scanf
*在scanf中起到过滤的作用,就比如写入了三个数,而就只想要中间的数,那我们就可以应用 *

int main()
{
	int b;
	scanf("%*d %d %*d",&b);
	printf("%d",b);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
下面还有一些相关的例子

int main()
{
	int a = 1, b = 1;
	//输入2 2 
	scanf("%d %*d",&a,&b);
	printf("%d %d\n",a,b);
	//输入 2 a 2
	a = 1, b = 1;
	scanf("%d %*c %d",&a,&b);
	printf("%d %d\n",a,b);
	a = 1, b = 1;
	//输入 2 abc 2	
	scanf("%d%*s%d",&a,&b);
	printf("%d %d",a,b);
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述
printf
*在printf中类似的用法我们也是见过的,和%5d的用法就很类似,但是 *的用法更加的灵活,它们都是用来限制输出宽度的,*的方法更加灵活,为动态输出格式。

int main()
{
	int a = 2;
	float b = 12.45f;
	char* p = "abcdef";
	printf("%*d\n",10,a);
	printf("%*.*f\n",0,5,b);
	printf("%*.*s",10,3,p);
	return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

%*d和%5d的用法是完全一样的,%*.*f和%10.5f也是一样的,
  • 1

小数点前面的为整体要输出多少位,意味着至少输出*个字符,其中“.”和“+”“-”也算入其中,而小数点后面的为小数点要保留多少位,意味着最多只能输出 * 个字节。

int main()
{
	char* p = "abcdef";
	printf("%3s\n",p);
	printf("%*s\n",3,p);
	printf("%.*s",3,p);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

如果所输出的字符串长度大于这个数,则按此宽度输出,如果小于,则输出实际长度

二、printf和scanf中# 的作用

#这也是写这篇文章的主要目的,因为在写题的时候,碰到了该知识点,看到之后整个人是懵的。
题目:十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。

下面这也就是答案了

#include<stdio.h> 
int main()
 { 
     printf("%#o %#X", 1234, 1234);
     return 0;
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
例子:

#include<stdio.h> 
int main()
{
    //printf("%#o\n%#X", 1234, 1234);
    printf("%o,%#o,%x,%#x",10,10,10,10);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

三、printf中的%g相关用法

%g和%G它们两个效果是相同的
以%f%e中较短的输出宽度输出单、双精度实数,至多6位有效数字(例:0.00314159这就属于有效数字6位,前面的零并不是有效数字),去除多余的0,在保留精度的时候还会进行四舍五入。
当指数大于等于6或小于等于-5时,使用%e。

#include <stdio.h>
int main()
{
    printf("%f\n", 12.3);
    printf("%g\n", 12.3);
    printf("%f\n", 12.3 + 12.7);
    printf("%d\n", (int)(12.3 + 12.7));
    printf("%g\n", 12.3 + 12.7);
    printf("%g\n",2.555566);//最多六位有效数字
    printf("%.5g\t%.5g\n", 2.255555e13, 2.3456789);
    //这里可以自己控制精度
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

最后:文章有什么不对的地方或者有什么更好的写法欢迎大家在评论区指出

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号