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格式读入字符型变量有风险,可能会覆盖其他数据,造成程序运行异常。

相关推荐
兮动人11 小时前
C语言之指针入门
c语言·开发语言·c语言之指针入门
漫随流水12 小时前
leetcode算法(151.反转字符串中的单词)
数据结构·算法·leetcode
ada7_12 小时前
LeetCode(python)78.子集
开发语言·数据结构·python·算法·leetcode·职场和发展
DeepVis Research12 小时前
【AGI/Simulation】2026年度通用人工智能图灵测试与高频博弈仿真基准索引 (Benchmark Index)
大数据·人工智能·算法·数据集·量化交易
努力学算法的蒟蒻12 小时前
day52(1.3)——leetcode面试经典150
算法·leetcode·面试
leoufung12 小时前
LeetCode 97. 交错字符串 - 二维DP经典题解(C语言实现)
c语言·算法·leetcode
nbsaas-boot13 小时前
Go 项目中如何正确升级第三方依赖(Go Modules 实战指南)
开发语言·后端·golang
wadesir13 小时前
C++基本数据类型详解(零基础掌握C++核心数据类型)
java·开发语言·c++
skywalk816314 小时前
wow文件处理trinitycore的文件处理
开发语言·游戏
一路往蓝-Anbo14 小时前
STM32单线串口通讯实战(五):RTOS架构 —— 线程安全与零拷贝设计
c语言·开发语言·stm32·单片机·嵌入式硬件·观察者模式·链表