另一个例子:介绍getchar ()和putchar ()
这两个函数是专门为面向字符输入和输出而设计的一对函数。
getchar ()函数没有参数,它返回来自输入设备的下一个字符。
如:ch = getchar ();语句读取下一个输入字符并将它的值赋给变量ch他的与scanf (“%c”,&ch);一样。而putchar ()则对应于printf ()。putchar (ch),同printf (“%c”,ch); 一样的的效果,即输出ch.。因为gutchar ()与putchar()是专门处理字符的所以它们比通用的输入输出函数scanf ();与printf();更快而且更简洁。同时gutchar()与putchar()它们不需要格式说明符,因为它们只能处理字符,这个函数它们都在stdio.h文件中定义,且它们通常只是预处理的宏,而不是真正的函数。
//7-2.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 ;
}
这个程序和7-1.c中的循环比较在7-1.C中用scanf ()返回的状态而不是输入的元素的值来定何时终止循环。而在7-2.c中则由输入元素的值本身决定何时终止循环,这种不同使一个“读”语句在循环之前,另一个读语句在每次循环的结尾。
ctype.h实列字符函数:
在ctype.h中包含一些接受字符作为参数的函数,如果该字符属于某特定的种类则返回非零值(真),否则返回零(假)
//7-3.c --改变输入,只保留非字母字符
#include <stdio.h>
#include <ctype.h>
int main (void)
{
char ch;
while ((ch = getchar ()) != '\n')
{
if (isalpha (ch))
putchar (ch + 1);
else
putchar (ch);
}
putchar (ch);
return 0 ;
}
映射函数并不改变原始的参数,它们只返回改变后的值 ,tolower(ch)//对ch没有影响
ctype.h的字符判断函数
函数名
|
为如下参数时,返回值为真
|
isalnum()
|
字母数字(字母或数字)
|
isalpha()
|
字母
|
isblank()
|
一个标准的空白字符(空格,水平制表或者换行)或者任何其它本地化指定这空白符的字符
|
iscntrl()
|
控制符,例如Ctrl + B
|
isdigit()
|
阿拉伯数字
|
isgraph()
|
除空格符之外的所有可打印字符
|
islower()
|
小写字母
|
isprint()
|
可打印字符
|
ispunct()
|
标点符号(除空格和字母数字外的可打印字符)
|
isspace()
|
空白字符:空格,换行,走纸,回车,垂直制表符,水平制表符,或可能是其它本地化定义的字符
|
isupper()
|
大写字母
|
isxdigit()
|
十六进制数字字符
|
ctype.h的字符映射函数
函数名
|
动作
|
tolower()
|
如果参数是大写字母,返回相应的小写字符;否则,返回原始参数
|
toupper()
|
如果参数是小写字母,返回相应的大写字符;否则,返回原始参数
|
多重选择else if
如果有两个以上的选择可以用else if 扩展if else结构来适应这种情况。
//7-4.c 计算用电账目
#include <stdio.h>
#define RATE1 0.12589
#define RATE2 0.17901
#define RATE3 0.20971
#define BREAK1 360.0
#define BREAK2 680.0
#define BASE1 (RATE1 * BREAK1)
#define BASE2 (BASE1 + (RATE2 * (BREAK2 - BREAK1)))
int main (void)
{
double kwh;
double bill;
printf ("Please enter the kwh used .\n");
scanf ("%lf",&kwh);
if (kwh <= BREAK1)
bill = RATE1 * kwh;
else if (kwh <= BREAK2)
bill = BASE1 + (RATE2 * (kwh - BREAK1));
else
bill = BASE2 + (RATE3 * (kwh - BREAK2));
printf ("The charge for %.lf kwh is $%1.2f.\n",kwh,bill);
return 0 ;
}
本程序用符号常量表示费率,为以后的程序维护提供方便。
else 与if的配对:在没有花括号指明时,else与和它最接近的一个if 配对。
转载于:https://blog.51cto.com/ghskdq/1047376