| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 266 人关注过本帖
标题:帮忙看看这个程序问题出在哪?
只看楼主 加入收藏
zpcg
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-8-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
帮忙看看这个程序问题出在哪?
程序代码:
/**********************************************/
/* 用自定义函数的方法统计输入的字符出现数字,  */
/*   (空格,制表符,回车),和其它字符的次数.     */
/**********************************************/



#include <stdio.h>
void main()
{
    void num(int n[], char c);  //统计数字
    int blank( char c);         //统计空格,回车,制表符
    int others( char c);        //统计其它字符
   
    int i, s2, s3, n[10] = { 0 };
    char c;
    printf("input: \n");
   
    while(c != '\0')
    {
        c = getchar();
        putchar(c);   
       
        num(n, c);
        s2 = blank(c);
        s3 = others(c);
    }
    for(i = 0; i < 10; i++)
    {printf("n[%d] = %d   ", i, n[i]);}
    printf("\nblank = %d", s2);
    printf("\nothers = %d\n", s3);
}

void num(int n[], char c)
{
    int i;
    if(c >= 48 && c <= 97)
    {
        for(i = 0;i < 10; i++)
        {
            if(c == i + 48)
            { 
                n[i]++;
            }
        }
    }
}


int blank(char c)
{
        static p = 0;    //静态变量,P值出此函数后仍保持上次值。
        if (c =='\n' || c == '\t' || c == ' ')
            p = p + 1;
    return p;
}


int others(char c)
{
    extern q;         //声明q为外部变量,也为了q值能保持上次值。
        if (c != '\n' && c != '\t' && c != ' ' && (c < 48 || c > 97))
            q = q + 1;
    return q;
}
int q = 0;

结果:我是用数组n[10]来表示数字出现次数,编译的时候,其它字符的统计总是出错,不知道为什么?


[ 本帖最后由 zpcg 于 2011-8-25 23:50 编辑 ]
搜索更多相关主题的帖子: 问题 color 
2011-08-25 23:26
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:0 
'\0'这个字符怎么输入呢?用'\0'表结束还是第一次见的额。。。  一般用回车或文件结尾表结束吧,楼主那样的话退不出循环
2011-08-26 01:38
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:5 
楼主是不是用错了函数了,如果想用'\0'来表示结束的话,可以考虑gets()函数。这个函数可以读取一行内容,把最后的回车转换为'\0'放到字符数组中,然后你就可以统计了。但是gets函数不安全,建议采用fgets。

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-08-26 07:34
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:15 
程序代码:
/**********************************************/
/* 用自定义函数的方法统计输入的字符出现数字,  */
/*   (空格,制表符,回车),和其它字符的次数.     */
/**********************************************/



#include <stdio.h>
void main()
{
    void num(int n[], char c);  //统计数字
    int blank( char c);         //统计空格,回车,制表符
    int others( char c);        //统计其它字符
  
    int i, s2=0, s3=0, n[10] = { 0 };
    char c;
    printf("input: \n");

    c = getchar();////////////////

    while(c != '#')/////////////////以'#'为结束标志,结束输入,'#'不计入
    {
        putchar(c);  
      
        num(n, c);
        s2 = blank(c);
        s3 = others(c);
        c = getchar();/////////////注意c = getchar();不可放在3个自定义函数之前,否则结果出现问题
    }
    printf("\n");
    for(i = 0; i < 10; i++)
    {
        printf("%d = %d   ", i, n[i]);
    }
    printf("\nblank = %d", s2);
    printf("\nothers = %d\n", s3);
}

void num(int n[], char c)
{
    int i;
    if(c >= 48 && c <= 57)/////////////0-9对应的ASCII值为48-57
    {
        for(i = 0;i < 10; i++)
        {
            if(c == i + 48)
            {
                n[i]++;
            }
        }
    }
}


int blank(char c)
{
        static p = 0;    //静态变量,P值出此函数后仍保持上次值。
        if (c =='\n' || c == '\t' || c == ' ')
            p = p + 1;
    return p;
}


int others(char c)
{
    extern q;         //声明q为外部变量,也为了q值能保持上次值。
        if (c != '\n' && c != '\t' && c != ' ' && (c < 48 || c > 57))/////////////0-9对应的ASCII值为48-57
            q = q + 1;
    return q;
}
int q = 0;
注意:0-9对应的ASCII值为48-57
以'#'为结束标志,结束输入,'#'不计入

[ 本帖最后由 laznrbfe 于 2011-8-26 08:40 编辑 ]
2011-08-26 08:39
快速回复:帮忙看看这个程序问题出在哪?
数据加载中...
 
   



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

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