概述
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); //输出时遇到第一个'