目录
一.C语言中常用的输入输出函数
1.1putchar/getchar
putchar是字符输出函数,putchar函数的作用是向终端发送一个字符。
函数原型:int putchar(int c)
函数说明:putchar的传入参数是int类型的,也就是说在传入参数时是以字符的ASCLL码,返回的时候也是以字符的ASCLL码进行返回的。输出的时候是以这个ASCLL所对应的字符进行输出到终端。
#include<stdio.h> //头文件,标准的输入输出流
int main() //main函数是程序的入口
{
char character='a'; //程序执行到了这里,操作系统会给变量character分配一块内存空间
// 然后把字符 ‘a’ 存储在了这一块空间
putchar(character);
/*在连续使用getchar函数时,使用了空格或者回车 做为分隔符,那么这些回车和空格也会被当作
字符获取到,这种对我们程序没有用的字符称为--垃圾字符,我们在终端连续获取多个字符 要注意清理
垃圾字符*/
return 0;// 因为 main() 函数的返回值类型为int 所以需要返回一个值
}
getchar是字符输出函数,getchar函数的作用获取一个字符。
函数原型:int getchar(void )
函数说明:获取到字符后,返回的也是这个字符对应的ASCLL
#include<stdio.h>
int main(){
char character=getchar();
putchar(character);
return 0;
}
1.2 puts/gets
puts函数原型:int puts(const char *s);
函数说明:puts函数的参数 s是一个指针变量,指针可以指向字符数组或是字符串常量。指针s指向的是字符数组的首地址,或是字符串常量的首地址。功能是向终端输出一个字符串 (自带换行符)。
#include<stdio.h>
int main(){
char name[]="张三";
puts(name);//puts接收的是字符串name的首地址,而不是字符串
return 0;
}
gets函数原型:char *gets(char *s); //这是一个指针函数,后续笔记会提到
函数说明:s 就是用来保存输入的字符串的缓冲区的首地址,返回值也是一个地址。但是需要注意的是使用时要保证缓冲区足够大 否则数组越界访问。
使用 gets() 时,系统会将最后“敲”的换行符从缓冲区中取出来,然后丢弃,所以缓冲区中不会遗留换行符,getchar()是需要清理垃圾字符
#include<stdio.h>
int main(){
char name[32];
gets(name);
printf("---------------------------");
printf("%s",name);
return 0;
}
/*
运行时会出现一个警告,这个警告是因为gets()函数没有限制字符串输入的大小,如果字符串的输入超过了
定义的name数组的大小,那么就会发生栈溢出。
解决方法:使用fgets(char * s,int size,FILE * stream);这个方法设置了字符串的大小
第一个参数 需要传入的是字符串或者字符数组的首地址
第二个参数限制了输入字符串的大小
第三个参数 需要传入的是输入或者输入流。参数输入stdin(标准输入)后就可以从键盘中读取数据了,
输入stdout(标准输出)后就可以把数据输出到终端了。
*/
1.3 printf/scanf
printf函数原型:int printf(const char *format, ...);
函数说明:格式化输出 按照指定的格式将内容输出到终端
format 格式:
%c 字符
%d 有符号十进制整型
%u 无符号十进制整型
%o 八进制
%x 十六进制
%f 浮点型
%s 字符串
%e 指数形式
%% 输出一个%
scanf函数原型:int scanf(const char *format, ...);
函数说明:输入函数,按照格式在终端获取内容,scanf格式与printf函数格式相同。
printf与scanf函数的用法
#include<stdio.h>
int main(){
int a;
char name[32];
scanf("%d",a); //当用户输入数据后按回车,scanf这时是从缓冲区读取的数据,而回车符号‘\n’会留在缓冲区
/*
scanf("%d\n",&a);
它的格式是 数字 回车
当用户第一次输入 数据 回车 时并不会结束程序 这时缓冲区里面没有数据
这时还需要用户再次输入数据 然后按回车键,使‘\n’留在缓冲区后结束当前代码,按顺序执行后续代码
*/
printf("输入数据:a=%d",a): //输出变量a里面存放的数据
scanf("%s",name); //因为name是一个常量,name是char类型数组的首地址,因此不需要取name的地址
printf("输入字符串:name= %s",name); //找到name数组的首地址,然后把里面的内容按照字符串的形式输出
return 0;
}