int类型能否存储字符?C语言程序字符匹配异常排查
问题分析与解决
你的程序输入'K'却输出"no match found",核心原因是**scanf格式符与变量类型不匹配**。
具体原因
%c格式符要求传入char*类型的指针,但你传入的是int*类型的&a。在多数系统中,int占4字节,char占1字节,scanf只会向目标地址写入1字节的字符数据,int变量的剩余高位字节会保留随机垃圾值。这导致a的实际值不是'K'对应的ASCII码75,而是包含高位垃圾值的整数,自然无法匹配case 'K'或case 'k'。
解决方法
方法一:修改变量类型为char(推荐)
直接将变量a的类型改为char,让scanf的格式符和变量类型匹配:
#include <stdio.h> #include <conio.h> int main(void) { char a; clrscr(); printf("enter character"); scanf("%c", &a); switch(a) { case 'K': printf("upper case"); break; case 'k': printf("lower case "); break; default: printf("no match found"); break; } return 0; }
方法二:保留int变量,通过中间char中转
如果一定要用int存储字符,可以先读取到char变量再赋值给int,确保数据完整:
#include <stdio.h> #include <conio.h> int main(void) { signed int a; char temp; clrscr(); printf("enter character"); scanf("%c", &temp); a = temp; switch(a) { case 'K': printf("upper case"); break; case 'k': printf("lower case "); break; default: printf("no match found"); break; } return 0; }
内容的提问来源于stack exchange,提问作者Koustubh Sharma
相关产品推荐
相关产品推荐

