运行程序时加上Ascii字符

问题描述 投票:-1回答:1

所以这是我的第三次尝试仍然不能正常工作,我想知道如何解决这个问题,请给我一些建议。这是问题的文本如何发声,它要求使用从基数转换数字的函数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;
}
c
1个回答
0
投票

当我打印字符串我有一些ascii字符加

正如pmg在一篇评论中所说,一种方法是用0初始化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的那个时间

© www.soinside.com 2019 - 2024. All rights reserved.