2.1 字符输入/输出函数
C语言中的字符输入/输出函数主要接受用户从键盘输入的字符或在屏幕上输出字符。
2.1.1 getch函数和getche函数──接受从键盘输入的字符
1.函数原型
int getch();
int getche();
2.函数功能
getch函数和getche函数的功能都是接受从键盘输入的字符。
3.函数的返回值
getch函数和getche函数的返回值都是通过键盘输入的字符。
4.函数范例
/********************************************
*范例编号:02_01
*范例说明:接受从键盘输入的字符
*********************************************/
01 #include <stdio.h>
02 #include <conio.h>
#include <stdlib.h>
void main()
03 {
04 char ch;
05 printf(“请输入一个字符:\n”);
06 ch=getch();
07 printf(“\n输入的字符是:%c\n”,ch);
08 printf(“请输入一个字符:\n”);
09 ch=getche();
10 printf(“\n输入的字符是:%c\n”,ch);
11 system(“pause”);
12 }
该函数范例的运行结果如图2-1所示。
图2-1 函数范例的运行结果
5.函数解析
(1)在C语言中,getch函数和getche函数的原型都在stdio.h中;在C++中,getch函数和getche函数的原型都在conio.h中。
(2)getch函数与getche函数的区别:getch函数接受输入的字符但不显示在屏幕上,而getche函数则接受输入的字符并显示在屏幕上。
(3)getch函数和getche函数一次只能接受单个字符。
(4)getch函数和getche函数都不能接受键盘上的功能键和方向键。
2.1.2 getchar函数──接受一个字符并显示在屏幕上
1.函数原型
int getchar();
2.函数功能
getchar函数接受从键盘输入的字符并显示在屏幕上。
3.函数的返回值
函数的返回值是通过键盘输入的字符。
4.函数范例
/********************************************
*范例编号:02_02
*范例说明:接受通过键盘输入的字符
*********************************************/
01 #include <stdio.h>
02 #include <stdlib.h> void main()
03 {
04 char ch;
05 int count=0;
06 printf(“请输入一个文本串:”);
07 while((ch=getchar())!=’\n’)
08 {
09 putchar(ch);
10 count++;
11 }
12 printf(“\n共输入了%d个字符!”,count);
13 system(“pause”);
14 }
该函数范例的运行结果如图2-2所示。
图2-2 函数范例的运行结果
5.函数解析
(1)getchar函数并不是直接从键盘读取字符,而是从键盘缓冲区读取字符。当用户通过键盘输入字符后,将该字符存放到键盘缓冲区中,直到按下回车键时才从键盘缓冲区读入该字符。
(2)getchar函数与getch函数的区别:getchar函数等待按下回车键后才从键盘缓冲区读入字符;而getch函数则直接接受从键盘输入的字符,不会等待用户按回车键,用户只要按下一个键,getch函数就返回该字符。
2.1.3 gets函数──读取一个字符串
1.函数原型
char *gets(int *str);
2.函数功能
gets函数接受用户从键盘输入的一个字符串并存放到str指向的字符数组中。
3.函数参数
参数str:一个字符指针类型,指输入字符串的首地址。
4.函数的返回值
如果操作成功,则函数返回指向字符串的指针;否则,函数返回空指针NULL。
5.函数范例
/********************************************
*范例编号:02_03
*范例说明:从键盘读取一个字符串
*********************************************/
01 #include <stdio.h>
02 #include <stdlib.h>
03 #include <stdlib.h>
04 void main()
05 {
06 char name[20],*p,*q;
07 p=name;
08 printf(“请输入你的姓名(姓和名中间有一个空格): “);
09 gets(name);
10 printf (“你的姓名是:%s\n”,name);
11 p=name;
12 while(*p!=’ ‘)
13 p++;
14 q=p+1;
15 *p=’\0’;
16 printf(“姓:%s,”,name);
17 printf(“名:%s\n”,q);
18 system(“pause”);
19 }
该函数范例的运行结果如图2-3所示。
图2-3 函数范例的运行结果
6.函数解析
(1)gets函数持续读取字符直到遇到换行符,换行符不会进入字符串,它将被转换为空字符,作为字符串的结束符。
(2)参数str指向的内存单元必须事先分配,否则将出现错误。
(3)在使用gets函数接受用户输入的多个字符串时,可以将参数str定义为字符数组或字符指针类型,这两者是通用的。如果定义为字符指针类型,则需要为字符指针变量分配内存空间。例如,将范例中name对应的代码修改如下。
char *name;
name=(char*)malloc(sizeof(char)*20);
2.1.4 putchar函数──在屏幕上输出一个字符
1.函数原型
int putchar(int ch);
2.函数功能
putchar函数的功能是在屏幕上输出一个字符ch。
3.函数参数
参数ch:待输出的字符。
4.函数的返回值
调用成功时,函数返回要输出的字符ch;否则,函数返回EOF。
5.函数范例
/********************************************
*范例编号:02_04
*范例说明:在屏幕上输出一个字符
*********************************************/
01 #include <stdio.h>
02 void main()
03 {
04 char str[]=”Welcome to NorthWest University!”;
05 int i=0;
06 printf(“字符串:\n”);
07 while(str[i])
08 {
09 putchar(str[i]);
10 i++;
11 }
12 putchar(‘\n’);
13 }
该函数范例的运行结果如图2-4所示。
图2-4 函数范例的运行结果
6.函数解析
putchar函数的作用与putc(ch,stdout)的相同。在02_04范例的实现中,也可以将putchar函数用putc函数代替,代码如下。
01 #include <stdio.h>
02 void main()
03 {
04 FILE *stream;
05 char *p,ch,str[]=”Welcome to NorthWest University!”;
06 int i;
07 stream=stdout;
p=str;
08 for(p=str;(ch!=EOF)&&(*p!=’\0’);p++)
09 ch=putc(*p,stream);
put c(‘\n’,stream);
system(“pause”);
10 }
2.1.5 puts函数──在屏幕上输出一个字符串
1.函数原型
int puts(const char *str);
2.函数功能
puts函数的功能是在屏幕上输出一个字符串。
3.函数参数
参数str:指向输出的字符串,即字符串的首地址。
4.函数的返回值
如果调用成功,则函数返回一个非负的值;否则,函数返回EOF。
5.函数范例
/********************************************
*范例编号:02_05
*范例说明:在屏幕上输出一个字符串
*********************************************/
01 #include <stdio.h>
02 #include <stdlib.h>
03 void main()
04 {
05 char str[]=”A beautiful girl!”;
06 puts(“字符串:”);
07 puts(str);
08 puts(str+2);
09 puts(&str[2]);
10 system(“pause”);
11 }
该函数范例的运行结果如图2-5所示。
图2-5 函数范例的运行结果
6.函数解析
(1)参数str可以是字符串常量,也可以是字符数组或字符指针。
(2)puts函数在输出一个字符串后自动加上换行符,字符串最后的结束符不会被输出。
(3)puts函数的作用与2.3.6节中fputs(str,stdout)的相同。