| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2475 人关注过本帖
标题:望解答
只看楼主 加入收藏
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:11 
望解答
#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呢?初学望指教,谢谢。
搜索更多相关主题的帖子: scanf int 输入 判断 return 
2019-11-09 14:47
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
收藏
得分:0 
2019-11-09 14:58
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:20 
程序代码:
#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

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-09 15:28
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
收藏
得分:0 
回复 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;}
2019-11-09 23:24
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
收藏
得分:0 
回复 3楼 纯蓝之刃
谢谢大佬,你给我的程序是可以的,但是我还是不知道我修改后的程序错在哪(我自己修改的程序还是错的)
2019-11-09 23:30
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
收藏
得分:0 
回复 3楼 纯蓝之刃
对了,这个程序还有一个条件,就是输入字母数字以后要以ctrl-z结束(手动笑哭),我忘了说。。。。。sorry sorry
2019-11-09 23:38
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
while(scanf("%d",&x)!=EOF);
有很大的问题可以看一下帖子
http://bbs.bccn.net/viewthread.php?tid=497677&page=1#pid2712555

改成:while(c1!='\n');试试

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-10 08:20
Z1020
Rank: 1
等 级:新手上路
帖 子:63
专家分:5
注 册:2019-11-9
收藏
得分:0 
回复 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
如有太傻了的地方,请多见谅。
2019-11-10 10:02
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:570
专家分:3727
注 册:2019-7-29
收藏
得分:0 
程序代码:
#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为结束标志

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-11-10 10:35
lidaufo
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2019-11-10
收藏
得分:0 
scanf("%c",&c1)!='\n'换成scanf("%c",&c1)!=EOF,就是不以回车为结束,判断以EOF为结束标志
2019-11-10 12:21
快速回复:望解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018650 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved