1、为什么不写成int?
此处也可以写成int。
如果写成int型,还要求出各位上的数字是多少,才能将数字转换为拼音。
写成char型,省去了转换各位数字的环节,可以用str[i]任意取出各位上的数字。两位,也方便负号的处理。
2、为什么是*?
如果不加*,只能定义一个字符数组(或叫字符串),如char num[]="yi"
加上一个*后,char *num[]跟不加*相比,①num已经变成字符串数组;②num变成了指针数组,num[0]、num[1]等各个元素已经成为指向“ling”、“yi”的地址,而“ling”等数据则放在常量区。
根据num[0]指向“ling”,num[1]指向“yi”,num[2]指向“er”……
这样可以通过num[i],很方便地找到对应的数字i的汉语拼音。
3、str[0]-'0'是什么意思?
先看str[0]是什么,它是你输入的整数的第一个数字,比如它是3,在这里程序是把3当作字符'3'处理的(原因就是变量str的类型为char型),在储存这个'3'时,实际上储存的是字符'3'的asc码,即51。而字符'0'的asc码是48,str[0]-'0'=51-48=3。这样,num[str[0]-'0']=num[3],如前面所述,就很容易找到3对应的拼音“san”了。
有什么问题请留言。
你的程序有很多不对的地方,没必要用数组,多次的getchar()也不知道是干啥的,我写一个程序贴给你看看吧,有问题再问。
#include<stdio.h>
void judge_num(int num)
void split_num(int num)
int main()
{
int num=0
printf("请输入一个整数:")
scanf("%d",&num)
if(num<0)
{
printf("fu ")
num=-num
}
split_num(num)
printf("\n")
return 0
}
void judge_num(int num)
{
switch(num)
{
case 0: printf("ling ")break
case 1: printf("yi ")break
case 2: printf("er ")break
case 3: printf("san ")break
case 4: printf("si ")break
case 5: printf("wu ")break
case 6: printf("liu ")break
case 7: printf("qi ")break
case 8: printf("ba ")break
case 9: printf("jiu ")break
}
}
void split_num(int num)
{
int n
if((n=num/10)!=0)
split_num(n)
judge_num(num%10)
}