c语言 --- 基本输入输出

18 篇文章 1 订阅
本文详细介绍了C语言中的printf和scanf函数,包括它们的基本用法、格式控制字符、转义字符、浮点数输出格式、输入输出缓冲区管理以及字符处理函数。此外,还探讨了ASCII码在字符与整数之间的转换。文章通过实例代码演示了如何使用这些函数进行数据的打印和读取,以及处理输入输出过程中的常见问题。
摘要由CSDN通过智能技术生成

printf 函数

  • #include <stdio.h> C语言标准输入输出头文件

  • printf做原样打印,把要打印的东西作为参数

  • 代码的行数不影响显示结果的行数

    //函数
    //printf(“要打印的内容”);
    //一行的形式
    printf(“ILoveYou”);
    printf(“ILoveYou”“IMissYou”“HaHa”);
    //多行的形式 每行都需要有"" 代码格式分为多行 但实际输出并没有多行
    printf(“ILoveYou”
    “IMissYou”
    “HaHa”);
    /输出/
    ILoveYouILoveYouIMissYouHaHa

    printf("ILoveYou
    "
    "IMissYou
    "
    "HaHa
    ");
    /输出/
    ILoveYou
    ILoveYou
    IMissYouHaHa

    printf(“ILove
    123”); //打印123时回到当前行首,当前行前面有东西,采用覆盖的方式
    /输出/
    123 e //123’‘e //有一个不可见字符’'字符串结束标记 打印出来没有任何效果

  • 转义字符 - - - > 达到打印的格式调整

常用的转义字符

效果

换行

换行(回到当前行首),判断按键是否是回车键

水平制表

制表的原理: 通过控制数据的输出宽度,不足8位填充空格,超过8位以16位制表,1个 ’ ’ 8位两个’ '16位

汉字:占用两个位置

普通字符:占用一个位置

printf("姓名	年龄	编号	");
printf("大白	18	1001	");

printf("姓名		年龄	编号	");
printf("12345678	18	1001	");

/*输出*/
姓名    年龄    编号
大白     18     1001

姓名        年龄    编号
12345678     18     1001

打印特殊符号

  • 通过加上特殊符号打印符号

    //printf("""); 报错
    printf("" ‘");
    printf(""); //两个打印一个’’ 不能是3个’’ 会和注释混在一起
    printf("%%"); //特殊符号和转义字符无关 两个%打印一个%
    /输出/
    " '%

数据的输出

  • 格式控制字符: 占位符

  • 不同的数据类型有不同的控制字符

  • 数据的顺序必须要和占位符的顺序一致

int  %d
char %c
float %f
double %lf
字符串  %s 指针类型
unsigned int %u
printf("a=%d,b=%c",1,'A');
a=%d,b=%c
   1,  'A'
a=1,b=A
//一般情况: 占位符的个数是要和后面数据个数相同
printf("整数:%d,字符:%c,字符串:%s",1,'a',"iloveyou");
int iNum = 3;
char cNUm = 'N';
printf("iNUm = %d,cNum = %c
",iNum,cNum);    

/*输出*/

整数:1,字符:a,字符串:iloveyou
iNUm = 3,cNum = N
  • 浮点型的格式问题

    %+a.bf
    %-a.blf
    a:输出数据的宽度,不足补空格
    b:小数位
    +: 右对齐 ,不写,默认是右对齐
    -: 左对齐
    printf("%3.3lf
    “,1.3345); //有效小数位数是3位 最后一位5没有打印,四舍五入往前进了一位
    printf(”%10.3lf
    ",1.3345); //输出数据的宽度是10位

    //通过输出数据的宽度 自己制表
    printf("%-10s%-10s%-10s
    “,“姓名”,“年龄”,“编号”);
    printf(”%-10s%-10s%-10s
    ", “12345678”,“18”,“1001”);

    /输出/

    1.335
    1.335
    姓名 年龄 编号
    12345678 18 1001

scanf函数

  • scanf 基本用法

    • &(shif+7键按出来)取地址符:取变量的地址- - ->把数据放到变量的内存中去,要知道变量在内存中的位置

    • scanf 工作原理

      • scanf(“格式控制字符”,“变量的地址”);

      • 输入的格式控制字符不需要转义字符,不需要精度控制

      • 输入的数据放在输入缓冲区stdin中,scanf 函数根据格式控制字符去输入缓冲区中拿数据

      • error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead

        • 项目属性–>SDL改为否
  • 字符输入

    • 清除缓冲区—> 在字符或者字符串输入前 做了输入,就需要清除缓冲区
  • scanf_s: vs给 scanf 做的增强版本

    • 输入数字类是没什么区别

    • 输入字符类或者字符串必须要加入长度

    • 其他编译器没有 scanf_s 只有 scanf

  • scanf一次输入多个不同类型的数据

#include <stdio.h>
int main() 
{
	//No.4 不同数据类型输入
	//数字和字符组合在一起
	int iNum;
	char xNum;
	double dNum;
	printf("input int,char,double:");
	//scanf自动区分数据,不需要人为区分:字符和浮点数之间不需要加空格
	scanf("%d %c%lf", &iNum, &xNum, &dNum);    //1 A 3.13为了避免数据出错强制加一个空格
	printf("iNum=%d,xNum=%c,dNum=%lf
", iNum, xNum, dNum);
	printf("input int,char,double:");          //输入数据的格式必须是这个格式
	//%d,%c,%lf 
	//scanf("%d,%c,%lf", &iNum, &xNum, &dNum);
	//printf("iNum=%d,xNum=%c,dNum=%lf
", iNum, xNum, dNum);
	scanf_s("%d %c%lf", &iNum, &xNum,1, &dNum);//多个字符输入用scanf_s
	printf("iNum=%d,xNum=%c,dNum=%lf
", iNum, xNum, dNum);

	//No.1 输入单个数据
	printf("input a num:");
	//习惯:定义变量的时候给变量初始化(赋初始值)
	int num = 0;              //定义变量赋值为0
	int result = 0;           //返回值被忽略 scanf的返回值:输入数据的成功个数
	result=scanf("%d", &num); //等待键盘输入
	printf("num=%d
", num);
	//No.2 输入多个数据
	int a, b;
	printf("input a,b:");
	result=scanf("%d%d", &a, &b); //格式控制字符中没有空格但是可以输入空格|或者用回车当作数据的间隔|在字符输入时会有影响
	printf("a=%d,b=%d
",a,b);
	//scanf("%d
", &a);    没有这种写法
	float fNum;
	//scanf("%.3f", &fNum); 没有这种写法
	//No.3 字符输入
	char cNum;
	char x;
	printf("input a char:");
	//getchar();			    //常用
	scanf("%c", &x);			//接收字符再做输入 清除缓冲区的
 x等于'
'
	//fflush(stdin);			//被淘汰
	//setbuf(stdin);			//会影响文件操作
	//这个两个等效上面scanf的作用
	scanf("%c", &cNum);
	printf("cNum=%c
", cNum);
	printf("input a char:");
	scanf("%c", &x);            //没有停在字符输入的位置--->'
'直接给了字符
	scanf_s("%c", &cNum, 1);	//长度一般用变量能够存储的数据长度--->能够存储的数据长度
	printf("cNum=%c
", cNum);
	//字符串--字符数组;
	return 0;
}
/*输出*/
     
input int,char,double:1    //多个输入中间有字符导致出错的原因:把空格当做字符去处理
A
1.23
iNum=1,xNum=A,dNum=1.230000
input int,char,double:1
e
1.34
iNum=1,xNum=e,dNum=1.340000
input a num:3
num=3
input a,b:2
4
a=2,b=4
input a char:A
cNum=A
input a char:C
cNum=C

字符处理函数

getchar函数

  • 输入一个字符 ,getchar() 表示输入的字符

  • #include <stdio.h>

putchar函数

  • 输出一个字符 ,putchar(‘A’) 要输出的字符放在括号中

  • 一旦字符输入前做了输入,就一定要做清空缓冲区处理,否则会存在跳过现象

  • #include <stdio.h>

getch函数

  • 输入一个字符,getch() 表示输入的字符,不需要回车确认输入

  • #include <conio.h>

  • 在vs中,getch()要改为 _getch()

    #include <stdio.h>
    #include <conio.h>
    int main()
    {
    //NO.2 getch
    int userKey = 0;
    userKey = _getch(); //不需要回车确认,输入完就可以做交互
    //想象玩游戏上下左右键的处理
    putchar(userKey);
    //scanf_s scanf,getchar 都需要回车确认输入

    //No.1  getchar() putchar()
    int number;
    printf("input a number:");
    scanf_s("%d", &number);
    printf("number=%d
    

    “, number);
    int iNum;
    printf(“input a char:”);
    //int x;
    //scanf(”%c", &x); //定义一个x接收换行
    getchar(); //输入一个字符,不做处理用来清空缓冲区(清除
    ) C6031:返回值被忽略"getchar"
    iNum=getchar(); //getchar():输入一个字符,getchar() 表示输入的字符 然后把输入的字符赋值给iNum
    //上面这句话等效: scanf("%c",&iNum);
    printf(“iNum=”);
    putchar(iNum); //打印iNum
    putchar(’
    '); //等效printf("
    ");
    return 0;
    }
    /输出/

    2input a number:3
    number=3
    input a char:e
    iNum=e

ASCLL码的知识

用于做整数和字符的转换

字符存储在计算机中是一个数字,不同的字符对应不同的编码:ASCLL码,ASCLL码表代表了字符在计算机中的数据是多少

字符 A:65,字符 a:97,大写和小写之间相差 32,字符 09:4857

int main()
{
    //No.1 基本转换
    printf("%c
",65);  //用%c的方式打印整数--->格式控制字符和数据不一致|默认通过ASCLL码表把65转换为字符
    printf("%d
",'A'); 

    //No.2 常用形态
    int a = 'A';
    printf("%d
",a);    //自动把'A'转换为65--->用%d的方式打印a就是65
    //2.1大小写转换--->任何大写字母和小写字母的间距是一样的 相差32--->相应的大写字母65+32==小写字母97
    char number = 'A';   //把大写'A'转换为'a'
    putchar(number + 32);//打印小写'a'--->打印字符|把97转换为小写a打印出来
    putchar('
');
    //任何两个大、小写字母之间的间距是相同的
    //'A'-'a'=number-x;
    //x=number+'a'-'A';
    number = 'A';
    putchar(number + 'a' - 'A');
    putchar('
');
    //2.2字符1转数字1
    char first = '1';
    int one = first -'0';//因为字符0-9是连续的
    printf("%d
",one);

    printf("打印:A
");//特殊的格式控制字符: 65的八进制--->ddd:1到3位八进制所代表的任意字符
}
/*输出*/

A
65
65
a
a
1
打印:A

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值