| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 382 人关注过本帖
标题:运行有BUG 说明在帖子末尾
取消只看楼主 加入收藏
朱稳
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2011-11-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
运行有BUG 说明在帖子末尾
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30 //30是因为可能怕数组越界
void rmb_units(int k);
void big_write_num(int l);

int main()
{
    char c[N],*p;
    int a,i,j,len,len_integer=0,len_decimal=0;   //len_integer整数部分长度,len_decimal小数部分长度
    printf("--------------------------------------------------------------------------------\n");
    printf("*本程序将阿拉伯数字小写金额转换成中文大写金额!*\n");
    printf("\n--------------------------------------------------------------------------------\n");
    printf("please input (阿拉伯数字小写金额): ¥");
    scanf("%s",c);
    p=c;
    len=strlen(p);
    for(i=0;i<=len-1 && *(p+i)<='9' && *(p+i)>='0';i++); /*求出整数部分的长度*/
        if(*(p+i)=='.' || *(p+i)=='/0')   //*(p+i)=='/0'没小数点的情况
            len_integer=i;
        else
        {
            printf("\nError: 输入有错误,整数部分含有错误的字符!!!!!\n");
            system("pause");
            exit(EXIT_FAILURE);
        }
    if(len_integer>13)
    {
        printf("!---------------超过范围,最大万亿!整数部分最多位!程序暂停!---------------!\n");
        system("pause");
        printf("\n!---------程序继续执行,注意:超过万亿部分只是简单读出数字的中文大写!----------!\n");
    }
    printf("\n===================================转换开始!===================================\n");
    printf("¥%s 的中文大写金额如下所示:\n\n人民币/RMB : ",c);
    /*转换整数部分*/
    for(i=0;i<len_integer;i++)
    {
        a=*(p+i)-'0';
        if(a==0)
        {
            if(i==0)
            {
                if(*(p+1)!='.' && *(p+1)!='/0' && *(p+1)!='0')
                {
                    printf("\n!------------输入有错误!第一位为而后整数部分有非字符,请检查!---=--------!\n");
                    system("pause");
                    printf("\n!--------------程序继续执行,注意:整数部分的剩下部分将被忽略!----------------!\n");
                }
                printf("零圆");
                break;   //若第一个是则忽略其他整数部分
             }
            else if(*(p+i+1)!='0' && i!=len_integer-5 && i!=len_integer-1 && i!=len_integer-9)   //圆、万、亿位为时选择不加零                           {
            {
                printf("");
                continue;                           
            }
                       
                else if(i==len_integer-1 || i==len_integer-5 || i==len_integer-9)   //圆万亿单位不能掉
                {
                    rmb_units(len_integer+1-i);
                    continue;
                }
                    else
                    continue;
            }
               big_write_num(a);              //阿拉伯数字中文大写输出
                rmb_units(len_integer+1-i);   //人民币货币单位中文大写输出
           }
        /*求出小数部分的长度*/
        len_decimal=len-len_integer-1;
        if(len_decimal<0)
            {
                len_decimal=0;
                printf("");   //或正
            }
        if(len_decimal>2)      //只取两位小数
                len_decimal=2;
        //printf("%d----%d-----%d/n",len,len_integer,len_decimal);
        p=c;
        /*转换小数部分*/
        for(j=0;j<len_decimal;j++)    
            {
                a=*(p+len_integer+1+j)-'0';    //定位到小数部分,等价于a=*(p+len-len_decimal+j)-'0';
                if(a<0 || a>9)
                    {
                        printf("\n!!!!---------# Error: 输入有错误,小数部分含有错误的字符!---------!!!!\n");
                        system("pause");
                        exit(EXIT_FAILURE);
                    }
                if(a==0)
                    {
                        if(j+1<len_decimal)
                         {
                             if(*(p+len_integer+j+2)!='0')      
                                printf("");
                             else
                                {
                                 printf("");
                                 break;
                                 }
                         }
                          continue;
                     }
                big_write_num(a);
                rmb_units(1-j);
            }
        printf("\n");
        printf("\n===================================转换完成!===================================\n");
        system("pause");       
    }
    /*人民币货币单位中文大写输出*/
    void rmb_units(int k)
      {
         //相当于const char rmb_units[]="fjysbqwsbqisbqw";
         //"分角圆拾佰仟万拾佰仟亿拾佰仟万";
          switch(k)
              {
                   case 3:case 7:case 11: printf("");break;
                   case 4:case 8:case 12: printf("");break;
                   case 5:case 9:case 13: printf("");break;
                   case 6: case 14:       printf("");break;
                   case 10:               printf("亿");break;
                   case 2:                printf("");break;
                   case 1:                printf("");break;
                   case 0:                printf("");break;
                   default:               break;
              }
      }
    /*阿拉伯数字中文大写输出*/
    void big_write_num(int l)
      {
        //相当于const char big_write_num[]="0123456789";
        //"零壹贰叁肆伍陆柒捌玖"
        switch(l)
             {
                  case 0:printf("");break;
                  case 1:printf("");break;
                  case 2:printf("");break;
                  case 3:printf("");break;
                  case 4:printf("");break;
                  case 5:printf("");break;
                  case 6:printf("");break;
                  case 7:printf("");break;
                  case 8:printf("");break;
                  case 9:printf("");break;
                  default:break;
             }
      }

 
网上找的一段 运行有BUG 如果输入100或者1000之类的数字就会出错
函数功能是将阿拉伯数字转换为大写的中文
2012-04-03 14:30
朱稳
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2011-11-2
收藏
得分:0 
回复 4楼 lusvan
请问你是?我认识你吗?还是开玩笑的啊?
2012-04-05 19:08
快速回复:运行有BUG 说明在帖子末尾
数据加载中...
 
   



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

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