c语言中print()和scanf()函数知识介绍

目录

一.printf用法

1.基本用法

2.占位符

常见c语言占位符

3.printf()限定宽度

3.1关于整数

3.2关于小数

4.输出部分字符

 二.scanf函数

1.基本概念

2.scanf的返回值

1.scanf()返回的是一个整数,表示成功读取的变量个数,如果没有读取任何任何项,或者匹配失败,则返回0

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

3.占位符

3.1%c不忽略空白字符,总是会返回当前第一个字符(不管是不是空格)。

3.2%s从当前的第一个非空白的字符读起,直到遇到空白字符(空格,制表符,换行符等)。

3.2.1:赋值返回值


一.printf用法

1.基本用法

1.1printf()的作用是将参数文本输出到屏幕上,f(format)代表格式化的意思,表示可以输出文本的格式。

#include <stdio.h>
int main()
{
    printf("hello,ereryone");   //输出hello,everyone
    return 0;
{

这里应当注意,在使用printf()之前需要先引入头文件,因为printf是在标准库stdio.h里面定义的。

2.占位符

占位符指可以再这个位置用其他值代入

#include <stdio.h>
int main()
{
    printf("there are %d apples",3);
    return 0;
}

这里面的%d就是占位符,表示这个位置要用其他值来替换,%d表示代入的值为整数,这样的占位符有很多,在这里只列举常用的一些 :

常见c语言占位符

占位符含义
%d十进制整数
%s字符串
%c字符
%f小数,包含float和double类型
%hd十进制short int 
%huunsigned short int 类型
%ld十进制long int 类型
%p指针 (用来打印地址)
%x十六进制整数
%zsize_t类型

 

3.printf()限定宽度

3.1关于整数

即为printf()允许限定占位符的最小宽度,我们先来看一块代码

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

这个代码输出的结果为 1234 。%5d的意思为这个占位符的最小宽度为5,如果不满5位,对应的值会在前面添加空格,因为输出的值默认为右对齐,如果希望改成左对齐,可以在占位符的%后面插入'-'号.

3.2关于小数

而对于小数,这个限定符会限制所有数字的最小显示宽度

#include <stdio.h>
int main()
{
    printf("%12f",123.45); 输出  123.450000 
    return 0;
    
}

%12f表示输出的浮点数醉逍遥占据12位,由于小数默认显示精度为小数点后6位,所以会在123.45前面添加两个空格。同时我们还可以用%.2f来表示小数点后面只保留两位.

4.输出部分字符

%s占位符表示输出字符串,默认是全部输出,如果只希望部分输出,则可以用%.[m]s来指定输出的长度。 

 

  1. #include <stdio.h>
    int maini()
    {
        printf("%.5s","hello,linux"); //输出hello
        return 0;
    }

 二.scanf函数

1.基本概念

scanf()函数用于读取用户的键盘输入,程序运行到这个语句时,会停下来,等待用户键盘输入,按下回车键后,scanf()会处理用户的输入,将其存入变量。要特别注意的是:scanf会自动过滤空白字符,包括空格,制表符,换行符.

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()      12.3456$232
{
    int x;
    int y;
    //用户输入
    scanf("%d",&x);
    printf("%d\n",x);     //输出12
    scanf("%f",&y);
    printf("%f",y);    输出.3456
    return 0;
}

在上述带代码中,x打印出来时12,因为读取到12后面的.不是整数,所以只打印.前面的,y表示的是浮点数,当第二次调用scanf的时候,会从上一次停止的地方,继续往下解读,当读取到$时停止,因为$不属于浮点数。 

2.scanf的返回值

1.scanf()返回的是一个整数,表示成功读取的变量个数,如果没有读取任何任何项,或者匹配失败,则返回0

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>       //scanf返回值示例
int main(){
	int a = 0;
	int b = 0;
	float f = 0.2f;
	int ret = scanf("%d %d %f", &a, &b, &f);
	printf("a=%d b=%d f=%f\n", a, b, f);
	printf("ret=%d", ret);  //ret表示变量return
	return 0;
}

 

从上述代码我们可以看出返回值是3,表示成功读取3个变量个数.

3.占位符

scanf占位符和printf()基本一致,这里只说特殊的%c和%s.

3.1%c不忽略空白字符,总是会返回当前第一个字符(不管是不是空格)。

如果想要强制跳过字符前的空白字符,可以写成scanf(" %c",%ch),即在%c的前面加一个空格,表示跳过零个或者多个字符。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>   
int main()
{
	char a;
	char b;
	scanf("%c",&a);
	printf("a=%c\n",a);
	return 0;
}

 

第一个输出第一个字符a,    第二个输出第一个字符 空格.

3.2%s从当前的第一个非空白的字符读起,直到遇到空白字符(空格,制表符,换行符等)。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>   
int main()
{
	int year = 0;
	int month = 0;
	int day = 0;
	scanf("%d-%d-%d", &year, &month, &day);
	printf("%d %d %d\n", year, month, day);
	return 0;
}

这个代码可以看出如果输入的格式不是%d-%d-%d,就无法正确打印后面的数,因此引出赋值返回值。

3.2.1:赋值返回值

为了解决3.2中代码解析失败的问题,scanf()提供了一个赋值返回值,只要把*放在任何占位符的百分号后面,该占位符就不会返回值,解析后会丢弃。

#define _CRT_SECURE_NO_WARNINGS
#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\n", year, month, day);
	return 0;
}

只要在%后面加*号,这样就可以正确打印了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值