基本输出
使用基本输入输出需要包含 stdio.h
头文件
原样输出
printf("output text");
puts("output text");
- 相同点:输出字符串到屏幕
- 不同点:printf输出不带换行,puts函数自动输出换行
输出转义字符
-
转义字符的作用
-
可以调整输出格式
-
可以打印特殊字符
-
可以表示特殊字符(个别特殊字符不可见)
-
-
如果要输出
\
需要两个\\
进行转义;%%
同理 -
\t
表示按照 8 位对齐,\t\t
表示 16 位对齐
输出变量
格式控制字符
-
printf函数占位符
-
%d:输出有符号的十进制整数,包括 char 类型
-
%u:输出无符号的十进制整数,包括 char 类型
-
%f:输出 float 类型的浮点数(输入时以小数形式和指数形式都可以识别)
-
%lf:输出 double 类型的浮点数(输入时以小数形式和指数形式都可以识别)
-
%c:输出单个字符
-
%s:输出字符串
-
%p:以整数形式输出指针
-
%x 或 %X:输出十六进制
-
%o:用来输出无符号的八进制整数
-
%e:以指数形式输出浮点数(输入时小数形式和指数形式都可以识别)
-
%g:自适应输出小数或者指数形式(输入时小数形式和指数形式都可以识别)
-
输出格式控制
#include <stdio.h>
int main()
{
printf("%+a.bf",1.11f);
return 0;
}
其中:
-
a:表示输出数据的宽度,无论是左对齐或者右对齐,位数不足时用空格补齐
-
b:表示保留的小数位
-
+:或者不写(default):右对齐
-
-:左对齐
putchar 函数:只能输出一个字符(该字符用单引号包括)
基本输入
输入过程分析
- 输入缓冲区里会用
\n
表示按下回车键,只会提取前面的数据,提取完毕后,\n
还留在输入缓冲区 - 只有在字符输入前才需要进行清空缓冲区
fflush()
函数已经被淘汰,不要使用它来清空缓冲区
基本输入
使用 scanf 函数
#include <stdio.h>
int main()
{
int scanfNum1,scanfNum2;
scanf("%d %d",&scanfNum1,scanfNum2);
prinft("num1 is %d,num2 is %d",scanfNum1,scanfNum2);
return 0;
}
scanf
注意事项
-
这是一个不安全的函数,vs 中可以通过属性设置取消这个提示
-
scanf 函数格式占位符有多个可以使用空格或者其他符号作为两个输入的分隔符
-
scanf 函数有一个返回值,可以初始化一个 int 类型的变量来取消 vs 的返回值被忽略的提示
-
可以使用 scanf_s 来替换不安全的 scanf,但是这个函数只有 vs 里有,项目转移到其他 ide 时要注意!!!
-
不建议使用 宏定义 来取消警告提示
-
scanf_s 无法解决输入缓冲区遗留
\n
的问题 -
scanf_s 在最后需要一个参数,这个参数是限制输入的长度
字符输入
-
单个字符输入
-
getchar 函数
-
getch函数,在 vs 里要使用 _getch替换(需要包含 conio.h),是不需要按回车键确认的输入,游戏中经常用到
-
-
字符串输入:gets 函数
类型转换
隐形转换
赋值时 ide 自动进行的转换,此转换有可能导致数据精度的丢失,长宽度往低宽度转换往往出现这种现象
隐形转换的规则
-
转换按照数据长度增加的方向进行,以保证数据不失真或者不丢失
-
所有浮点型都是以双精度进行,即使运算中有 float 类型也要先转换位 double 类型
-
char 和 short 类型参与转换时,必须先转换位 int 型
数据类型精度从短至长
强制转换
(强转数据类型)表达式/变量
为什么数据类型有效范围不对称?
因为中间有个 -0 表示负数的最小值
课后作业
-
填空题
-
标识符可以由 下划线,字母,数字 组成,但是首字符不能是 数字。
-
C语言中常用的标识符命名规范是 驼峰式。
-
整数 520 默认的类型是 无符号(unsigned)。
-
浮点型 3.14 默认的类型是 双精度(double)。
-
类型大小:计算机类型为 32 位
-
char:1字节
-
shor:2字节
-
int:4字节
-
long int:4字节
-
long long:8字节
-
float:4字节
-
double:8字节
-
unsigned int:4字节
-
-
编程题
-
- 编程实现输入一个字符,若字符是大写字母则转小写输出,如是小写字母则转大写字母输出,不是字符直接输出。
-
#include <stdio.h>
int main()
{
char letterConvert;
int tem;
printf("请输入要转换的大写或者小写字母:");
scanf("%c",&letterConvert);
tem = (int)letterConvert;
if(tem>=65&&tem<=90)
{
printf("\n转换后为:%c",tem+32);
return 0;
}
if(tem>=97&&tem<=122)
{
printf("\n转换后为:%c",tem-32);
return 0;
}
printf("\n不是字母!原样输出:%c",letterConvert);
return 0;
}