c - 运行程序时加号中的ASCII字符
问题描述
所以这是我的第三次尝试仍然无法正常工作,我想知道我需要如何解决这个问题,请给一些建议。这就是问题文本的声音,它需要使用从基数转换数字的函数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;
}
解决方案
当我打印字符串时,我有一些 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
推荐阅读
- sql - 在 STRING_AGG 函数中使用 distinct 和 order by
- ruby-on-rails - 工具和脚本与简单的自动化 Rails 应用程序一起使用所需的想法
- tensorflow - 张量流中的自定义梯度尝试将模型转换为张量
- python - 如何创建一个允许其他代码也运行的 python 循环
- mysql - bash 脚本中 grep 和 mysql 的变量
- excel - 系统错误 &H8000FFF (-247418113)。灾难性故障
- python - Python中的随机双循环
- android - 对话框不显示其内容
- c# - EntityException - 底层提供程序在打开时失败
- javascript - 在搜索组件 React、Semantic-UI-React 中渲染搜索结果的问题