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

区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

2010-08-04 13:19 405 查看



/article/6382947.html

首先,这两个函数不是C标准库中的函数,

int getch(void)  //从标准输入读入一个字符,当你用键盘输入的时候,

屏幕不显示你所输入的字符。也就是,不带回显。
int getche(void)    //从标准输入读入一个字符,键盘输入的时候,

屏幕显示所输入的字符。带回显。

这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。

Micorsoft 和 Borland的 C编译器提供了conio.h,用来创建控制台文本用户界面。

一般在Windows系统下安装了VS、VC等,就可以包含conio.h头文件。

但是一般在Unix、Linux系统中,/usr/include/中都没有这个头文件。

getch和getche在等待用户从键盘输入的时候,用户按下一个键后,不需要按回车,

程序自动往下执行。在Linux中,终端输入在缺省情况下是被“一锅端”的,

也就是说整行输入是被一起处理的。通常,这是一种人们所希望的方便的办法,

但它也意味着在读入数据时必须按一下回车键表示输入行结束后才能得到输入的数据。

在游戏中,很多都提供了“老板键”,它的实现,就是利用了这两个函数。

其次,除了getch和getche,其他的都是C标准库中的头文件,包含在头文件stdio.h中。

int getchar ( void );

//从标准输入stdin读入一个字符,程序等待你输入的时候,你可以输入多个字符,回车后程序继续执行。

//但getchar只读入一个字符


fgetc与fputc,fgets,fputs

#include <stdio.h>
int main()
{
FILE *fpRead,*fpWrite;
char ch;
fpRead = fopen("a.txt","r");
if (fpRead == NULL){
puts("File Open Fail!");
return 0;
}
fpWrite = fopen("b.txt","w");
if (fpWrite == NULL){
puts("File Create Fail!");
return 0;

}

do{
ch = fgetc(fpRead);
if ( ch != EOF){ / *判断文件是否结束的一种方法*/
fputc((ch+1)%256,fpWrite);
}
else
break;

} while(1);
fclose(fpWrite);
fclose(fpRead);
return 0;
}

//------------------------------------------------------------------------------------//
建议不要用getch和getche,因为它们不是C标准库中的函数。
用它们写出的程序可移植性差,不同的编译器不保证可以包含conio.h。
建议用fgets函数彻底替代gets函数。

说明:getc、getchar都是通过宏定义借助fgetc实现。

如getchar的实现为,#define getchar() fgetc(stdin)。
int putchar ( int character ); 
//通过宏定义实现:#define putchar(c) fputc(c, stdout)

char * fgets (char * str, int num, FILE *stream);

//从流stream中读入最多num个字符到字符数组str中,当遇到换行符时、或读到num-1个字符时停止。

//自动加上'/0'空字符结尾


char * gets ( char * str );
//从标准输入stdin读取一个字符串,遇到换行或结束时候终止。

//不同于fgets,他没有指定num,所以需要注意字符数组str的大小。


int fputs ( const char * str, FILE * stream );

int puts ( const char * str );

说明:两者之间无宏定义实现关系。puts(const char *str)近似等效于fputs(cosnt char *str, stdout),不同点是前者还输出一个'/n'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: