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()同样可这么用:

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 中定义的函数:

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

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值