输入输出函数和分支控制语句
文章目录
一、C语言中常用的输入输出函数
输入输出的方式,了解一下即可,会用就行,无需过度纠结他。
原因:
1、实际开发的项目中,基本没有和终端的交互,一般都是和文件交互;
2、笔试面试的过程中,基本上也不会考很多关于输入输出的方式;
我们学习这些方法就是为了方便学习阶段看现象,从而更好的理解知识点的。
1.1 putchar/getchar
1.1.1 putchar
功能:向终端输出一个字符
头文件:#include
函数原型:int putchar(int c);
参数: c 用来保存要输出字符的ascii码的
#include <stdio.h>
int main(int argc, const char *argv[])
{
//可以传 字符的 ascii码
putchar(65);//A
putchar(10);
//也可以传字符常量
putchar('B');//B
putchar('\n');
//也可传保存ascii码的变量
int num = 67;
putchar(num);//C
putchar('\n');
//也可以传一个表达式
putchar('A'+3);//D
putchar(10);
return 0;
}
备注:
输入数字打印ASSCII码表对应值,输入ASSCII值输出对应数字
65-A 97-a 48-0 32-空格键space 10-\n 换行符
字符常量 ‘’ 里面包裹什么输出什么(特殊含义的除外如:\n 、\0)
1.1.2 getchar
功能:在终端获取一个字符
头文件:#include
函数原型:int getchar(void);
返回值: 输入的字符
#include <stdio.h>
int main(int argc, const char *argv[])
{
#if 0
char value = 0;
value = getchar();
printf("您输入的字符是 [%d] [%c]\n", value, value);
#endif
//当多个getchar连续使用时 要注意清理垃圾字符
//所谓的垃圾字符 就是我们不想得到的 回车 空格 等
char v1=0, v2=0, v3=0;
v1 = getchar();
getchar();//用来吃掉垃圾字符
v2 = getchar();
getchar();//用来吃掉垃圾字符
v3 = getchar();
getchar();//用来吃掉垃圾字符
printf("v1 = [%d] [%c]\n", v1, v1);
printf("v2 = [%d] [%c]\n", v2, v2);
printf("v3 = [%d] [%c]\n", v3, v3);
return 0;
}
1.2 puts/gets
1.2.1 puts
功能:向终端输出一个字符串
头文件:#include
函数原型:int puts(const char *s);
参数: s 要输出的字符串的首地址
#include <stdio.h>
int main(int argc, const char *argv[])
{
//可以直接输出字符串常量
//puts 是自带换行符的
puts("hello");//hello
//也可以输出保存字符串的数组
char str[32] = "beijing";
puts(str);//beijing
//也可以输出指向字符串的指针
char *p = "www.baidu.com";
puts(p);//www.baidu.com
//puts遇到 '\0' 就停止了 后面的字符 不再继续输出
puts("abcd\0efg");//abcd
return 0;
}
1.2.2 gets
功能:在终端获取一个字符串
头文件:#include
函数原型:char *gets(char *s);
参数:s 用来保存输入的字符串的缓冲区的首地址
#include <stdio.h>
int main(int argc, const char *argv[])
{
//注意:使用gets 要保证用来保存字符串的数组足够大 否则会出现越界访问
char s1[32] = {0};//定义了一个数组 并全部初始化成0
gets(s1);
puts(s1);
return 0;
}
注意:使用gets 要保证用来保存字符串的数组足够大 否则会出现越界访问
1.3 printf/scanf
1.3.1 printf
功能:按照指定的格式,向终端输出一个字符串----格式化输出
头文件:#include
函数原型:int printf(const char *format, …);
参数:
format :格式
%c 输出字符
%d 输出整型,有符号
%u 输出整型,无符号
%o 输出八进制
%x 输出十六进制
%f 浮点型
%e 指数形式
%% 输出%
附加格式说明:
l (小写的L)输出 long 或者 long long 或者double时用的
# 输出前导符
.n 输出n位小数 n是一个数字
m m是一个数字,可以用来指定输出的数据的位宽
0 如果数据不足指定的位宽 则使用0填充
-
左对齐
-
如果是正数 输出时显示正号 负数会忽略+
… : 可变参,个数和类型取决于format
#include <stdio.h>
int main(int argc, const char *argv[])
{
int hour = 10;
int min = 9;
int sec = 5;
printf("%d:%d:%d\n", hour, min, sec);// 10:9:5
printf("%2d:%2d:%2d\n", hour, min, sec);// 10: 9: 5
printf("%02d:%02d:%02d\n", hour, min, sec);// 10:09:05
int value = 1234;
printf("%2d\n", value);//1234 如果指定的位宽不够 以实际为准
printf("%10d\n", value);//默认右对齐
printf("%-10d\n", value);//左对齐
printf("%+d\n", value);// +1234
value = -100;
printf("%+d\n", value);// -100 负数会忽略 +
return 0;
}
1.3.2 scanf
功能:按照指定的格式,在终端获取数据----格式化输入
头文件:#include
函数原型:int scanf(const char *format, …);
参数:
format :格式
和前面printf的用法基本一样。
注意:scanf的格式不能乱写,写成什么样的格式,输入就得按照什么格式输入
… : 可变参,个数和类型取决于format 如果是变量,记得要 &
#include <stdio.h>
int main(int argc, const char *argv[])
{
//--------------------int-----------------
#if 0
int m = 0;
int n = 0;
//scanf 可以连续获取多个数据
//输入时 使用 空格 或者 回车 分隔
scanf("%d%d", &m, &n);
printf("m = %d, n = %d\n", m, n);
scanf("%d:%d", &m, &n);//如果是这样写格式 输入时就必须用 : 分隔
//否则获取不到
printf("m = %d, n = %d\n", m, n);
#endif
//------------------char-----------
#if 0
char m;
scanf("%c", &m);
printf("%c\n", m);
#endif
//-------------float--------------
#if 0
float m;
scanf("%f", &m);
printf("%f\n", m);
#endif
//----------------string--------
char str[32];
//scanf("%s", str);//数组名就是首地址 无需加 &
//printf("%s\n", str);
//scanf不能输入带有空格的字符串
//如果想输入带有空格的字符串 可以使用 gets
//或者使用正则表达式也行 --不常用
scanf("%[^\n]", str);//--正则表达式,了解即可
printf("%s\n", str);
return 0;
}
1.4 垃圾字符的处理
#include <stdio.h>
int main(int argc, const char *argv[])
{
//场景1:多次连续调用 getchar() 时
//处理方式:在每两次调用 getchar之间加一个getchar 用来吃掉垃圾字符 回车
#if 0
//场景2:多次使用scanf连续获取字符时
//处理方式:在每两次调用 scanf之间加一个getchar 用来吃掉垃圾字符 回车
char a,b,c;
scanf("%c", &a);
getchar();
scanf("%c", &b);
getchar();
scanf("%c", &c);
printf("a = [%d] [%c]\n", a, a);
printf("b = [%d] [%c]\n", b, b);
printf("c = [%d] [%c]\n", c, c);
#endif
//场景3:使用scanf 一次获取多个字符时
char a,b,c;
//scanf("%c%c%c", &a, &b, &c);
//处理方式1:使用抑制符来处理 %*c
//抑制符的作用是获取数据 但是 不赋值给后面的变量
//注意:抑制符是一定要吃掉一个字符的 他并不管是不是垃圾字符
//scanf("%c%*c%c%*c%c", &a, &b, &c);
//处理方式2: 可以在格式中使用空格来处理--推荐的处理方式
//空格可以吃掉多个空格 或者 回车
scanf("%c %c %c", &a, &b, &c);
printf("a = [%d] [%c]\n", a, a);
printf("b = [%d] [%c]\n", b, b);
printf("c = [%d] [%c]\n", c, c);
//注意 %d 是不会有垃圾字符的问题的
return 0;
}