前言:想必这几个函数困扰了小伙伴们很久,这里小编就用最简单的方法讲解它们的表层区别。
1.输入和输出时的区别
这里以一个字符数组为例,要自己输入字符存入数组中,例如:
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
return 0;
}
scanf:输入
用scanf函数实现要用循环
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
for(n=0;n<=4;n++)
{
scanf("%c",&ch[n]); //正常输入就好,不用空格隔开 ,一次只会读取一个字符
}
return 0;}
这里如果你输入的是 !@#$% , 那么存入数组ch的也是!@#$%。
printf: 输出
printf也是一次只能输出一个字符,所以也要用循环
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
for(n=0;n<=4;n++)
{
scanf("%c",&ch[n]); //正常输入就好,不用空格隔开 ,一次只会读取一个字符
}
for(n=0;n<=4;n++)
{
printf("%c",ch[n]); //打印
}
return 0;}
这样你前面输入的是!@#$%,输出的就是!@#$%
gets: 输入
用gets来实现前面的输入
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
gets(ch); //输入字符 正常输入
return 0;
}
如果我们直接输入!@#$%,然后回车编译会报错,数组溢出,因为回车也被计入ch数组
那么我们就只能输入四个字符
输入!@#$,编译就不会报错
puts: 输出
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
gets(ch); //输入字符 正常输入
puts(ch); //打印 输出字符
return 0;
}
如果我们输入!@#$,这里就会输出!@#$在屏幕上
getchar: 输入
用getchar来实现前面的输入
要注意getchar的返回类型是int,形式参数是void,并且一次只能输入一个字符,所以也要用循环
int getchar(void);
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
int sum[5]={0}; //创建字符数组sum来存放getchar的返回值
for(n=0;n<=4;n++)
{
sum[n]=getchar(); //正常输入就好 ,不会把回车计入
ch[n]=sum[n]; //再转换成ch中的字符
}
return 0;
}
putchar: 输出
int putchar(int char);
一次只能输出一个字符,所以也要用循环,并且它的形式参数是int char,
#include<stdio.h>
int main()
{
char ch[5]={'0'}; //创建字符数组ch
int n=0;
int sum[5]={0}; //创建字符数组sum来存放getchar的返回值
for(n=0;n<=4;n++)
{
sum[n]=getchar();
ch[n]=sum[n];
}
for(n=0;n<=4;n++)
{
putchar(sum[n]); //输出字符,打印
}
return 0;
}