C语言 getchar()函数详解 您所在的位置:网站首页 在c语言中break什么意思 C语言 getchar()函数详解

C语言 getchar()函数详解

2024-05-29 16:07| 来源: 网络整理| 查看: 265

getchar()函数机制

getchar()函数实际上是int getchar(void),所以它返回的是ASCII码,所以只要是ASCII码表里有的字符它都能读取出来。在调用getchar()函数时,编译器会依次读取用户键入缓存区的一个字符(注意这里只读取一个字符,如果缓存区有多个字符,那么将会读取上一次被读取字符的下一个字符),如果缓存区没有用户键入的字符,那么编译器会等待用户键入并回车后再执行下一步 (注意键入后的回车键也算一个字符,输出时直接换行)。

来几个例子: int main() { char ch; printf("请输入字符:"); //1 2 回车 scanf("%c", &ch); // 读取 1 printf("%c", getchar()); //输出 2 }

运行实例: 在这里插入图片描述

第一个字符1被char ch读取,所以getchar()依次读取下一个未读取字符2

int main() { char ch; printf("请输入字符:"); //1 回车 scanf("%c", &ch); //读取 1 printf("|1%c1|", getchar()); //读取并输出 回车 }

运行实例: 在这里插入图片描述 char ch读取第一个字符1,注意:我们说过,用户键入的回车也算一个字符,所以这里getchar()把回车读取了,输出时体现为换行

int main() { char ch; printf("请输入字符:");//1 2 3 回车 scanf("%c", &ch);// 读取 1 printf("%c", getchar());// 读取并输出 2 printf("%c", getchar());// 读取并输出 3 printf("%c", getchar());// 读取并输出 回车 }

运行实例: 在这里插入图片描述

因为回车也算一个字符,所以如果在前面先要调用scanf()这种读取字符的函数后再键入新值调用getchar()(因为想要scanf()调用必须回车才能执行,就多了一个回车在缓存区中),建议清空缓存区再使用getchar(),不然getchar()会把前面回车也读取出来。注:可以使用fflush(stdin)清空缓存区(有的编译器用不了),推荐C语言基本语法:

char c_tmp; while ((c_tmp = getchar() != '\n') && c_tmp != EOF);

例子:

int main() { char ch[3]; printf("请输入字符ch:");// 1 2 3 回车 scanf("%s", &ch);// 读取123 printf("字符ch的值:%s\n",ch);//输出 字符ch的值:123 char c_tmp; while ((c_tmp = getchar() != '\n') && c_tmp != EOF); printf("请输入字符:");// 1 2 3 回车 printf("%c", getchar()); //由于清空了缓存区,第一个getchar()并没有读取123之后的回车,而是读取的1 printf("%c", getchar());// 读取并输出2 printf("%c", getchar());// 读取并输出3 }

运行实例: 在这里插入图片描述 如果没有清空缓存区呢?(结果可能有点不好理解,多分析一下)

int main() { char ch[3]; printf("请输入字符ch:");// 1 2 3 回车 scanf("%s", &ch);// 读取123 printf("字符ch的值:%s\n",ch); // char c_tmp; // while ((c_tmp = getchar() != '\n') && c_tmp != EOF); printf("请输入字符:");// 1 2 回车 printf("%c", getchar()); //第一个getchar()读取了123之后的回车,体现在printf("请输入字符:");中并没有换行符却换行了。 printf("%c", getchar());// 读取并输出 1 printf("%c", getchar());// 读取并输出 2 }

运行实例: 在这里插入图片描述

总结

getchar()在初次接触和使用时,大多数出错就是对于回车字符的读取。在调用时注意就会避免很多麻烦。调用前清空缓存区会是很好的解决办法。所以scanf()的优点就体现出来了,scanf()只有在格式化为"%c"时会读取回车符,但缺点也是无法读取含空格等字符的字符串并存储到字符数组中(严格意义上讲并不是字符串,可以理解为含格式化"%s"无法完整读取的字符组合,例如"gy gr 134 4353freg 32"这种中间有空格的)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有