C语言输入输出函数的总结

来源:互联网 发布:少女前线突击步枪数据 编辑:程序博客网 时间:2024/05/26 19:20

1. getchar()  和  scanf(“%c”) (可以接收空格ASCII码32,即空格) 和 gets()是从当前位置接收,所以在之前位置有回车‘\n’将被接收。


getchar(),scanf("%c",...),gets()均为从当前位置开始接收,空格、回车、Tab键均接收。以回车作为结束符。

所以,当在某条getchar(),scanf("%c"),gets()之前有输入语句时,应做一下处理,防止回车符被接收

由于回车也是gets()的结束符,所以当gets()当接收到回车符时,此输入语句即结束。

处理办法2种:

1)应该在之前加getchar()或gets()或fflush(stdin);

接收之前的回车,空格,Tab键。
另外

当函数中有如下语句

scanf("%d",&a);

scanf("%c%c",&m,&n);

若输入65回车ab,

则输出
65
a
因为第一个&m存放在65后面的回车键,故第二个%c位置才接收字符a,b无法接收。


2)若改为如下,(即在第一个%c前加空格)
scanf("%d",&a);
scanf(" %c%c",&m,&n);
输入65回车ab
则输出
65ab

2.scanf(“%s”) 读入的时候是会忽略掉空格,回车和制表符的,
从非空白字符开始接收,故输入非空白符之前可以任意输入空格、回车等空白字符。
并且以空格,回车和制表符作为字符串输入结束的标志。因此当输入字符串:hello world时,只能接收hello,因为hello后的空格即被当做了字符串输入的结束符。

3.scanf("%d %d",&n,&m);//在输入前一个数之后,遇到下一个
非空白字符时再读入,故输完第一个数后可以任意输入的回车或者空格


4.gets()可完整接收字符串,从当前位置开始接收,以回车作为结束标志。
char str[12];

gets(str);

则包括空格符,制表符也会被接收,可完整接收hello world

puts()输出字符串且具有自动换行功能;



以下程序可作为参考,以便于自己逐条尝试归纳总结。

本人也是新手,觉得,很多东西还是要自己总结了才能有更准确的记忆和更深刻的理解。

以上仅为本人就个人所接触到的易错的C输入总结。如有问题,请指正,我一定虚心接受。

#include<stdio.h>
int main(void)
{
char str[15];


/*输入*/


    //scanf("%s",str);
    /*
1.不读入字符串中的空格和回车,从空格处结束,即,
        假如输入hello world,则从hello后的空格处结束输入,
        world不被接收
        2.输入字符串长度超过字符数组元素个数,不报错
3.当输入项为字符指针时,指针必须已指向确定的
        有足够空间的连续存储单元
4.当为数组元素地址时,从此元素地址开始存放
    */
//gets(str);//gets()可以获取输入时键入的空格,
        即,可以完整的接收hello world
sscanf(str,"%s");


/*输出*/


printf("%s",str);           //输出时遇到第一个'\0'为止
//puts(str);                        //包含换行‘\n’
return 0;
}


#include<stdio.h>
int main(void)
{
int n,m;
char str[20];
scanf("%d %d",&n,&m);//在输入前一个数之后,遇到下一个非空白字符时再读入,遇到空格
//getchar();
//gets(str);


printf("%d %d\n",n,m);
//puts(str);
return 0;
}






#include<stdio.h>
int main(void)
{
int n,m,i;
char str[20];
for(i=0;i<19;i++)
{
scanf("%s",&str[i]);//
//getchar();
//gets(str);
}
//printf("%d %d\n",n,m);
puts(str);
return 0;
}




#include<stdio.h>
int main(void)
{
int a;
char str[20];
scanf("%d",&a);
//scanf("%s",str);
gets(str);
//str[0] = getchar();
printf("%d\n%s",a,str);
//printf("%d\n%c ",a,str[0]);


return 0;
}
原创粉丝点击