c primer plus(第五版)读书笔计 第七章(2)

 

另一个例子:介绍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 配对。

你可能感兴趣的:(c,Primer,plus(第五版)读书笔计,第七章(2))