ZBLOG

char* tran_english(int num) { char* arr1[10] = {" ", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; char* arr2[10] = {"Ten", "Eleven", "Tewlve", "Thirteen", "Fourteen", "F...

代码中存在几处错误:

  1. case 2中,数组arr2的第三个元素应为”Twelve”而不是”Tewlve”。

  2. case 3case 4中,应该使用函数返回类型为char*的变量来保存要打印的字符串,然后在最后通过返回该变量来输出结果。同时,在定义这些变量时需要适当地分配内存。

  3. 在函数结尾处,将 return 0; 修改为 return NULL; 或者直接删除该语句。

修改后的代码如下所示:

#include <stdio.h>
#include <stdlib.h>

char* tran_english(int num)
{
    char* arr1[10] = {" ", "One", "Two", "Three", "Four",
                    "Five", "Six", "Seven", "Eight", "Nine"};
    char* arr2[10] = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen",
                    "Fifteen", "Sixteen", "Seventeen", "Eighteen", 
                    "Nineteen"};
    char* arr3[8] = {"Twenty", "Thirty", "Forty", 
                    "Fifty","Sixty","Seventy","Eighty","Ninety"};
                    
    int thousand = num / 1000;
    int hundred  = num % 1000 / 100;
    int tens     = num % 100 /10;
    int ones     = num % 10;
    int i = 0, count = 0, tmp = num;

    if(tmp != 0)
    {
        tmp = tmp / 10;
        count++;
    }

    if(num == 0)
    {
        return "Zero";
    }
    
    char* result = malloc(100 * sizeof(char)); // 分配足够的内存来保存结果
    
    switch(count)
    {
        case 1: sprintf(result, "%s", arr1[i]);
                break;
        case 2: if(tens == 1)
                {
                    sprintf(result, "%s", arr2[ones]);
                }
                else
                {
                    sprintf(result, "%s %s", arr3[tens - 2], arr1[ones]);
                }
                break;
        case 3: sprintf(result, "%s Hundred ", arr1[hundred]);
                if(tens == 0)
                {
                    sprintf(result + strlen(result), "and %s", arr1[ones]);
                }
                else if(tens == 1)
                {
                    sprintf(result + strlen(result), "%s", arr2[tens]);
                }
                else
                {
                    sprintf(result + strlen(result), "%s %s", arr3[tens - 2], arr1[ones]);
              	}
              	break;
        case 4: sprintf(result, "%s Thousand, ", arr1[thousand]);
				sprintf(result + strlen(result), "%s Hundred ", arr1[hundred]);

				if(tens == 0) 
				{
					sprintf(result + strlen(result), "and %s",arr1[ones]);	
				}
				else if(tens == 1) 
				{
					sprintf(result + strlen(result),"%s ",arr2[tens]);	
				}
				else 
				{
					sprintf (result+strlen (result),"%S %S ",arr3[tens-2],arr1[ones]);	
      			}
      			break;
    	default: sprintf(result, "Invalid input.");
    }

    return result;
}

int main()
{
    int num;

    printf("请输入一个非负整数x(0-9999):");
    scanf("%d", &num);

    char* english = tran_english(num);
    
    printf("%s\n", english);
   
    free(english); // 释放动态分配的内存
    
    return 0;
}

修改后的代码应该能够正确地将输入的数字转换为英文表示。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=2114

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?