一段C语言程序,为什么会出现warning?在线等
将十六进制数(不超过4位)转换为十进制数,代码:#include<stdio.h>unsignedconvert(charp[]){inti,n=0,t;for(i=0;...
将十六进制数(不超过4位)转换为十进制数,代码:
#include <stdio.h>
unsigned convert(char p[])
{
int i,n=0,t;
for(i=0;p[i]!='\0';i++)
{
switch(p[i])
{
case 'A':case 'a': t=10;break;
case 'B':case 'b': t=11;break;
case 'C':case 'c': t=12;break;
case 'D':case 'd': t=13;break;
case 'E':case 'e': t=14;break;
case 'F':case 'f': t=15;break;
default: t=p[i]-'0'; /*这行我不太明白*/
}
n=n*16+t;
}
return n;
}
main()
{
char num[4];
printf("\nPlease input a num:\n");
gets(num); /*改代码后此行有warning*/
printf("The converted rsult is %d \n",convert(num)); /*改代码后此行有warning*/
}
输入A2,输出162.正确.
把char num[4];改为char *num;运行结果正确,但会出现warning:"Possible use of 'num' before definition in function main"
请问为什么?有warning的程序算通过吗?(一共两个问题)
在线等
default: t=p[i]-'0'; /*这行我不太明白*/
这行我已经明白了,不用回答的 展开
#include <stdio.h>
unsigned convert(char p[])
{
int i,n=0,t;
for(i=0;p[i]!='\0';i++)
{
switch(p[i])
{
case 'A':case 'a': t=10;break;
case 'B':case 'b': t=11;break;
case 'C':case 'c': t=12;break;
case 'D':case 'd': t=13;break;
case 'E':case 'e': t=14;break;
case 'F':case 'f': t=15;break;
default: t=p[i]-'0'; /*这行我不太明白*/
}
n=n*16+t;
}
return n;
}
main()
{
char num[4];
printf("\nPlease input a num:\n");
gets(num); /*改代码后此行有warning*/
printf("The converted rsult is %d \n",convert(num)); /*改代码后此行有warning*/
}
输入A2,输出162.正确.
把char num[4];改为char *num;运行结果正确,但会出现warning:"Possible use of 'num' before definition in function main"
请问为什么?有warning的程序算通过吗?(一共两个问题)
在线等
default: t=p[i]-'0'; /*这行我不太明白*/
这行我已经明白了,不用回答的 展开
5个回答
展开全部
char *num;
这样 num 是一个未初始化的指针,要先用 new 关键字将其初始化。比如 num=new char[4]; 对于用new 分配的内存,要用delete 来释放,比如 delete num;
这个warning 不能通过,会有运行时错误,因为没有为指针分配内存,虽然编译通过了,但运行时就会使用一段没有分配的内存,程序会提示“XXX遇到问题需要关闭。”之类的话。
default: t=p[i]-'0';
这个因为p[i]是保存的一个数字字符的ASCII码,而'0'其实就是数字0的ASCII码,所以p[i]-'0'得到的正好是一个整数数字,因为1的ASCII码比0的大1,2的比0的大2,依此类推。
这样 num 是一个未初始化的指针,要先用 new 关键字将其初始化。比如 num=new char[4]; 对于用new 分配的内存,要用delete 来释放,比如 delete num;
这个warning 不能通过,会有运行时错误,因为没有为指针分配内存,虽然编译通过了,但运行时就会使用一段没有分配的内存,程序会提示“XXX遇到问题需要关闭。”之类的话。
default: t=p[i]-'0';
这个因为p[i]是保存的一个数字字符的ASCII码,而'0'其实就是数字0的ASCII码,所以p[i]-'0'得到的正好是一个整数数字,因为1的ASCII码比0的大1,2的比0的大2,依此类推。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的main函数没有返回值 在printf("The converted rsult is %d \n",convert(num)); 后加return 0;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在C中不影响,通过!
要是C++中就要是 void main(){}
要是C++中就要是 void main(){}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题关键:需要搞清楚指针和数组的区别。
其他如magician547所说。
其他如magician547所说。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询