我用函数把十进制转换为十六进制时怎么在scanf函数里面调用函数和在后面调用的结果不一样?

小铧 2017-11-16 11:22:44
#include<stdio.h>
int sixteen(int x)
{
switch(x)
{
case 0:x=48;break;
case 1:x=49;break;
case 2:x=50;break;
case 3:x=51;break;
case 4:x=52;break;
case 5:x=53;break;
case 6:x=54;break;
case 7:x=55;break;
case 8:x=56;break;
case 9:x=57;break;
case 10:x=65;break;
case 11:x=66;break;
case 12:x=67;break;
case 13:x=68;break;
case 14:x=69;break;
case 15:x=70;break;
}
return x;
}
int print(int x)
{
int a[5];
int i=0,j;
while(x>0)
{
a[i]=x%16;
x=x/16;
i++;
}
for(j=i;j>=0;j--)
printf("%c",sixteen(a[j]));
return 0;
}
int main()
{
int a;
print(scanf("%d",&a));
return 0;
}

#include<stdio.h>
int sixteen(int x)
{
switch(x)
{
case 0:x=48;break;
case 1:x=49;break;
case 2:x=50;break;
case 3:x=51;break;
case 4:x=52;break;
case 5:x=53;break;
case 6:x=54;break;
case 7:x=55;break;
case 8:x=56;break;
case 9:x=57;break;
case 10:x=65;break;
case 11:x=66;break;
case 12:x=67;break;
case 13:x=68;break;
case 14:x=69;break;
case 15:x=70;break;
}
return x;
}
int print(int x)
{
int a[5];
int i=0,j;
while(x>0)
{
a[i]=x%16;
x=x/16;
i++;
}
for(j=i;j>=0;j--)
printf("%c",sixteen(a[j]));
return 0;
}
int main()
{
int a;
scanf("%d",&a);
print(a);
return 0;
}
...全文
147 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-11-18
  • 打赏
  • 举报
回复
print(scanf("%d",&a));
根据scanf的原型可知,print函数得到的是其返回值,而不是a的值; scanf若正确输入即匹配a的类型,则返回1,否则返回0或者EOF
jena_wy 2017-11-17
  • 打赏
  • 举报
回复
The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument. Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. If copying takes place between strings that overlap, the behavior is undefined. wscanf is a wide-character version of scanf; the format argument to wscanf is a wide-character string. wscanf and scanf behave identically otherwise. scanf返回值成功读入数据的个数。.
qq_19996259 2017-11-17
  • 打赏
  • 举报
回复
你发了一个不小心的错误 for(j=i;j>=0;j--) printf("%c",sixteen(a[j])); // a[j] 传过去的值没有被重新赋值回来 ,请传地址过去 ,这是你程序错误的地方 , sixteen(&a[j]) 那边用地址接收 return 0;
Dogfish 2017-11-17
  • 打赏
  • 举报
回复
你的函数直接使用scanf的返回值,而不是变量a的值。
zkx_jhun 2017-11-17
  • 打赏
  • 举报
回复
int scanf(const char * restrict format,...);
scanf("%d %d",&a,&b);
它的返回值不是你读入的数值的值,而是你成功读入数据的个数!! 如果a和b都被成功读入,那么返回值就是2; 如果只有a被成功读入,返回值为1; 如果a和b都未被成功读入,返回值为0; 如果遇到错误或遇到end of file,返回值为EOF! 你这里上面的代码
print(scanf("%d",&a));
这一句,你输入一个整数的话无论是什么整数,只要能成功读入,那么相当于
print(1);
,如果你输入一个不对应%d格式串的数据,那么相当于
print(0);
! 而下面的过程就是满足你的意图的了,你先
int a;
scanf("%d",&a);
读入a,再执行的就是
printf(a);
了,这才是你想要的效果! 希望我说的你能采纳!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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