为了账号安全,请及时绑定邮箱和手机立即绑定

最后为什么直接跳过了一个输入,无法输入指定字符,求大神解答

/ 猿问

最后为什么直接跳过了一个输入,无法输入指定字符,求大神解答

C
可乐不冒泡 2018-12-02 20:09:32

#include<stdio.h>

void ck(int n,char ch[100],char j)

{

    int count=0,m;

    for(m=0;m<n;m++)

    {

        if(ch[m]==j)

            ++count;

    }

    printf("指定字符的个数是%d个",count);

}

int main()

{

    char ch[100],j;

    int i,n;

    printf("请输入字符长度:");

    scanf("%d",&n);

    printf("请输入字符数组数据:");

    for(i=0;i<n;i++)

    {

        scanf("%c",&ch[i]);

    }

    printf("请输入指定字符:");

    scanf("%c",&j);      //这里运行时直接跳过了

    printf("\n");

    ck(n,ch,j);

    return 0;

}


查看完整描述

1 回答

?
想长高的小孩

两个可能性虽然本质是相同的;

第一个就是因为是字符,所以输入时打入的转行键被读取,直接被最后一个输入的j读取;

第二个也是因为输入的字符超出了第二个输入数据所要的个数,所以被后面的输入函数读取了;

总而言之就是缓存区有数据所以直接被后面的输入函数读取了,所以在最后一个输入函数之前清除一遍缓冲区;

两个方法:

如果可以可以用fflush(stdin)

#include<stdio.h>

void ck(int n,char ch[100],char j)

{

    int count=0,m;

    for(m=0;m<n;m++)

    {

        if(ch[m]==j)

            ++count;

    }

    printf("指定字符的个数是%d个",count);

}

int main()

{

    char ch[100],j;

    int i,n;

    printf("请输入字符长度:");

    scanf("%d",&n);

    printf("请输入字符数组数据:");

    for(i=0;i<n;i++)

    {

        scanf("%c",&ch[i]);

    }

    printf("请输入指定字符:");

    fflush(stdin);//这个可以清除缓冲区

scanf("%c",&j);      //这里运行时直接跳过了

    printf("\n");

    ck(n,ch,j);

    return 0;

}

第二个方法,因为有些编译器不能使用这个函数,所以可以自行百度一下,可以用的清除缓冲区的方法,因为我用的编译器可以用,所以我就没有学;

希望对你有帮助,见谅

查看完整回答
反对 回复 2018-12-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信