C语言学习笔记4:getchar()与scanf()的联合使用关键

使用getchar与scanf联合使用时的注意要点

在程序中若先使用了scanf()进行了输入读取,再使用getchar进行字符读取,则会使程序输出结果出现问题:
这是因为在scanf()进行输入读取后,会把换行符保留在缓冲区,作为下次输入的读取,此时使用getchar进行输入字符的读取就会出现将缓冲区的换行符作为字符读取而导致程序错误;
此时的解决办法有二:
1、不使用scanf();
2、每次调用scanf()时后紧跟一getchar(),作为对scanf()的”影响消除”;

下列两个示例以加深记忆:
输入n个字符,判断并统计输入的各类字符数量

1、错误示例:

#include<stdio.h>
int main()    //统计英文字母和数字字符
{   
    int n,i;
    char ch;
    int Num_char=0,Num_Num=0,Num_other=0;
    printf("please enter the number of characters:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        ch = getchar();
        if(ch>='a' && ch<='z' || ch>='A' && ch<='Z')
        {
            Num_char++;
        }
        else if(ch>='0' && ch<='9')
        {
            Num_Num++;
        }
        else
        {
            Num_other++;
        }

    }
    printf("The number of letter is %d\nThe number of Number is %d\nThe number of other is %d",Num_char,Num_Num,Num_other);
    return 0;
}

程序运行结果:
在这里插入图片描述
错误

2、正确示例:

#include<stdio.h>
int main()    //统计英文字母和数字字符
{   
    int n,i;
    char ch;
    int Num_char=0,Num_Num=0,Num_other=0;
    printf("please enter the number of characters:");
    scanf("%d",&n);
    getchar();  //这里读入并舍弃换行符 使其不参与统计
    for(i=0;i<n;i++)
    {
        ch = getchar();
        if(ch>='a' && ch<='z' || ch>='A' && ch<='Z')
        {
            Num_char++;
        }
        else if(ch>='0' && ch<='9')
        {
            Num_Num++;
        }
        else
        {
            Num_other++;
        }

    }
    printf("The number of letter is %d\nThe number of Number is %d\nThe number of other is %d",Num_char,Num_Num,Num_other);
    return 0;
}

程序运行结果:在这里插入图片描述
正确

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
getcharscanf都是C语言中用于从标准输入中获取字符的函数。 使用scanf函数读取字符时,可以使用格式化字符串"%c"来指定输入的字符类型。例如,scanf("%c", &a)将会读取一个字符并将其存储到变量a中。需要注意的是,scanf在读取字符后会将换行符留在输入缓冲区中,这可能导致后续的输入操作出现问题。 而getchar函数则直接从标准输入中读取一个字符,并返回读取到的字符。它不需要格式化字符串,也不会将换行符留在输入缓冲区中。因此,getchar函数更适合用于读取单个字符。 在使用getchar函数时,我们通常需要使用一个额外的getchar函数来读取输入缓冲区中的换行符。这是因为在前一个输入操作之后,输入缓冲区中可能仍然存在一个换行符。如果不读取它,那么后续的getchar函数可能会直接读取到这个换行符,而不是我们期望的字符。 总结起来,scanf函数可以读取指定类型的字符,并且需要注意处理输入缓冲区中的换行符。而getchar函数则更简单直接,适用于读取单个字符。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言 字符输入 scanfgetchar的区别](https://blog.csdn.net/weixin_73832459/article/details/127747670)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值