c语言入门将ASCII码和字符相互转换及其思考

#include<stdio.h>
void main()
{
unsigned char a;
printf("enter char:");
scanf("%C",& a );
printf("ascii = %d", a );//强制转化为ascii码
}

同理;

#include<stdio.h>
void main()
{
unsigned char a;
printf("enter ascii:");
scanf("%d",& a );
printf("code = %c", a );
}

个人的两个小思考(欢迎评论讲讲你的看法)
 

1.如果输入的是字符串而非字符会出现如下情况

   如果输入一个超出ascii码上限255的数此时应当是数据溢出

   

   例如输入259 出现003对应的小桃心

2.如果先定义a为int或其他形式变量

格式化符号与变量类型 没有一一对应会怎样?
scanf (“格式化符号串”,变量1,变量2,…); printf (“格式化符号串”,变量1,变量2,…); ? 如果格式化符号与变量类型没有一一对应, 同样会给出一个结果,但造成的结局是:① 错误或不可预期的输入输出结果,或者,② 程序异常或崩溃(绝非危言耸听)

printf实例
char c='a'; int i=100; float f=1.234f; printf(“c = %c i = %d f = %f\n” , c, i, f); //正确 printf(“c = %c i = %d f = %f\n” , i, f, c); //错误 输出:c = a i = 100 f = 1.234000 c = d i = -1073741824 f = 0.000000

scanf实例
char c; int i; float f; scanf("%c%d%f", &i, &f, &c); //错误 printf("c = %c i = %d f = %f\n" , c, i, f); //正确 输入:a 100 1.234 输出:c = ? i = -858993567 f = 0.000000

最后附上一个c语言常见输入输出函数陷阱的小提示:

scanf与printf的陷阱

几个常见问题的说明
1. 2. 3. 4. 字符与字符串 转义字符 格式化符号 字符串如何换行书写

字符与字符串
字符常量:‘a? , ?0? , ?A? 字符变量:char c1, c2 = ?x?; 字符串:“abcdefg” 字符的实质:一个数据,这个数据指明 这个字符在ASCII表中的位置 字符串的实质:字符构成的序列

关于转义字符
? ‘\n?是一个整体,本质是一个字符常量,例 如可以定义: char c = ?\n?; ? 但字符‘\n?不能显示,而是代表在这里要进 行一次换行,这种特殊功能的字符称为转义 字符 ? 虽然‘\n?不能显示,但仍然要占用一个字符 单元 ? 类似的转义字符还有‘\t? (制表符)、‘\b? (蜂鸣)等等 ? 并不是所有的转义字符都不能显示(见教材)

格式化符号
%d %f %c 整型 浮点型 字符型

int a=10, b=10, c=10; printf(“a = %d b = %d c = %d\n” , a, b, c); 虽然abc都是同样的整型,但是%d一个也 不能少;scanf同理

字符串如何换行书写
? 方法一: printf(“Hello World!\n” “I like programming!\n”); ? 方法二: printf(“Hello World!\n\ I like programming!\n”);

危险指数 ★

陷阱1 不要忘记‘\n?
? printf函数并不另起一行输出,而是接着 当前光标的位置输出;如果要换行输出, 则一定要加上‘\n?。 ? 如下页的例子:

printf(“Hello World!”); printf(“I like programming!”); 输出为: Hello World! I like programming!(光标)

printf(“Hello World!\n”); printf(“I like programming!\n”); 输出为: Hello World! I like programming! (光标)

危险指数 ★ ★

陷阱2 scanf — 如果出现了就一定要输入
? 例如: int i, j; scanf(“%d%d”, &i, &j); ? scanf从左至右扫描用户的输入,并与格式化 符号串(本例中为“%d%d”)进行匹配,每当 遇到一个格式化符号(本例中为 ‘%d’)就 将用户输入的数据传递给与这个格式化符号 对应的参数中去 ? 注意:此种情况空格或回车代表一个数据的 结束

? 而如果在格式化符号串里出现了非格式 化符号的常规字符,例如: int i, j; scanf(“%dABC%d”, &i, &j); ? 这种情况下就必须如下输入才被正确接 收
100ABC200 输入结果: i=100 j=200

危险指数 ★ ★ ★

陷阱3 %f - 你能输入double吗?
? 如果希望输入双精度数,以下的程序能 否正常工作: double d; scanf(“%f”, &d); ? 事实证明这样是不行的

double 应该如何输入?
? 对以上程序做简单改动:

double d; scanf(“%lf”, &d);
? 这样就可以正确输入了,原因很简单, %lf代表这是一个long float,实际上就是 double

危险指数 ★ ★ ★ ★

陷阱4 格式化符号与变量类型 没有一一对应会怎样?
scanf (“格式化符号串”,变量1,变量2,…); printf (“格式化符号串”,变量1,变量2,…); ? 如果格式化符号与变量类型没有一一对应, 同样会给出一个结果,但造成的结局是:① 错误或不可预期的输入输出结果,或者,② 程序异常或崩溃(绝非危言耸听)

printf实例
char c='a'; int i=100; float f=1.234f; printf(“c = %c i = %d f = %f\n” , c, i, f); //正确 printf(“c = %c i = %d f = %f\n” , i, f, c); //错误 输出:c = a i = 100 f = 1.234000 c = d i = -1073741824 f = 0.000000

scanf实例
char c; int i; float f; scanf("%c%d%f", &i, &f, &c); //错误 printf("c = %c i = %d f = %f\n" , c, i, f); //正确 输入:a 100 1.234 输出:c = ? i = -858993567 f = 0.000000

危险指数 ★ ★ ★ ★ ★

陷阱5 千万不要忘记 &
int i; scanf(“%d”, i); // i前忽略了& ? 这样的代码运行后会造成什么结果? ? 结果是内存中某个地方几个字节的内容 被修改,如果恰好是内存中重要的内容 被修改,系统将失去稳定或崩溃

C++中是否还有这样的陷阱?
? scanf与printf是C语言标准库中的经典函 数,C语言中的一切在C++语言中都可以 继续应用,包括scanf与printf,但C++语 言的标准库中提供了更好的scanf与printf 的替代品,那就是cin与cout ……

 


 

猜你喜欢

转载自blog.csdn.net/viafcccy/article/details/83388700