c语言问题,高手进!

次程序是实现written_amount函数,把输入的整数用ONE TWO 这样的字符输出:例如:1900 输出为ONE THOUSAND NINE HUNDRED.请高手指教。出现新建 文本文档.obj : error LNK2001: unresolved external symbol _written_amont
Debug/新建 文本文档.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.

新建 文本文档.exe - 1 error(s), 0 warning(s)的错误。还有如果能指导我改进一下,我万分感谢。谢谢!
#include <stdio.h>
void written_amount(unsigned int amount,char *buffer);
void main()
{
char buffer[100];
unsigned int amount;
int i;
printf("please enter an number:");
scanf("%d",&amount);
written_amount(amount,buffer);
for(i=0;buffer[i]!='\0';i++)
printf("%c",buffer[i]);
}
void written_amount(unsigned int amount,char *buffer)
{
char num1[9][7]={" ONE 00"," TWO 00"," THREE "," FOUR 0"," FIVE 0"," SIX 00"," SEVEN "," EIGHT "," NINE 0"}; //因为我不会用初始化字符数组中间缺损值//
char num2[10][11]={" TEN 000000"," ELEVEN 000"," TWENLVE 00"," THRITEEN 0"," FORTEEN 00"," FIFTEEN 00"," SIXTEEN 00"," SEVERTEEN "," EIGHTEEN 0"," NINETEEN 0"};
char num3[8][9]={" TWENTY 0"," THIRTY 0"," FORTY 00"," FIFTY 00"," SIXTY 00"," SEVENTY "," EIGHTY 0"," NINETY 0"};
int i;
if(amount>0&&amount<10)
for(i=0;num1[amount-1][i]!='0';i++)
(*buffer++)=num1[amount-1][i];
else if(amount>=10&&amount<20)
for(i=0;num2[amount/10][i]!='0';i++)
(*buffer++)=num2[amount/10][i];
else if(amount>=20&&amount<100)
{
for(i=0;num3[amount/10-2][i]!='0';i++)
(*buffer++)=num3[amount/10-2][i];
amount%=10;
written_amount(amount,buffer);
}
else if(amount>=100&&amount<1000)
{
written_amount(amount/100,buffer);
*buffer=" HUNDRED";
amount%=100;
written_amount(amount,buffer);
}
else if(amount>=1000&&amount<10000)
{
written_amount(amount/1000,buffer);
*buffer=" THOUSAND";
amount%=1000;
written_amount(amount,buffer);
}
else if(amount>=10000&&amount<=65535)
{
written_amont(amount/1000,buffer);
*buffer=" THOUSAND ";
amount%=1000;
written_amount(amount/1000,buffer);
}
else if(amount==0);
else
printf("WARNING!THE NUMBER YOU ENTERING IS IllEGEL,PLEASE TRY IT AGAIN!");
}

早就超出了unsigned
int可以表示的范围!
这个题目的答案公式是:2^n,即2的n次幂。
在tc下,无符号整型数unsigned
int的表示范围是0~(2^16-1)
在vc++中,无符号整型数unsigned
int的表示范围是0~(2^32-1)
所以当n=32时,2^32产生向更高位的进位,但是向高位产生的进位不能保存,因为超过了无符号整型数unsigned
int的表示范围。好比m是一个一位正整数,现在m=9,然后m++,得m=10但是m只能保存一位整数,所以m=0,向高位产生的进位1没法保存被丢弃。其实这就是模(mod或者用符号表示就是%)的意思!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-17
/*你不会用字符串和指针啊.虽然你的算法还行.
你的BUFFER是要传回字符串的首地址的,你怎么让它自己去指来指去的呢.你看看我给你改的程序吧*/
#include <stdio.h>
#include <string.h> //strcat的头文件

void written_amount(unsigned int amount,char *buffer);
void main()
{
char buffer[100];
unsigned int amount;
int i;

/**你的程序是以\0结尾的,但你没有一个地方给程序结尾赋这个值**/
for(i=0;i<100;i++)
buffer[i]='\0';
printf("please enter an number:");
scanf("%d",&amount);
written_amount(amount,buffer);
for(i=0;buffer[i]!='\0';i++)
printf("%c",buffer[i]);
printf("\n");
}

void written_amount(unsigned int amount,char *buffer)
{
/**字符串和0之间怎么有空格呢.后面有一个0就够了,你不用把字符串补齐的**/
char num1[9][7]={" ONE00"," TWO00"," THREE0"," FOUR0"," FIVE0"," SIX00"," SEVEN0"," EIGHT0"," NINE0"};
char num2[10][11]={" TEN000000"," ELEVEN000"," TWENLVE 00"," THRITEEN 0"," FORTEEN 00"," FIFTEEN 00"," SIXTEEN 00"," SEVERTEEN "," EIGHTEEN 0"," NINETEEN 0"};
char num3[8][9]={" TWENTY0"," THIRTY0"," FORTY00"," FIFTY00"," SIXTY00"," SEVENTY0"," EIGHTY0"," NINETY0"};
int i;
char *temp=buffer,*excha;//用另外的指针来做移动,不然BUFFER传回的就不是我们想要的

if(amount>0&&amount<10)
for(i=0;num1[amount-1][i]!='0';i++)
(*temp++)=num1[amount-1][i];
// temp=strcat(temp,num1[amount-1][i]);
else if(amount>=10&&amount<20)
for(i=0;num2[amount%10][i]!='0';i++)////////////////////////
(*temp++)=num2[amount%10][i];
else if(amount>=20&&amount<100)
{
for(i=0;num3[amount/10-2][i]!='0';i++)
(*temp++)=num3[amount/10-2][i];
amount%=10;
written_amount(amount,temp);
}
else if(amount>=100&&amount<1000)
{
written_amount(amount/100,temp);
// *temp=" HUNDRED";
temp=strcat(temp," HUNDRED"); /**字符串与字符串之间的运算你还得看看书啊.怎么能直接的用=号啊**/
amount%=100;

/**这个也是指针的问题,要让传到下一个函数的指针指向字符串的最后一个字符**/
/**后面的也都一样,你自己看看吧**/
excha=temp;
while(*excha!='\0')
excha++;
written_amount(amount,excha);
}
else if(amount>=1000&&amount<10000)
{
written_amount(amount/1000,temp);
//*temp=" THOUSAND";
/*同上*/
temp=strcat(temp," THOUSAND");
amount%=1000;
excha=temp;
while(*excha!='\0')
excha++;
written_amount(amount,excha);
}
else if(amount>=10000&&amount<=65535)
{
written_amount(amount/1000,temp);
//*temp=" THOUSAND ";

/*同上*/
temp=strcat(temp," THOUSAND");
amount%=1000;
excha=temp;
while(*excha!='\0')
excha++;
written_amount(amount,excha);
}
else if(amount==0)
;
else
printf("WARNING!THE NUMBER YOU ENTERING IS IllEGEL,PLEASE TRY IT AGAIN!");
}本回答被提问者采纳
第2个回答  2009-10-17
你这样写是不是太麻烦了。
我的意见是:

首先将你输入的数转化为字符数组。

然后判断有几位数,在实现题目要求不就简单了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网