23)C语言之getchar()以及缓冲区
Posted 流浪孤儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23)C语言之getchar()以及缓冲区相关的知识,希望对你有一定的参考价值。
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int text(); int main() { int ch = 0; while ((ch = getchar()) != EOF)//EOF-end of file-文件结束标志---(-1),当getchar读取失败或者把文件读//完就会返回EOF { putchar(ch);//putchar输出一个字符 printf("\\n"); break; } text(); return 0; } //代码2 int text() { int ch1 =0; //ch1 = getchar(); while ((ch1 =getchar())!= EOF)//按下ctrl+z-getchar就读取结束 { //ch1 = getchar(); if (ch1 < '0' || ch1 > '9') { printf("请输入的ch1 大于'0' 以及小于 '9':"); continue; } putchar(ch1 ); break; } return 0; } |
函数原型:int getchar( void );
getchar的缓冲区
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int ch = 0; ch = getchar();//从键盘上输入字符后按enter会结束getchar的进程,然后下一条的输出会显示在下一行 printf("ch=%c\\n", ch); int ch1 = 0; while ((ch1 = getchar()) != EOF)//注意现在getchar()的缓冲区还有\\n没有读取会被这里的直接读取! //可以在while的前面再加一个如getchar();来取走\\n { if (ch1 < '0' || ch1 > '9') { printf("请输入的ch1 大于'0' 以及小于 '9':"); continue; } putchar(ch1); break; } return 0; } |
输入函数的缓冲区
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> //输入函数如scanf,getchar共用缓冲区 int main() { char password[20] = { 0 }; scanf("%s", password);//scanf确认缓冲区没有数据请求键盘输入,这里输入123456 /* 解决方法->清除缓冲区getchar(); */ printf("请确认密码(Y/N):>"); int ch = getchar();//scanf之前拿走了123456还有\\n被getchar拿走了因此getchar没有请求键盘输入 if (ch == 'Y') printf("密码确认成功"); else printf("密码确认失败");//这句语句执行了 return 0; } |
清除缓冲区内的内容
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//清除缓冲区进阶
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//数组名就是一个地址,这里输入123456 abcd,scanf读到空格返回
getchar();//scanf取走了123456,这里getchar只能取走一个空格,一个getchar取一个字符
/*
进阶清除缓冲区
int tmp=0;
while((tmp=getchar())!='\\n')
{
;
}
*/
printf("请确认密码(Y/N):>");
int ch = getchar();//此时ch为a
if (ch =='Y')
printf("确认成功");
else
printf("确认失败");
return 0;
}
//getchar返回的是整型1、,getchar读取的是字符,而字符在内存中以ASCII码形式储存,getchar返回的是ASCII值
// 2、当输入的字符错误使getchar会返回EOF,而EOF本质上是-1,-1不可能是ASCII值,但是整型
//gets函数可以处理空格问题即读一行,如
gets(password);//输入123456 abcd
//将123456 abcd存入到数组password中,’\\n’不会读取进去
以上是关于23)C语言之getchar()以及缓冲区的主要内容,如果未能解决你的问题,请参考以下文章