getchar()与文件结束符EOF
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getchar()与文件结束符EOF相关的知识,希望对你有一定的参考价值。
参考技术A /***test13.cpp : Defines the entry point for the console application.
**系统winXP SP3 32位.
**getchar()与文件结束符EOF
*/
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char* argv[])
char cNum1;
char cNum2 = '\0';
printf("please input a char:\n");
cNum1 = getchar();
/*****************************
若输入±,则得出结果为cNum = ?
这是因为c是char类型,其取值范围是-128~+127,
±在其取值范围之外,故输出的值不可测。
若输入CTRL+Z(即文件结束符EOF),则输出error!EOF!
******************************/
if(cNum1 == EOF)
printf("error!EOF!\n");
else
printf("cNum1 = %c\n",cNum1);
if(cNum2 == EOF)
printf("error!EOF!\n");
else
printf("cNum2 = %c\n",cNum2);
printf("cNum2 = %d\n",cNum2); //0,\n的asc码是0
return 0;
Tips:getchar()在c语言中的是int型,正常情况下getchar()返回你输入的第一个字符,但是当碰到文件结束符亦或是读取错误时候,其无法返回有效的字符,而返回标志EOF,将EOF定义为-1,所以也就将getchar()的返回值类型设置为了int型。注意:这里若是输入的字符超出其表示范围的话,输出的值也是不可测的。如上面的例子。
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’不会读取进去
以上是关于getchar()与文件结束符EOF的主要内容,如果未能解决你的问题,请参考以下文章