如何使用cin将整数值输入到char类型变量中?
用cin将整数值输入到char类型变量的实现方法
其实核心是利用ASCII字符的连续编码特性,咱们先理清逻辑,再结合你给出的代码分析:
原理说明
在C++中,char本质是一个1字节的整数类型(默认对应ASCII编码)。当你用cin >> char变量读取输入时:
- 如果输入的是数字键(比如键盘敲
1),cin会把该字符的ASCII值存入char变量(比如'1'的ASCII是49),而不是直接存整数1。 - 要把这个字符形式的数字转成对应的整数值,只需要用
字符变量 - '0':因为ASCII表中'0'到'9'是连续排列的,'0'的ASCII是48,所以'1'-'0' = 49-48=1,刚好得到对应的整数。
你的代码分析
这段代码正是基于上面的原理实现顶点输入的,关键部分拆解:
void defineEdge() { char vertex1, vertex2; int charToInt = 0; while (charToInt != -1) { cout << "Define an edge by listing a pair of vertices (-1 to stop): "; // 用cin直接读取输入的字符(比如输入'1' '2',vertex1存'1',vertex2存'2') cin >> vertex1 >> vertex2; cin.ignore(256, '\n'); // 忽略输入缓冲区剩余的换行符 // 将字符形式的顶点编号转成整数 charToInt = vertex1 - '0'; // 将顶点对对应的邻接矩阵位置设为1(表示有向边) graphMatrix[getVertexIndex(vertex1, vertex2)] = 1; } }
小提醒
这里提个细节:你的循环停止条件是charToInt != -1,但按照当前逻辑,只有当vertex1 - '0' == -1时才会停止,也就是vertex1的ASCII值是47(对应字符'/'),这和你提示的输入-1停止不匹配。如果要实现输入-1停止,需要修改判断逻辑,比如检查输入的是否是"-1"字符串,或者调整读取方式~
内容的提问来源于stack exchange,提问作者anthony_park
相关产品推荐
相关产品推荐

