永发信息网

c语言代码求改错!跪谢!

答案:4  悬赏:20  手机版
解决时间 2021-03-25 22:34
c语言代码求改错!跪谢!
最佳答案
#include 
#include 
#include 

char* num_list0[20] = {
  "","one","two","three","four",
  "five","six","seven","eight","nine",
  "ten","eleven","twelve","thirteen","fourteen",
  "fifteen","sixteen","seventeen","eighteen","nineteen"
};
char* num_list1[10] = {
  "","ten","twenty","thirty","fourty","fifty",
  "sixty","seventy","eighty","ninety"
};
// 查表找英文,数字转换为可以读的单词
// “有数字” 表示 “有非零的数字”
void haveIt(int nI, char *num_str) {
  unsigned len;
  char aA[5];
  char str[100];
  itoa(nI,aA,10);
  len = strlen(aA); // 数的长度
  if (len==4) { // 四位数
    // 查表找到千位数字的英文
    sprintf(str,"%s thousand ",num_list0[aA[0]-'0']);
    strcat(num_str,str);
    if (aA[1] != '0') {
      // 如果百位数字不为0,查表找到百位数字的英文
      sprintf(str,"%s hundred ",num_list0[aA[1]-'0']);
      strcat(num_str,str);
    }
    if ((aA[2]-'0')==1 && (aA[3]-'0')>0) {
      // 如果十位数字为1,查表找20以下的十位数的英文
      // 提前到了数的末尾
      sprintf(str,"and %s
",num_list0[atoi(aA+2)]);
      strcat(num_str,str);
      return;
    }
    if (aA[2] != '0') {
      // 如果十位有数字,查表找到十位数字的英文
      sprintf(str,"and %s",num_list1[aA[2]-'0']);
      strcat(num_str,str);
    }
    if (aA[3] != '0') {
      if (aA[2] != '0') {
        // 只要十位有数字,而且个位也有数字,用 -连接个位到十位
        sprintf(str,"-%s",num_list0[aA[3]-'0']);
        strcat(num_str,str);
      }
      else {
        // 十位或者百位没有数字,直接 and个位数字的英文
        sprintf(str,"and %s",num_list0[aA[3]-'0']);// 1001
        strcat(num_str,str);
      }
    }
  } else if (len==3) { // 三位数
    // 查表找到百位数字的英文
    sprintf(str,"%s hundred ",num_list0[aA[0]-'0']);
    strcat(num_str,str);
    if ((aA[1]-'0')==1 && (aA[2]-'0')>0) {
      // 如果十位数字为 1,查表找20以下的十位数的英文
      // 提前到了数的末尾
      sprintf(str,"and %s
",num_list0[atoi(aA+1)]);
      strcat(num_str,str);
      return;
    }
    if (aA[1] != '0') {
      // 如果十位有数字,查表找到十位数字的英文
      sprintf(str,"and %s",num_list1[aA[1]-'0']);
      strcat(num_str,str);
    }
    if (aA[2] != '0') {
      if (aA[1] == '0') {
        // 如果十位没有数字,直接 and个位数字的英文
        sprintf(str,"and %s",num_list0[aA[2]-'0']);
        strcat(num_str,str);
      }
      else {
        // 十位有数字,而且个位也有数字,用 -连接个位到十位
        sprintf(str,"-%s",num_list0[aA[2]-'0']);
        strcat(num_str,str);
      }
    }
  } else if (len==2) { // 两位数
    if ((aA[0]-'0')==1 && (aA[1]-'0')>0) {
      // 如果十位数字为 1,查表找20以下的十位数的英文
      // 提前到了数的末尾
      sprintf(str,"and %s
",num_list0[atoi(aA)]);
      strcat(num_str,str);
      return;
    }
    // 如果已知这个数是两位数,查表找到十位数的英文
    sprintf(str,"%s",num_list1[aA[0]-'0']);
    strcat(num_str,str);
    if (aA[1] != '0') {
      // 如果个位有数字,用 -连接个位到十位
      sprintf(str,"-%s",num_list0[aA[1]-'0']);
      strcat(num_str,str);
    }
  }
}
int main() {
  int nI;
  char num_str[500];
  printf("enter a number >=1 and <=9999
");
  do {
    strcpy(num_str,"");
    printf("
enter 0 to exit
");
    printf("enter the number: ");
    scanf("%d",&nI);
    if (nI<=19) {
      strcpy(num_str,num_list0[nI]);
    } else {
      haveIt(nI,num_str); // 找到输入数字的字符串
    }
    printf("%s
",num_str);
  } while(nI>=1 && nI<=9999);
  return 0;
}对比下这个正确的 看看哪有问题
追问大佬!你的代码我。。看不懂。。追答别人写的 百度复制的 能用追问C:\Users\Master Chou\Desktop\c语言作业\collect2.exe [Error] ld returned 1 exit status我主要想问一下这个怎么办
全部回答
晚次鄂州(卢纶)
送李少府贬峡中王少府贬长沙(高适)
只说我第一眼看到的问题
single、teen、ten都是由字符串常量构成的数组,试图修改字符串常量值将会导致程序崩溃追问请问怎么改呢?追答修改数组声明为char single[][10]追问然后要选用数组中的一个元素输出就在第一个[]里设参数吗?追答输出第k个字符串就用printf("%s",single[k])
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
关于稻草制作取一个好听的名字
晏子说的话妙在哪?
脂肪液化流水要流几天 宝宝知道
法院立案后如何审理被告不取起诉状的案件
兼善中学蔡家校区停车场(出入口)地址好找么,
怎么判断英语量词改用a还是an
6个月拉布拉多怎么训练
金福花园停车场地址在哪,我要去那里办事,
申请巴黎九大需要什么条件?
天美你能不能彻底把卡顿解决了
跪求篮球4对4战术。。。。有高手指点下么?
豆蔻是什么意思啊
需求分析和概要设计有什么区别
在9×9格子中,用1-9的数字填满,要求每一行,每
102不锈钢焊条和302、022有什么不同
推荐资讯
炸鱼怎怎样挂糊
bt类影视资源是什么意思?
阳历2013年3月21日农历是几号
工作频率对并联振荡回路的电抗特性有没有影响
第二题解题过程中为什么-x-6x-5=-(x+3)+4
阅读下列材料: 材料一(周)武王追思
成语 扬什么而以
有谁拔牙过牙,多少钱一颗啊。拔牙了是不是还
(急急急!)求助:在无铅锡条中会含有15% 的
一百乘以五分之三x等于多少
2k12湖人王朝阵容
谁给个gta4的下载地址
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?