注册 登录
编程论坛 C语言论坛

望解答

Z1020 发布于 2019-11-09 14:47, 2764 次点击
#include<stdio.h>
int main()
{
        char c1;
        int m=0,n=0,x;
        do{
            scanf("%c",&c1);
            if(c1>='0' && c1<='9')
            {m++;break;}
            else if(c1>=65 && c1<=122)
            n++;
        }
        while(scanf("%d",&x)!=EOF);
        printf("%d %d",n,m);
        return 0;}
判断输入数字和字母的个数,为什么我输出的m为0呢?初学望指教,谢谢。
11 回复
#2
Z10202019-11-09 14:58
#3
纯蓝之刃2019-11-09 15:28
程序代码:
#include<stdio.h>
int main()
{
    char c1;
    int m=0,n=0;

    while((scanf("%c",&c1)==1)&&(c1!='\n'))    //判断从c1是否正常从缓存中读取,且读取到的值不为'\n'。
    {
        if(c1>='0' && c1<='9')
            m++;
        else
            if(c1>=65 && c1<=122)
                n++;
    }

    printf("%d %d",n,m);

    return 0;
}


{m++;break;}
咱们先假设你的程序可以正常运行,这个表示当有数字输入的时候,m+1,并跳出while循环,这样m只能为1,如果输入的没有数字,m=0,只有这两种情况。我想你的意思是跳出if语句吧,break是用来跳出上一级循环用的,像跳出for,while,do..while循环用的。
while(scanf("%d",&x)!=EOF);
至于这个神奇的语句建议你看帖子
http://bbs.bccn.net/viewthread.php?tid=497677&page=1#pid2712555
#4
Z10202019-11-09 23:24
回复 3楼 纯蓝之刃
大佬好,我照着你的说明改了以下,但是判断数字的个数依然为零(输入了数字的),请大佬再帮我解答以下,萌新拜谢。
#include<stdio.h>
int main()
{
        char c1;
        int m=0,n=0,x;
        do{
            scanf("%c",&c1);
            if(c1>='0' && c1<='9')
            m++;
            else if(c1>=65 && c1<=122)
            n++;
        }
        while(scanf("%d",&x)!=EOF);
        printf("%d %d",n,m);
        return 0;}
#5
Z10202019-11-09 23:30
回复 3楼 纯蓝之刃
谢谢大佬,你给我的程序是可以的,但是我还是不知道我修改后的程序错在哪(我自己修改的程序还是错的)
#6
Z10202019-11-09 23:38
回复 3楼 纯蓝之刃
对了,这个程序还有一个条件,就是输入字母数字以后要以ctrl-z结束(手动笑哭),我忘了说。。。。。sorry sorry
#7
纯蓝之刃2019-11-10 08:20
while(scanf("%d",&x)!=EOF);
有很大的问题可以看一下帖子
http://bbs.bccn.net/viewthread.php?tid=497677&page=1#pid2712555

改成:while(c1!='\n');试试
#8
Z10202019-11-10 10:02
回复 7楼 纯蓝之刃
已看那个帖子,虽然看得似懂非懂的,但是while(scanf("%d",&n)!=EOF)不是可以表示以ctrl-c结束输入吗?因为题目中有要求以ctrl-c结束输入,如果换成while(c1!='\0'); 就会显示运行时间过长。。。
【问题描述】分别统计标准输入中字母、数字字符个数(输入以Ctr-z结束)。
【输入形式】从标准输入中读取一个字符串,可以包含任意字符。输入以Ctrl-Z结束。
【输出形式】分别输出字符串中字母(大小写字母都要进行统计)、数字个数,相邻数字之间用一个空格区分,输出末尾没有空格。
【样例输入】C Java -and- C++ are 3 lanuages. 2006-8-24 16:34
【样例输出】20 12
【样例说明】字符串中共有20个字母,12个数字,所以输出20 12
如有太傻了的地方,请多见谅。
#9
纯蓝之刃2019-11-10 10:35
程序代码:
#include<stdio.h>
int main()
{
    char c1;
    int m=0,n=0;
    while(scanf("%c",&c1)!=EOF)
    {
        if(c1>='0' && c1<='9')
        m++;
        else if(c1>=65 && c1<=122)
        n++;
    }
    printf("%d %d",n,m);
    return 0;
}

那就这样啊,把我给你的程序里的scanf("%c",&c1)!='\n'换成scanf("%c",&c1)!=EOF,就是不以回车为结束,判断以EOF为结束标志
#10
lidaufo2019-11-10 12:21
scanf("%c",&c1)!='\n'换成scanf("%c",&c1)!=EOF,就是不以回车为结束,判断以EOF为结束标志
#11
Z10202019-11-10 17:25
回复 9楼 纯蓝之刃
对了!谢谢大佬,但是我还有一个疑问就是我的原程序是这样的
#include<stdio.h>
int main()
{
        char c1;
        int m=0,n=0,x;
        do{
            scanf("%c",&c1);
            if(c1>='0' && c1<='9')
            m++;
            else if(c1>=65&&c1<=90||c1>=97&&c1<=122)
            n++;
        }
        while(scanf("%c",&c1)!=EOF);
        printf("%d %d",n,m);
        return 0;}
输出的m每次都为0(但n还是正常的),当我把scanf("%c",&c1);删掉之后,就可以正常输出了,我想问一下原理。感谢!!!
#12
Z10202019-11-10 17:26
回复 10楼 lidaufo
谢谢!已了解
1