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

printf 函数

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

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

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

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

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

printf("ILove\r123");    //打印123时回到当前行首,当前行前面有东西,采用覆盖的方式
/*输出*/
123 e    //123'\0'e      //有一个不可见字符'\0'字符串结束标记 打印出来没有任何效果
  • 转义字符→ 达到打印的格式调整

常用的转义字符效果
\n换行
\r换行(回到当前行首),判断按键是否是回车键
\t水平制表

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

 汉字:占用两个位置

 普通字符:占用一个位置

printf("姓名\t年龄\t编号\t");
printf("大白\t18\t1001\t");

printf("姓名\t\t年龄\t编号\t");
printf("12345678\t18\t1001\t");

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

姓名        年龄    编号
12345678     18     1001

打印特殊符号

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

//printf("""); 报错
printf("\"\t\'");
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\n",iNum,cNum);    

/*输出*/

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

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

//通过输出数据的宽度 自己制表
printf("%-10s%-10s%-10s\n","姓名","年龄","编号");    
printf("%-10s%-10s%-10s\n", "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\n", 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\n", iNum, xNum, dNum);
	scanf_s("%d %c%lf", &iNum, &xNum,1, &dNum); //多个字符输入用scanf_s
	printf("iNum=%d,xNum=%c,dNum=%lf\n", iNum, xNum, dNum);

	//No.1 输入单个数据
	printf("input a num:");
	//习惯:定义变量的时候给变量初始化(赋初始值)
	int num = 0;                  //定义变量赋值为0
	int result = 0;               //返回值被忽略 scanf的返回值:输入数据的成功个数
	result=scanf("%d", &num);     //等待键盘输入
	printf("num=%d\n", num);
	//No.2 输入多个数据
	int a, b;
	printf("input a,b:");
	result=scanf("%d%d", &a, &b); //格式控制字符中没有空格但是可以输入空格|或者用回车当作数据的间隔|在字符输入时会有影响
	printf("a=%d,b=%d\n",a,b);
	//scanf("%d\n", &a);          //没有这种写法
	float fNum;
	//scanf("%.3f", &fNum);       //没有这种写法
	//No.3 字符输入
	char cNum;
	char x;
	printf("input a char:");
	//getchar();			      //常用
	scanf("%c", &x);			  //接收字符再做输入 清除缓冲区的\n x等于'\n'
	//fflush(stdin);			  //被淘汰
	//setbuf(stdin);			  //会影响文件操作
	//这个两个等效上面scanf的作用
	scanf("%c", &cNum);
	printf("cNum=%c\n", cNum);
	printf("input a char:");
	scanf("%c", &x);              //没有停在字符输入的位置-> '\n'直接给了字符
	scanf_s("%c", &cNum, 1);	  //长度一般用变量能够存储的数据长度-> 能够存储的数据长度
	printf("cNum=%c\n", 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\n", number);
	int iNum;
	printf("input a char:");
	//int x;
	//scanf("%c", &x);   //定义一个 x 接收换行
	getchar();		     //输入一个字符,不做处理用来清空缓冲区(清除\n) C6031:返回值被忽略"getchar"
	iNum=getchar();      //getchar():输入一个字符,getchar() 表示输入的字符 然后把输入的字符赋值给iNum
	//上面这句话等效: scanf("%c",&iNum);
	printf("iNum=");
	putchar(iNum);       //打印iNum
	putchar('\n');       //等效printf("\n");
	return 0;
}
/*输出*/

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

ASCLL码

用于做整数和字符的转换

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

字符 A:65,字符 a:97,大写和小写之间相差 32,字符 0~9:48~57

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

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

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

A
65
65
a
a
1
打印:A
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qiuqiuyaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值