目录
我这里提前进行输入输出的讲解!一般输入输出根据安徽省大部分考纲教材《C程序设计(第五版)》谭浩强版本是在变量常量之后讲解
本帅哥在此写的需要对应数据类型进行学习(对0基础的而言),but I‘m也是不喜欢有基础慢慢看的人,所以愿零基础的原谅,但是我绝对不会写少知识点!!!本章节所有知识点讲完,我将源代码发送到马云(gitte)上,学本专业的未来本科生们在本科一定要学会git的使用,嘻嘻,前言到此结束
一、转义字符
转义字符 | 字符值 | 输出结果 |
\n | 换行 | 将光标当前位置移到下一行的开头 |
\t | 水平制表符 | 将光标当前位置移到下一个Tab位置 |
\v | 垂直制表符 | 将光标当前位置移到下一个垂直制表对齐点 |
\r | 回车 | 将光标当前位置一直到本行的开头 |
\' | 一个单撇号(') | 输出单撇号字符 |
\" | 一个双撇号(") | 输出双撇号字符 |
\? | 一个问号(?) | 输出问号字符 |
\\ | 一个反斜线(\\) | 输出反斜线字符 |
\a | 警告 | 产生声音或视觉信号 |
\b | 退格 | 将光标当前位置后退一个字符 |
\f | 换页 | 将光标当前位置移到下一页的开头 |
\o、\oo或\ooo其中o代表一个八进制数字 | 与该八进制对应的ASCII字符 | 与该八进制吗对应的字符 |
\xh[h...]其中h代表一个十六进制数字 | 与该16进制码对应的ASCII字符 | 与该十六进制码对应的字符 |
#include <stdio.h>
main() {
Escape(); //调用转义字符函数
}
Escape() {//转义英语为Escape,一下演示的都为常用转义字符
int a, b, c, d;
a = 1; b = 2;c = 3; d = 4;
printf("\\n转义字符:\n");
printf("%d\n%d%d%d\n", a, b, c, d);
printf("\\t转义字符:\n");
printf("%d\t%d\t%d\t%d\n", a, b, c, d);
printf("\\v转义字符:\n");
printf("%d\v%d\v%d\v%d\n", a, b, c, d);
printf("\\r转义字符:\n");
printf("%d\r%d%d%d\n", a, b, c, d);
printf("\\,\',\",\?\n");
printf("\101\n"); //101八进制对应65十进制
printf("\x41"); //41十六进制对应65十进制
}
二、输出语句
所谓的输入输出就是指以计算机主机为主体而言的,从计算机向输出设备输出数据称为输出,输入设备像计算机输入数据称为输入
C语言本身不提供输入设备语句,输入和输出操作是由函数库(stdio.h)中的函数来实现的
2.1 printf()
printf格式:
printf(控制格式,输出列表)
- 控制格式:是用双撇号括起来的字符串,称为格式控制字符串,由以下两部分组成:
- 格式声明:由%和格式字符组成
- 普通字符:需要在输出时原样输出的字符
- 输出列表:是程序需要输出的一下数据,可以是常量、变量或表达式
#include <stdio.h>
main() {
int i,j;
i=1;
j=2;
printf("%d\n%d",i,j);
\\此处%d\n%d即为格式控制,i与j为输出列表
}
2.2 格式字符
格式字符 | 作用 | 书写方式 |
%md,%mi | 用来输出一个符号的十进制整数,m表示占多少位,不足补空格 | printf("%d",test1) |
%mc | 用来输出一个字符,m表示占用位数,不足补空格,如果ch为0~127范围内整数则转为对应ASCII码字符。超过部分后续细讲 | printf("%c",ch) |
%m.nf | 输出实数(单,双,长双进度),一小束形式输出。m表示输出占用位数,n为小数位数 | printf("%f",test2) |
%s | 用来输出一个字符串 | printf("%s","This is my name") |
%m.ne | 以指数形式输出实数,m表示输出占用位数,n为小数位数 | printf("%e",x) |
%o | 以八进制无符号形式输出整数不输出前导符0 | printf("%o",j) |
%x | 以十六进制无符号形式输出整数,不输出前导符0x | printf("%x",i) |
%u | 以无符号十进制输出整数 | printf("%u",test3) |
%g | 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式输出则指数E大写表示 | printf("%g",x) |
字符 | 说明 |
l | 长整型整数,可以加在格式符d,o,x,u前面 |
m(代表一个正整数) | 数据最小宽度 |
n(代表一个正整数) | 小数位或街区的字符个数 |
-(负号) | 输出的数据在域内向右靠 |
#include <stdio.h>
main() {
double i, j;
char ch;
i = 1.9876543;j = 2111432.345;ch = 'P';
printfTest(1,2,ch,i,j); //调用函数并传入值至对应位置
}
printfTest(int i, int j, char ch,double x,double y) {
printf("%3d%2d\n",i,j);
printf("%5c\n", ch);
printf("%c\n",97); //97对应的为ASCII中的a
printf("%c\n",377);//377对应二进制为101111001保留后8位01111001转为十进制为121即对应ASCII为y
printf("%0.3f%10.30f\n",y,x);
//当占的位数小于原本的位数将会被原本位数替代,当大于原本位数则补空格,
// .后的数为保留的小数位,当保留位数超过原本位数则将最后一位数变为四舍五入格式
//如0.33变为0.3299999.......
printf("%-20.4f我在哪?\n", 3.1415926); //加负号为右边补多余空位
printf("%s\n","I am Promise");
printf("%e\n",12345.6789123); //1.234568e+04其中4为10的四次方乘以1.234568=12345.68因为默认保留6位小数故四舍五入为1.234568
printf("%3.8e\n", 12345.6789123);//此处和%m.nf一致
printf("%o",8);
}
若是想输出%则需要连续用两个%
三、输入语句
3.1 scanf()
格式与printf基本一致
scanf格式
scanf(格式控制,地址列表)
格式字符 | 说明 |
%d,%i | 输入有符号的十进制整数 |
%u | 输入无符号的十进制整数 |
%o | 输入无符号的八进制整数 |
%x | 输入无符号的十六进制整数 |
%c | 输入单个字符 |
%s | 输入字符串,将字符串送到一个字符数组中,在输入是以非空白字符开始,以第一个空白字符结束。 |
%f | 输入实数,可以用小数形式或指数形式输入 |
%e,%g | 与%f作用相同,e与f,g可以相互替换 |
字符 | 说明 |
l | 输入长整型数据(可用%ld,%lo,%lx,%lu,%lf,%e) |
h | 输入短整型数据(可用%hd,%ho,%hx) |
域宽 | 指定输入数据所占宽度,域宽应为正整数 |
* | 本输入项再度入后不赋给相应的变量 |
废话不多说,直接上代码理解:
#include <stdio.h>
main() {
ScanfTest(); //调用ScanfTest函数
}
ScanfTest() {
int num;
scanf("%d", &num); // 从键盘读取一个整数并存储到 num 变量中
float fnum;
scanf("%f", &fnum); // 读取一个单精度浮点数
double dnum;
scanf("%lf", &dnum); // 读取一个双精度浮点数
char chs;
scanf(" %c", &chs); // 读取一个字符
char str[10];
scanf("%s", str); // 读取一个字符串到 str 数组中
printf("%d,%f,%f,%c,%s", num, fnum,dnum,chs,str);
}
注:
- 地址列表中的变量必须使用取地址符
&
,除了数组名(数组名本身就代表数组的首地址)。 - 输入的数据类型和格式控制字符串中的格式字符必须匹配,否则可能导致错误的结果。
- 空白字符(空格、制表符、换行符等)在
scanf
中具有特殊的处理方式。例如,在读取整数或浮点数时,空白字符会被忽略;但在读取字符串时,遇到空白字符会停止读取。
四、其它输入输出语句
除上述所述的两种常用的外还有putchar(输出字符)、getchar(输入字符)、puts(输出字符串)、gets(输入字符串)
- putchar()函数:用于向标准输出(通常是屏幕)输出一个字符
- getchar()函数:用于输入一个字符
#include <stdio.h>
main() {
Others(); //调用Others函数
}
Others() {
char a, b, c;
a = getchar();
b = getchar();
c = getchar();
putchar(a);
putchar(b);
putchar(c);
}
注意:getchar
和 putchar
每次只能处理一个字符。如果要处理字符串或多个字符,通常会使用其他更复杂的输入输出函数,如 gets
、puts
、fgets
、fputs
等。但在一些简单的场景中,getchar
和 putchar
非常方便和高效。
五、输入输出时会出现的问题
5.1当scanf()在VStutio中出现报错时
5.2 当scanf("%c",&ch)直接跳过时
输入缓冲区中存在残留的字符,例如之前的输入操作留下了换行符等。在这种情况下,scanf("%c", &ch);
可能会直接读取到这些残留字符,而不是等待新的输入。
可以在 scanf("%c", &ch);
之前添加 fflush(stdin);
来清空输入缓冲区,但需要注意的是,fflush(stdin)
在某些编译器中可能不被支持或者行为未定义。
或可以尝试在输入字符之前先输入一个空格,例如我上述scanf讲解代码中的写法