目录
问题前言
曾经博主在大一上学期学习C语言基础的时候,常常被这个问题而困扰,但在习惯用C++编程后,这种问题便很少困扰我了,这是为何(๑•̌.•̑๑)ˀ̣ˀ̣呢?请各位看下面代码运行结果:
我们对x,y,a,b四个变量赋值,但却只有x,y赋值成功了,字符型变量a被赋值了一个换行符,本应该赋值给变量a的字符c,却赋值给了变量b,这是为什么(๑•̌.•̑๑)ˀ̣ˀ̣呢?那接下来请大家认真听哦!
我们在输入数据的时候,其实是经历了这样一个过程,先从键盘输入数据,但这些输入的数据其实并不会直接存放在相应变量的地址中,而是先存入缓冲区中,再依次赋值给相应的变量~ 在完成第一组输入时,我们是不是要打一个空格或者是回车或者其他字符去结束数据的输入呀!(这里博主打的是回车,回车也就是一个字符,依次读取的时候,回车符就存入了变量a中,c就存入了变量b中)
解决方案
方案一:![](https://img-blog.csdnimg.cn/536c8bc46dee4989abb66cde0881f8c0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiK6K--5oC754ix54K55aS055qE5bCP5bCP5oCq5LiL5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
第二次输入时,前面打一个空格将回车符号吃掉~
方案二:![](https://img-blog.csdnimg.cn/b33466748c58449ea176a9bbd0f448ef.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5LiK6K--5oC754ix54K55aS055qE5bCP5bCP5oCq5LiL5aOr,size_20,color_FFFFFF,t_70,g_se,x_16)
在第一次输入结束后,打一个getchar(),去吃掉存在缓冲区中的回车符。
方案三:
改用C++输入数据!因为用C++中cin输入数据时,不会像scanf() 一样吃回车符号。(但是不是一直要用C++输入数据的呢?有时在a题时,用C++会TLE,而C语言不会,因为C++跑的比C语言慢许多~)
小结
🥂(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力🤞