您的位置:首页 > 编程语言 > C语言/C++

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

2012-11-16 23:25 302 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: