c primer plus第7章总结:分支跳转

本文介绍了C语言中的基本输入输出函数getchar()和putchar()的使用方法,探讨了ctype.h头文件中字符属性判断函数的功能及应用,并通过示例展示了如何利用switch和if-else语句进行条件分支的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、getchar()和putchar():
     getchar() 没有参数,返回来自输入设备的下一个字符;
     putchar() 打印它的参数;
scanf() 返回的状态,getchar() 返回的元素的值,可以用输入元素的值本身决定何时终止循环;
类似scanf():
     while ((ch = getchar()) != '\n')

2、ctype.h:
     //  isalpha() 函数的参数是字母;
//  改变输入,只保留其中的空格
 ch = getchar();    
 while (ch != '\n')       
    {
        if (ch == SPACE)        
            putchar(ch);      
        else
            putchar(ch + 1);  
        ch = getchar();   
    }

//  改变输入,只保留非字母字符
 while ((ch = getchar()) != '\n')
    {
        if (isalpha(ch))      
            putchar(ch + 1);
        else                
            putchar(ch);      
    }



isalnum()   字母或数字
isalpha()    字母
isblank()    空白字符,空格、水平制表符、换行等
iscntrl()      控制字符,如ctrl+B
isdigit()      阿拉伯数字(0-9)
isgraph()    空格之外的打印字符
islower()    小写字母
isprint()     打印字符,包括空格
ispunct()   标点符号
isspace()   空白字符(空格,进纸,换行符,回车,水平制表符,垂直制表符)
siupper()   大写字母
isxdigit()   十六进制数
tolower() 如果参数为大写字母,即转化为小写字母,否则返回原值
toupper() 如果参数为小写字母,即转化为大写字母,否则返回原值

3、else if 嵌套:
     C99标准最少支持127层嵌套;
     如果没有花括号指明,else与它最近的一个if相匹配;

4、求值顺序;
     从一个操作数前进到下一个操作数之前,所有的副作用都会生效;C 保证 发现某个元素使表达式总体无效,求值立即停止;
     if (number != 0 && 12 / number == 2)     //   保证除数不为0
     while (x++ < 10 && x + y < 20)               // 保证在运行右边的表达式之前,先 x++

5、continue 和 break:
     continue 处于嵌套结构中时,仅影响包含它的最里层的结构;
     对于do while 和 while 循环,continue 语句之后的动作是求循环判断表达式的值;对于 for 循环,continue 语句之后的动作是先求更新表达式的值,在求循环判断表达式的值;
     break 导致程序终止包含它的循环,并进入程序的下一阶段;在for循环中,控制段的更新表达式也将被跳过;
     break 用于循环和switch语句,continue 仅用于循环;

6、switch 和 else if:
     switch:适用于字符和数字的分支;
     else if:适用字符、数字、浮点数、表达式等的分支;

课后习题
//#10 输入身份,选择税金种类和应征收税收入,然后计算税金;
#include "stdafx.h"
#include "stdio.h"
// 清除缓冲区
void clearBuffer()
{
    int c = 0;
    while ((c = getchar()) != '\n' && c != EOF)
        ;
}
int main()
{
    while (true)
    {
        int d = 0;
        float basepay = 0.0, prev_pay = 0.0f, tax_pay = 0.0f, pay = 0.0;
        printf("Enter the number corresponding to the desired pay rate or action:\n");
        printf("1)单身   2)户主\n3)已婚,共有  4)已婚,离异\n5)quit\n");

        while (scanf("%d", &d) != 1)                //用!= 执行错误提示,限制输入为int型
        {
            printf("please input right choice number(1-5):\n");
            clearBuffer();
        }

        bool valid = true;
        switch (d)
        {
        case 1: basepay = 17850; break;
        case 2: basepay = 23900; break;
        case 3: basepay = 29750; break;
        case 4: basepay = 14875; break;
        case 5: return 0;
        default:
            {
                printf("please input right choice number(1-5):\n");
                valid = false;        
            }
                break;                                // 输入数字错误,跳转到最开始 while (true)
        }

        if (!valid) continue;                        // 中间段语句,用if 来判断是否输出;

        printf("the basepay is %.1f$,and please input your figure:\n",
            basepay);

        while (scanf("%f", &prev_pay) != 1)            //用!= 执行错误提示,限制输入为数字
        {
            clearBuffer();
            printf("please input right figure:\n");
        }

        if (prev_pay < basepay)
            tax_pay = prev_pay * 0.15;
        else
            tax_pay = basepay * 0.15 + (prev_pay - basepay) * 0.28;
        printf("you have figure %.2f ,tax is %.2f\n",
            prev_pay,
            tax_pay);

        clearBuffer();               // 注意清除输入缓存
    }
}


     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值