C Primer Plus学习_25 getchar()和putchar()还有ctype.h

getchar()和putchar()

到目前为止,出现的大多是程序都需要输入数值。接下来看看那输入字符的示例。scanf()和printf()根据%c转换说明读写字符已经老生常谈,getchar()和putchar()也可以做到,他们是字符输入/输出函数。

getchar()函数不带任何参数,它从输入列表中返回下一个字符,例如读取下一个字符输入,并赋给变量ch 。

ch = getchar( ) ;这条语句和scanf("%c", &ch );等同

同样的ch = putchar();这条语句和printf( "%c", ch );等同

由于这两个函数只处理字符,所以它们比scanf()和printf()更快、更简洁。而且,getchar()和putchar()不需要转换说明。getchar()和putchar()通常定义在stdio.h头文件中(这倒是和scanf()和printf()一样了)

/*cypher.c -- 更改输入,空格不变*/
#include <stdio.h>
#define SPACE ' '
int main(void)
{
	char ch;
	
	ch = getchar();
	while(ch != '\n'){
		if(ch == SPACE){
			putchar(ch);
		}else{
			putchar(ch + 1);
		}
		ch = getchar();
	}
	putchar(ch);
	
	return 0;
 } 

运行一下:

CALL ME RJF

DBMM NF SKG

前面的程序中常出现如下语句:

while(scanf("%lu", &num) == 1)

这里的getchar()同样可这么用:

扫描二维码关注公众号,回复: 117537 查看本文章
while((ch = getchar()) != '\n')

注意,在后者中多了一个(),这是由于!=的优先级高于=,如果没有()先计算的就将是getchar( ) != ‘\n’,其运算结果将是0或1(真或假),然后将0或1赋给ch。这不是我们的初衷,所以如果要使用这种方法一定不能忘了加上()。

ctype.h系列的字符函数

在程序cypher1.c中有一些不太好的地方 ,比如,如果输入的不是字母而是一些符号比如" . " ,转换得到的将是“ / ”,因为在C提供的ASCII中,反斜杠”/“比“  .  ”的ASCII值多1 。后面将会讲到如何用逻辑运算符来测试字符是不是空格,逗号之类的符号,但列出所有的可能性实在太繁琐。C有一些列专门处理字符的函数。ctype.h头文件包含了这些函数的原型。这些函数接受一个字符作为参数,如果该字符属于特定的类别,就返回一个非零值(真),否则就返回一个0(假)。

在cypher1.c中输入Look! It is a programmer!,来看看运行结果如何,

Look! It is a programmer!

Mppl" Ju jt b qsphsbnnfs"

真印证了上面所提到的,cypher1.c将所有的字符都加了1,而我们希望保留下原有的符号。cypher2.c就能满足这一要求:

/*cypher2.c -- 更改输入,符号不变*/
#include <stdio.h>
#define SPACE ' '
int main(void)
{
	char ch;
	
	ch = getchar();
	while(ch != '\n'){			// while((ch = getchar()) != '\n')
		if(isalpha(ch)){
			putchar(ch + 1);
		}else{
			putchar(ch);
		}
		ch = getchar();
	}
	putchar(ch);
	
	return 0;
 } 
  
Look! It is a programmer!

Mppl! Ju jt b qsphsbnnfs!

下面列出了头文件 ctype.h 中定义的函数:

序号 函数 & 描述
1 int isalnum(int c)
该函数检查所传的字符是否是字母和数字。
2 int isalpha(int c)
该函数检查所传的字符是否是字母。
3 int iscntrl(int c)
该函数检查所传的字符是否是控制字符。
4 int isdigit(int c)
该函数检查所传的字符是否是十进制数字。
5 int isgraph(int c)
该函数检查所传的字符是否有图形表示法。
6 int islower(int c)
该函数检查所传的字符是否是小写字母。
7 int isprint(int c)
该函数检查所传的字符是否是可打印的。
8 int ispunct(int c)
该函数检查所传的字符是否是标点符号字符。
9 int isspace(int c)
该函数检查所传的字符是否是空白字符。
10 int isupper(int c)
该函数检查所传的字符是否是大写字母。
11 int isxdigit(int c)
该函数检查所传的字符是否是十六进制数字。

标准库还包含了两个转换函数,它们接受并返回一个 "int"

序号 函数 & 描述
1 int tolower(int c)
该函数把大写字母转换为小写字母。
2 int toupper(int c)
该函数把小写字母转换为大写字母。
摘自:http://www.runoob.com/cprogramming/c-standard-library-ctype-h.html


猜你喜欢

转载自blog.csdn.net/rjf666/article/details/80212473
今日推荐