所以这是我的第三次尝试仍然无法正常工作,我想对我该如何解决这个问题有意见,请给我一些建议。这是问题文本的发音,它要求使用转换函数从10到另一个的数字,这是必不可少的,我只能使用字符串来保存转换。
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool Convert(unsigned int number, unsigned int toBase, char * result,
unsigned int resultMaxSize)
{char p;
int var;
if(number==0)
return false;
while(number>0)
{var=number%toBase;
if(var>=10)
{p=(char)var;
*result=p;
}
else
*result=var+'0';
number=number/toBase;
result++;
}
if(strlen(result)>resultMaxSize)
return false;
strrev(result);
printf("%s", result);
return true;
}
int main()
{char rezultat[200]={0};
unsigned int nr, n, baza;
char *ptr;
ptr=rezultat;
printf("Introduceti numarul de convertit ");
scanf("%d", &nr);
printf("\nIntroduceti baza in care convertim ");
scanf("%d", &baza);
printf("\nIntroduceti numarul de caractere maxim pe care il va avea
rezultatul ");
scanf("%d", &n);
printf("\n%d",Convert(nr, baza, rezultat, n));
return 0;
}
答案 0 :(得分:0)
当我打印字符串时,我会加上一些ascii字符
如 pmg 所说,一种方法是用0s初始化 w ,否则应用于未初始化数组的 strcat 具有未定义的行为。一种更快的方法是只做w[0] = 0;
,因为设置其他字符毫无用处。
一些补充说明
您使用 itoa ,请注意,此函数未在ANSI-C中定义, gcc 未提供此功能,但是您只是使用它而已void Convert(unsigned int number, unsigned int toBase, char * result) { itoa(number, result, toBase); }
您以相反的顺序生成数字,并在末尾添加字符,这就是为什么14生成0111而不是1110的原因。
执行itoa(number%toBase, s, 10);
而不是itoa(number%toBase, s, toBase);
的程序只能在基本<= 10的情况下工作。
总是从数组的开头开始执行 strcat ,每个循环都越来越昂贵,因为它必须绕过已经添加的字符。
我鼓励您重写程序以产生正确的结果,包括大于10的碱基,而此时不使用 itoa