一段小程序,大家帮我改改错

liujinxunhappy08110 2009-06-29 03:35:48
小弟好久没碰c++了,今天写了一个小程序,出现了几个错误,不知如何改正,程序很简单,请各位兄弟姐妹帮帮忙,万分感谢
程序如下:

//编写一个程序,将输入的十进制数按十六进制整数输出
#include<iostream>
#include<string.h>
using namespace std;
//将输入的十进制整数转换为16进制存储
void convert(int n)
{
int *str;
int i=0,k;
while(n>0)
{
str[i++]=n%16;
n/=16;
}

int j=strlen(str);//这一句出错了
for(k=j-1;k>=0;k--)
{
if(str[k]<=9)
{
cout<<"str[k]"<<'\n';
}
else
{
switch(str[k])
{
case 10:cout<<"A"<<endl;break;
case 11:cout<<"B"<<endl;break;
case 12:cout<<"C"<<endl;break;
case 13:cout<<"D"<<endl;break;
case 14:cout<<"E"<<endl;break;
}
}
}
}
//主函数
int main()
{
int n;
cout<<"请输入一个整数"<<endl;
cin>>n;
convert(n);
cout<<"对应的十六进制整数是"<<endl;
return 0;
}
出现的错误如下:Microsoft Visual Studio\MyProjects\myproject\problem1.cpp(16) : error C2664: 'strlen' : cannot convert parameter 1 from 'int *' to 'const char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
请各位大虾帮忙指正,万分感谢!!
...全文
66 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢,我改了一下,却无法输出结果,请大虾们再给个指针,本人确实是个菜鸟,呵呵
#include <iostream>
#include <string.h>
using namespace std;
//将输入的十进制整数转换为16进制存储
void convert(int n)
{
int *str;
str=new int[n]; //要分配内存啊
int i=0,k;
while(n>0)
{
str[i++]=n%16;
n/=16;
}

//int j=strlen(str);//这一句出错了 strlen只能用于char*风格字符串
for(k=n-1;k>=0;k--)
{
if(str[k] <=9)
{
cout <<"str[k]" <<'\n';
}
else
{
switch(str[k])
{
case 10:cout <<"A" <<endl;break;
case 11:cout <<"B" <<endl;break;
case 12:cout <<"C" <<endl;break;
case 13:cout <<"D" <<endl;break;
case 14:cout <<"E" <<endl;break;
}
}
}
}
//主函数
int main()
{
int n;
cout <<"请输入一个整数" <<endl;
cin>>n;
convert(n);
cout <<"对应的十六进制整数是" <<endl;
return 0;
}
  • 打赏
  • 举报
回复

#include <iostream>
#include <string.h>
using namespace std;
//将输入的十进制整数转换为16进制存储
void convert(int n)
{
int *str;
str=new int[n]; //要分配内存啊
int i=0,k;
while(n>0)
{
str[i++]=n%16;
n/=16;
}

int j=strlen(str);//这一句出错了 strlen只能用于char*风格字符串
for(k=j-1;k>=0;k--)
{
if(str[k] <=9)
{
cout < <"str[k]" < <'\n';
}
else
{
switch(str[k])
{
case 10:cout < <"A" < <endl;break;
case 11:cout < <"B" < <endl;break;
case 12:cout < <"C" < <endl;break;
case 13:cout < <"D" < <endl;break;
case 14:cout < <"E" < <endl;break;
}
}
}
}
//主函数
int main()
{
int n;
cout < <"请输入一个整数" < <endl;
cin>>n;
convert(n);
cout < <"对应的十六进制整数是" < <endl;
return 0;
}
linyun_xiong 2009-06-29
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])
{
int nTest = 0;
scanf("%d", &nTest);
printf("%x",nTest);
return 0;
}
adventurelw 2009-06-29
  • 打赏
  • 举报
回复
int j=strlen(str);

strlen是用在字符串上的,当然会出错
这里应该在while(n > 0)前面声明一个计数变量,int count = 0;
然后在循环中++count来得出十六进制数的位数。
lingyin55 2009-06-29
  • 打赏
  • 举报
回复
1、
int *str; ////这里只是定义了一个指针变量,并没有开辟空间
int i=0,k;
while(n>0)
{
str[i++]=n%16; /////没有开辟空间这里要怎么保存,会出错的

2、
int j=strlen(str);//这一句出错了
错误提示说的很清楚了,strlen是用于字符串的长度计算,而这里的
str是int型的指针。参数不匹配
lire1213 2009-06-29
  • 打赏
  • 举报
回复
str是一个指针,你并没有给它指定内存空间。

64,674

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧