2 gudong1996 gudong1996 于 2016.03.13 23:42 提问

新人提个c语言问题(手机有字数限制,所以代码比较难看。。。前面的部分就省了)

要求输入一个字符,输出它的ASCII码int main(){int b;scanf("%c",&b);printf("%c %d",b,b);return 0;}
前面定义b为int,但scanf里输入的是%c,为啥最终还能成功的输出字符的ASCII码?是因为scanf里用的是%C,然后电脑从键盘录入的时候自动把输入的东西录成字符型了?并没有受到前面的那个int影响?

7个回答

renlong0829
renlong0829   2016.03.14 00:57
已采纳

所有可以通过键盘输入的符号,在内存中就是以对应的ASCII码值存储的。
变量b保存的就是输入字符的ASCII码值。
%c是表示这个输入/输出必须是可以显示的字符。换句话说就是在一个txt文件里面能够出现的字符。
你按F1,ctrl,shift,alt之类的按键,是不能得到ASCII码的。

renlong0829
renlong0829 回复gudong1996: 是的。%c表示只接受可以显示的字符,这个字符是以ASCII值(取值范围32~126)保存在变量b里面。
2 年多之前 回复
gudong1996
gudong1996 回复renlong0829: 但是前面b定义的是int型呀,它怎么就被录入了字符?并且能够成功输出?是因为scanf里那个%c吗?
2 年多之前 回复
fanfan4569
fanfan4569   2016.03.14 10:12

因为每个字符的编码实际上也是用整型编的。如果你将它强行转换为整型,是可以转的

devmiao
devmiao   Ds   Rxr 2016.03.13 23:56

%c读取了字符,输出%c是字符,%d是 ascii,这是自动的。

gudong1996
gudong1996 回复苏小喵: 但前面定义的是int 型,它读取的时候不会收到这个定义影响吗?
2 年多之前 回复
gudong1996
gudong1996 回复苏小喵: 受到
2 年多之前 回复
gudong1996
gudong1996 回复苏小喵: 但是前面定义的是int 型呀,它不会收到定义影响吗?
2 年多之前 回复
baby00qi
baby00qi   2016.03.14 00:35

你说的应该是对的,int和char是通用的,我又用float型试了一下不成功,不过我以前还真没注意过这个问题

skyangel123
skyangel123   2016.03.14 08:15

ASCII字符就是只占一个字节的整型数据,推荐学习CSAPP数据编码一章

wangyan_HBU
wangyan_HBU   2016.03.16 17:03

你只需要记住“int类型可以用%d格式输出数值,char类型既可以用%c格式输出字符,也可以用%d格式输出该字符对应的ASCII码”就可以了。

Longyu_wlz
Longyu_wlz   2016.03.21 09:37

scanf()函数替你进行了转化
printf()替你进行了转化

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言-婚礼上的谎言
问题:三对情侣参加婚礼,3个新郎a、b、c,3个新娘x、y、z,有人想知道究竟谁和谁结婚,于是就问新人中的三位,得到如下提示:a说他将和x结婚;x说他的未婚夫是c;c说他将和z结婚。这人事后知道他们都在开玩笑,说的全是假话,那么究竟谁与谁结婚呢? 思路:用“a=1”表示新郎a和新娘x结婚,同理,如果新郎a不与新娘x结婚则写成“a!=1”,即x,y,z使用1,2,3表示,根据题意可以得
迷宫问题c程序
迷 宫问题自己写的迷宫程序,新手,有很多不足之处,希望通过这种方式多多学习提高问题描述迷宫游戏有多种。有的迷宫只要你能走出来就算成功;有的是要求不但能走出来,而且走的步数越少得分越高。为了能得到高分,你肯定在路线的选择上下功夫,尽量用最少的步数走出迷宫。 现有一个迷宫,可以用M行N列的矩阵来描述,迷宫中有以下6种标志: (1)$ :代表你所在的初始位置; (2)& :迷宫的出口位置; (3)
培养新人的一点感悟!
培养新人,一个恒古不变的职场话题,每家公司都会遇到,不仅包括新毕业的大学生,也包括刚刚招聘的新人,怎么样让这些新同事快速的融入公司和工作也是一个永恒的话题。        针对完全的新人,公司的职场老人门可能很多都不喜欢带,但是请思考一下,自己是否也是从新人一步步成长为一个老鸟的。针对这种完全的职场新人,我的思路是从两方面去引导。       1.技术方面,主要是详细的指导技术知识,矫正一些技
97 用C语言指针作为函数返回值
C学习网:链接->C学习网 C训练网:链接->C训练网 C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include #include char *strlong(char *str1, char *str2){ if(strlen(str1) >= strlen
C语言面试基础题以及答案
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。 2. 用预处理指令写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。 3.你怎么样用C编写死循环呢? 4. 用变量a给出下面的定义 a)一个整型数(An integer) b)一个指向整型数的指针(A pointer to an integer) c)一个指向指针的的指针,它指向的指针是
Java小假期第一次作业
1. 发现错误并改错。给出一个实现插入排序的程序,文件名为InsertionSort.java,该文件中有代码错误,请单步调试,发现错误, 并改正错误,提示:只有一行程序有错误,所以只能修改代码中的某一行程序。要求演示在eclipse开发环境下 单步调试程序,如果没有eclipse开发环境,也可以使用其它集成开发环境,但是必须演示调试能力。 2. 请编写程序输出13/17小数点后第100位的数字是几?考察循环和除法运算以及模运算(求余数运算)。 请补齐FractionalDigit.java文件中的代码 3. 请编写程序,分别使用循环和递归两种方法计算斐波那契数列第9项是几? 斐波那契数列的第1项为1,第2项为1,后续任意项的值为其前两项的和。 请补齐Fibo.java文件中的代码 4. 实现Array类中的indexOf函数; 阅读Node.java和SingleLinkedList.java两个关于单链表的类, 实现SingleLinkedList类中的indexOf函数; 5. 阅读Node.java和SingleLinkedList.java类,利用它们来实现栈和双向队列功能,请阅读Stack.java 和Deque.java(双向队列),请实现Stack类中的pop函数,请实现Deque.java中的removeLast函数。 6. 利用前面的Stack.java和Deque.java类,实现下面问题的求解: 队列中有从1到7(由小到大排列)的7个整数,问经过一个整数栈后,出栈的所有排列数有多少? 如果整数栈的容量是4(栈最多能容纳4个整数),那么出栈的排列数又是多少?(百度查询 卡特兰数) 请补齐Catalan.java文件中的代码 7. 八皇后问题。在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、 同一列或同一斜线上,问有多少种摆法。该程序代码在EightQueens.java文件中,请将void place(int n)函数 中未完成的代码补齐,并写出运行结果。 禁止修改其他代码。 8. 学生排序。给出4名同学,请按照学生的年龄排序,然后输出学生的学号和姓名。具体代码见Student.java文件, 请实现sort函数。并运行该程序。 9. 二叉排序树检索。BstNode.java和BinarySortTree.java是关于二叉排序树的程序文件,请阅读这两个程序 文件,请实现contains函数,并运行该程序。 10. BASE64编码转换问题。请百度百科查询base64编码,实现将二进制字节数据编码转换为base64的字符串数据,以及 将base64字符串转换回二进制字节数据。禁止使用JDK自带的Base64转换程序以及Apache开源网站上的程序, 必须自己编写代码来实现BASE64编码和解码函数。可以为该类添加其他数据成员和函数成员。
纯C语言:分治假币问题源码
#include #include int get_false_coin(int coin[],int low,int high) { int i,sum1=0,sum2=0,sum3=0; if(low==high-1) { if(coin[low]<coin[high]) return low; else return high; } if((high-low+
C指针操作——获取有分隔符字符串里的指定字符
获取"11,22,33;44,55,66;77,88,99"字符串中被“,”号隔开的每一个字符串 #include #include void main() {     char quick_dial_code[64]={0};     char vanity[32]={0};     char path[64]="11,22,33;44,55,66;77,88,99";    
C语言格式修饰符洋解
 格式修饰符:最小域宽限定符:百分号和格式代码间的整数称为最小域宽限定符,它保证输出时用空格填充以达到最小域宽。默认为空格,如果想用0来填充,那么在域宽限定符前放一个0。如:%05d将对不是五位数的输出数字填充0以达到最小域宽。精度限定符:如:%10.4f 该数至少10个字符宽,精确到小数点后面4位。对齐输出:默认时,所有输出均为右对齐。可以通过在百分号后加一个减号来迫使数据向域左边界对齐.如:%
C语言比较字符串
库函数strcmp是C语言中比较字符串的函数。 在头文件string.h中 int strcmp(char *a, char *b); int strncmp(char *a, char *b, N); //比较前N位 这个函数按照ASCII码表对两个字符串的每个字符进行比对。如果二者完全相同返回0, 如果字符串a中的字符ASCII码先出现较大者,则返回1,反之返回-1;...