在你的代码中,函数 tran_english
的返回值是一个指向字符的指针(char*
),但在函数内部并没有为该指针分配内存或给它赋值。因此,当你尝试打印 english
变量时,并没有正确的结果输出。
如果你想要实现将整数转换为英文描述的功能,可以考虑以下修改:
- 将
tran_english
函数声明改为void tran_english(int num)
,不再返回任何值。 - 在
tran_english
函数内部,根据具体逻辑进行字符串操作来构建英文描述。 - 不再使用动态分配内存(如
malloc
),而是直接在函数内部定义一个足够大的字符数组来保存结果。
下面是修改后的代码示例:
#include <stdio.h>
#define M 100
void 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;
if(num == 0)
{
printf("Zero");
return;
}
char result[M] = ""; // 定义足够大的字符数组来保存结果
switch(thousand)
{
case 1: sprintf(result, "%s Thousand ", arr1[thousand]);
break;
default:
break;
}
switch(hundred)
{
case 1: sprintf(result + strlen(result), "%s Hundred ", arr1[hundred]);
break;
default:
break;
}
if(tens == 1)
sprintf(result + strlen(result), "%s", arr2[ones]);
else
{
if (tens != 0)
sprintf(result + strlen(result), "%s ",arr3[tens - 2]);
if (ones != 0)
sprintf(result + strlen(result),"%s",arr1[ones]);
}
printf("该整数的英文描述为: %s\n", result);
}
int main()
{
int num;
printf("请输入一个非负整数x(0-9999):");
scanf("%d", &num);
tran_english(num);
return 0;
}
现在,当你输入一个非负整数时,程序将会输出对应的英文描述。希望这能帮助到你!
内容由零声教学AI助手提供,问题来源于学员提问