C语言小白一个,二级水平,遇到了一个问题。
C程序如下,一个简单的输入、输出程序。
运行环境是codeblocks17.12
void main()
{
char c1,c2;
scanf("%3c%3c",&c1,&c2);
printf("c1=%c,c2=%c",c1,c2);
}
当我输入“abcdef<回车>”时
当我输入“abcdefgh<回车>”时
当我输入“abcde<回车>”时
当我输入“abcd<回车><回车>”时
为什么会这样?真的不理解,看了网上其他人的一些提问,感觉这个程序不应该是这个结果,是不是编译器配置的问题,还是其他什么原因?有没有大佬可以解答一下,万分感谢!
或者你可以试下把两个变量的地址打印出来,查看一下,所谓的%3c应该是要获取3个字符,而c1不是数组,而是一个char变量。其实不必太过于执着scanf,等你以后学到指针就可以利用宏自己写一个类似于scanf的函数
C语言scanf函数内部不是不允许使用宽度,精度等格式符吗?
scanf 字符类型转换说明 一般不定义精度 宽度, 字符串可以
为什么我的是这样的
%3c%3c
输入abcde
输出ad
你的我不理解。。
scanf函数中的%3c是格式码,大概的意思是隔几个字符取到你想要的,你可以把他改成%2c或者%c你就知道是什么意思了
你输入abcd会报错,是因为输入不完整,scanf一定会去读后3个,造成内存越位
但你输入abcde不会报错,是因为C++帮你在后面补了一个/0