putchar()参数问题

今天做习题遇到一个问题,代码如下,功能是输入数字和进制,利用递归把十进制输入的数字转换成想要的进制。但是最后输出时,我用putchar(r)就输出乱码,putchar('0'+r)就正常,这是什么情况。我是VS2008,win764位系统。#include

void to_base_n(unsigned long n,unsigned int mode);

void main()

{

unsigned int mode;

unsigned long n;

printf("输入一个整数,并输入你想转换成的进制(2~10)。(q to quit)\n");

while(scanf("%lu %u",&n,&mode)==2)

{

printf("转换后的%d进制数是:",mode);

to_base_n(n,mode);

printf("\n输入一个整数,并输入你想转换成的进制(2~10)。(q to quit)\n");

}

printf("bye!\n");

system("pause");

}

void to_base_n(unsigned long n,unsigned int mode)

{

int r;

r=n%mode;

if(n>=mode)

to_base_n(n/mode,mode);

putchar('0'+r);

}

以上代码正确运行,但是把最后的putchar(‘0’+r),换成putchar(r)就不行。

------解决方案--------------------

putchar函数要求一个int型参数

这个参数代表ASCII码;

根据楼主的代码,putchar(r),输入的r显然在0-9范围内

那就是输出ASCII码值为0-9的控制字符显然不符合楼主的逻辑

putchar('0'+r)相当于putchar(48+r);

也就是48-57对应0-9字符。

我提供一下我写的代码供楼主参考

#include

int main()

{

void conversion(int, int);

int num, mode, flag = 1;

do

{

printf("请输入要转换的数值和进制(输入n退出):");

if (scanf("%d%d", &num, &mode) == 2)

{

printf("结果是:");

if (num

{

num = -num;

putchar('-');

}

conversion(num, mode);

putchar('\n');

}

else

flag = 0;

} while (flag);

return 0;

}

void conversion(int num, int mode)

{

int quotient, remainder;

quotient = num / mode;

remainder = num%mode;

if (quotient != 0)

conversion(quotient, mode);

if (remainder > 9)

putchar(55 + remainder);

else

putchar('0' + remainder);

}

------解决方案--------------------

putchar接收的是ascii码, '0' 的ascii码是48, 所以putchar(48)输出'0'

类似地pubchar(49)输出'1',

也就是 putchar('0'+1)输出'1'

如果直接putchar(1)那输出的肯定不对了.

c语言putchar输出ascii码,putchar()参数有关问题相关推荐

  1. C语言 十六进制与ascii码互转

    C语言 十六进制与ascii码互转 功能:十六进制与ascii码互转 #include<stdlib.h> #include<stdio.h> #include<stri ...

  2. c语言中 字母对应的数值,c语言字母对应ascii码 实型数据,与字符型数据

    知识点:实型的定义方法和实型常量的表达方法; 重要程度:★★★★ 1.实型常量 在C语言中,实型常量有两种表示形式:小数形式和指数形式. (1)小数形式 规则如下:1. 有且仅有一个小数点. 2. 左 ...

  3. 输入asc码输出字符c语言,输入一个字符输出ascii码

    C语言 输入一个字母,输出与之对应的ASCII码,输入用C语言编写. #include "stdafx.h" //VS 预编译头文件,其他系统请删除 #include #inclu ...

  4. c语言输出字母A的ascii值,ascii是什么意思_C语言中如何输出ASCII码

    描述 ASCII是AmericanStandardCodeforInformationInterchange的缩写,用来制订计算机中每个符号对应的代码,这也叫做计算机的内码(code). 1.ASCI ...

  5. c语言 字符转换成ascii吗,C语言字符转换ASCII码

    //函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: //调用函数: //全局变量: //输    入:ASCII字符 //返    回:16进制 / ...

  6. C语言函数实现ascii码快速查询

    在C语言中为了方便快捷地实现ascii码的查询,我们可以利用函数的声明和定义来实现 新建一个项目 头文件: #pragma onceint ascii(char n); 源文件:因为要使用printf ...

  7. 汇编原理实验--输出ASCII码10H到100H

    实验1:ASCII码 设计算法:为了将ASCII的10H到100H输出显示,得从10H开始显示输出然后循环90h次,每次ASCII自增1,重复上述步骤. 编程实现:将循环次数90h存在计数器cx中,用 ...

  8. c语言数字的ascii码范围,c的ascii码值是多少?

    c的ascii码值是多少? 小写c的ASCII码值是99:大写C的ASCII码值是67.在ascii码中,65-90为26个大写英文字母(A~Z),97-122号为26个小写英文字母(a~z). 拓展 ...

  9. C语言 转义字符和ASCII码对照表

    转义字符 转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示. 转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) 008 \f 换页(FF) 012 ...

最新文章

  1. 上海电力大学计算机专业分数线,上海电力大学2020年录取分数线(附2017-2020年分数线)...
  2. 新浪微博oauth2.0弹出验证dialog中输入框被输入法覆盖的解决办法
  3. android activity启动流程_1307页!一线大厂Android面试全套真题解析!
  4. clion安装glfw_MacOS上使用Clion配置Vulkan开发环境
  5. VTK:可视化算法之PineRootDecimation
  6. linux在mak时候出现错误,在使用yocto构建linux映像时出现“memfd戋create的静态声明跟随非静态声明”错误...
  7. C 运算符中不能重载的是哪些
  8. python建模预测_如何使用Python进行节目观众数的线性回归预测
  9. Everything的使用-初级篇
  10. VS2012 正式版BUG太多
  11. MCAFEE卸载软件测试初学者,迈克菲卸载软件怎么用(手把手教你彻底卸载干净)...
  12. 工作两年前端经验分享
  13. 排查黑苹果系统RTL 8125B 2.5G网卡驱动故障
  14. android 模拟器终端 了解及部分命令
  15. 漫谈数据结构系列(一)之僧敲月下门
  16. 正则表达式的‘前瞻后顾’
  17. ifix5.8连接s7-300 plc的点-通过s7a power tool
  18. 复旦大学《数学分析》教学大纲,读后有感
  19. Redis缓存的雪崩、穿透、击穿
  20. CodeForces Gym 100989B LCS (B)

热门文章

  1. C++报错:0x00528549 处有未经处理的异常(在 ....exe 中): 0xC00000FD: Stack overflow(参数: 0x00000001, 0x015D2FA4)
  2. 时钟电路-负载电容和电阻计算
  3. 节日类非遗题材工笔人物画的创作实践 ——以《元日》系列作品为例
  4. java swing awt绘制一个图片查看器 图片显示 图片控件
  5. 故宫屋顶的小动物干嘛用
  6. 专业计算机的英语句子,计算机英语的常用句子
  7. 虚拟机网络图标不见了
  8. 【CSDN竞赛第28期】赢实体图书盲盒和高级定制背包等周边
  9. 军校空军士官计算机专业,军校分不够,没关系!18所士官学校报考名单来袭!...
  10. 两分钟,学会给网页添加加载动画