c语言持续更新(5)

目录

1scanf和printf

1.1printf

1.2占位符

1.3限制宽度

​编辑1.4总是显⽰正负号

1.5限定⼩数位数

1.6输出部分字符串

2scanf

2.1sacnf 

2.2scanf  可以输入多个数值

2.3scanf 返回值

3.赋值忽略符


1scanf和printf

1.1printf

        printf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以 定制输出⽂本的格式。

#include <stdio.h>
int main()
{
	printf("hello world ");
	return 0; 
}

这应该是每个初学者敲得第一个代码吧。反正我是写的第一个代码。

1.2占位符

是指printf() 可以在输出⽂本中指定占位符

int main()
{
	int a = 100;
	printf("%d\n ", a);//%d就是printf中的占位符 输出整数
	return 0; 
}

打印字符串

int main()
{
	printf("%s 是帅哥\n", "张三");//注打印字符串 字符串内容要加双引号
	return 0;
}

多个占位符的时候

int main()
{
	printf("%s 今天打cs 2了吗?打了%d个小时", " 陈韵", 6);//多个占位符

	return 0;
}

printf() 参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 1 个

1.3限制宽度

        printf() 允许限定占位符的最⼩宽度。如果不满5位,对应的值的前⾯会添加空格。 输出的值默认是右对⻬,即输出内容前⾯会有空格;如果希望改成左对⻬,在输出内容后⾯添加空 格,可以在占位符的 % 的后⾯插⼊⼀个 - 号

#include  <stdio.h>
int main()
{
	printf("%5d \n", 123);//不满足五位数的在前面加空格
	printf("%5d \n", 123456);//满足五位数并且超出的按原数输出
	printf("% -drr", 1234 ); //
	return 0;
}

1.4总是显⽰正负号

        printf() 不对正数显⽰ + 号,只对负数显⽰ - 号。如果想让正数也输出 + 号,可 以在占位符的 % 后⾯加⼀个 +


#include <stdio.h> 
int main()
{
	int a = -10;
	printf("% -d \n", -12);
	printf("% +d \n", 12);
	printf("% -d \n", a);
	printf("% -d \n", a);
	return 0;
}

1.5限定⼩数位数

int main()
{
	printf("% *.*lf\n ", 12, 5, 123.436);

	return 0;
}

1.6输出部分字符串

        %s 占位符⽤来输出字符串,默认是全部输出。如果只想输出开头的部分,可以⽤ %.[m]s 指定输出 的⻓度,其中 [m] 代表⼀个数字,表⽰所要输出的⻓度


$include  <stdio.h>
int main()
{
	printf("%.5s\n", "asdfgertr");.//打印前五个字符
	return 0;
}

2scanf

2.1sacnf 

#include <stdio.h>
int main()
{
	int input = 0;
	printf("请输入成绩:");
	scanf("%d", &input);//& 是取地址
	printf("成绩是:%d ", input);
	return 0;
  }

        scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等

2.2scanf  可以输入多个数值

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);//scanf可以输入多个数值
	printf("%d %d\n",a, b);

	return 0;
 }

2.3scanf 返回值

 scanf() 的返回值是⼀个整数,表⽰成功读取的变量个数。

 如果没有读取任何项,或者匹配失败,则返回 0 。

如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF (-1)。 EOF - end of file ⽂件结束标志

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	int ret  =scanf("%d %d %d %d", &a, &b, &c, &d);//这里的ret计算的是scanf的返回值数值读取几个返回值就是几。
	printf("a= %d b=%d c= %d d=%d \n", a, b, c, d);
	printf("ret = %d\n ", ret);

	return 0;
}

运行结果

        如果输⼊2个数后,按 ctrl+z ,提前结束输⼊( 在vs里要按三次ctrl +z)

        如果⼀个数字都不输⼊,直接按3次 ctrl+z ,输出的r是-1,也就是EOF

        除了 %c 以外,都会⾃动忽略起⾸的空⽩字符

#include <stdio.h>
int main()
{
	char ch  = 'c';
	scanf("%c", &ch);//这里的scanf遇到空格就会输入空格
	printf("xxx%cyy\n", ch);

	return 0;
}

        如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表 ⽰跳过零个或多个空⽩字符。

        占位符 %s下占位符 %s它的规则是,从当前第⼀个⾮空⽩ 字符开始读起,直到遇到空⽩字符(即空格、换⾏符、制表符等)为⽌。

#include <stdio.h>
int main()
{
	char  arr[20];
	scanf("%s", arr);//这里的arr数组名是地址。 遇到空格就结束。
	printf("%s\n ",arr);
	return 0;
}

        scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。所以,储存字符串时, 很可能会超过数组的边界,导致预想不到的结果

#include <stdio.h>

int main()
{
	char  arr[5];//这个给的太小会造成越界访问
	scanf("%4s", arr);//在s前面加一个限制的个数可以解决上面的问题。
	printf("%s\n ", arr);
	return 0;
}

3.赋值忽略符

#include <stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d-%d-%d", &year, &month, &day);//必须按照格式输入 如 2024-3-5
	printf("%d %d %d", year, month, day);

	return 0;
}

        为了避免这种情况, scanf() 提供了⼀个赋值忽略符(assignment suppression character) * 。 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。

#include <stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d%*c%d%*c%d", &year, &month, &day);
	printf("%d %d %d", year, month, day);

	return 0;
}

这样就可以不受限制了。

今天结束下班

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值