C scanf printf

目录

一、scanf

二、printf 


一、scanf

scanf() 处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等。

scanf() 处理用户输入的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。 解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止。

#include<stdio.h>
int main()
{
	int a = 0;
	float b = 0;
	scanf("%d", &a);	//输入 3.141592 #6
	printf("%d\n", a);	//输出 3
	scanf("%f", &b);
	printf("%f", b);	//输出0.141592
	return 0;
}

 占位符中除了 %c  ,都会忽略起首的空白字符,如果需要强制跳过空白字符,可以

scanf(" %c", &ch);  //百分号前加一个空格

scanf 有返回值

如果返回一个整数,代表成功读取的变量个数;

如果没有读取任何项,或者比配失败,返回 0;

如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF (-1)。

可以使用下面这行代码实现循环输入,想结束就按3次 Ctrl+Z 

while (scanf("%d", &a) != EOF)

%s 定义的规则是,从当前第一个非空白字符开始读起,直到遇到空白字符(即空格、换行符、制表符等)为止;意味着 scanf() 不适合读取可能包含空格的字符串;

scanf 遇到 %s 占位符时,会在字符串变量的末尾存储一个 \0;

 

scanf 将字符串读入字符数组是,不会检测字符串是否超出了字符数组的长度;所以使用 %s 时,应指定读入字符串的最大长度,即写成 %[m]s , [m]是一个整数,以防止出现意想不到的结果,不会出现数据溢出的风险了

#include<stdio.h>
int main()
{
	char name[10] = "0";
	scanf("%10s", name);
	printf("%s", name);
	return 0;
}

赋值忽略符  *

#include<stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d%*c%d%*c%d", &year, &month, &day);	//输入2024/4/9
	printf("%d %d %d", year, month, day);	    //输出2024 4 9
	return 0;
}

二、printf 

指定打印的最小宽度,默认是右对齐,改为左对齐需加一个负号。

#include<stdio.h>
int main()
{
	int num = 12345;
	printf("%d\n", num);	    //输出 12345
	printf("xx%7dxx\n", num);	//输出 xx  12345xx
	printf("xx%-7dxx\n", num);	//输出 xx12345  xx
	return 0;
}

 正号默认是不显示的,想显示正号可以

#include<stdio.h>
int main()
{
	printf("%d\n", 12);	   //输出 12
	printf("%+d\n", 12);   //输出 +12
	return 0;
}

限定小数位的长度 ,希望小数位只保留几位

#include<stdio.h>
int main()
{
	float a = 3.141592;
	printf("%f\n", a);		//输出 3.141592
	printf("%.4f\n", a);	//输出 3.1416 (四舍五入)
	return 0;
}

输出部分字符串

#include<stdio.h>
int main()
{
	printf("%.5s", "Hello world");	//输出 Hello
	return 0;
}

可以搭配使用,最小宽度和小数位数这两个限定值,都可以用  *  代替,通过 printf() 的参数传⼊。

#include<stdio.h>
int main()
{
	float a = 3.141592;
	printf("xx%5.2fxx\n", a);	//输出 xx 3.14xx
	printf("xx%-5.2fxx\n", a);	//输出 xx3.14 xx

	printf("xx%*.*fxx\n", 5, 2, a);	//输出 xx 3.14xx
	return 0;
}

完 

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值