C语言scanf用%d读入字符型变量,通过输入字符的ASCII码输入字符

有时候需要通过输入字符的ascii码来输入字符,存于字符型变量,于是这样写代码:

cpp 复制代码
#include <stdio.h>
int main(){	
	char c;		
	scanf("%d",&c);
	printf("%c\n",c);
	return 0;
}

程序运行正确:

但是,再多读一个字符:

cpp 复制代码
#include <stdio.h>
int main(){	
	char c1,c2;		
	scanf("%d",&c1);
	scanf("%d",&c2);
	printf("c1=%c\tc2=%c\n",c1,c2);
	return 0;
}

程序运行就不对了,c1中读入的字符莫名其妙消失了

再试验一下:

cpp 复制代码
#include <stdio.h>
int main(){	
	char c1='1',c2='2',c3='3',c4='4',c5='5',c6;		
	scanf("%d",&c6);	
	printf("c1=%c\tc2=%c\tc3=%c\tc4=%c\tc5=%c\tc6=%c\n",c1,c2,c3,c4,c5,c6);
	return 0;
}

可以看出,c3,c4,c5的值消失了。

原因是:

正确的做法是:将ascii码读进一个整型变量t中,再赋值给字符型变量,期间有隐形类型转换,去掉了多出来的3个字节。

cpp 复制代码
#include <stdio.h>
int main(){	
	char c1='1',c2='2',c3='3',c4='4',c5='5',c6;	
	int t;
	scanf("%d",&t);
	c6=t;
	printf("c1=%c\tc2=%c\tc3=%c\tc4=%c\tc5=%c\tc6=%c\n",c1,c2,c3,c4,c5,c6);
	return 0;
}

可以看出,程序运行正确。

提醒:用scanf用%d格式读入字符型变量有风险,可能会覆盖其他数据,造成程序运行异常。

相关推荐
虽千万人 吾往矣16 分钟前
golang gin入门
开发语言·后端·网络协议·tcp/ip·golang·gin
赤橙红的黄18 分钟前
责任链模式
java·开发语言
Eric.Lee202123 分钟前
whisper 实现语音识别 ASR - python 实现
算法·whisper·语音识别·asr·语言转文字
satan–02 小时前
R语言绘制面积图
开发语言·windows·vscode·信息可视化·r语言·数据可视化
sp_fyf_20242 小时前
【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·健康医疗
黎明smaly2 小时前
从零学编程-C语言-第17天
c语言·数据结构·c++·算法·visual studio
Mephisto.java2 小时前
【力扣 | SQL题 | 每日四题】力扣613, 579, 578, 580, 585
算法·leetcode
_麦麦_3 小时前
[C++]——多态
开发语言·c++
api茶飘香3 小时前
淘宝商品评论API返回值中的品牌忠诚度评价
开发语言·python·django·flask·virtualenv·pygame·tornado