为什么scanf 函数中不能加\n

当代码是scanf(“%d\n”,&a);时

如果你输入数字后一直按回车,scanf就会一直阻塞在那里,直到你再一次输入。

而且运行结果只会识别第一个数,不会识别第二个数。如图,

 

为什么scanf 函数中不能加\n_第1张图片

 

当你代码是scanf(“%d”,&a);时,代码就会很顺利的成功运行

为什么scanf 函数中不能加\n_第2张图片

这是为什么呢?为什么scanf 函数中加了\n会出现这种情况呢?

原来,

C程序执行scanf时,会从缓冲区读数据,如果缓冲区是空的,就阻塞住,等待你从键盘输入。

输入结束后按回车会执行scanf函数,程序会逐个读取缓冲区的数据,注意,这时会将\n留在缓冲区(缓冲区只剩下\n)

当代码是scanf(“%d\n”,&a);时,scanf函数的第一个参数(即%d\n)指定了后面变量读取的格式,j就是会按照 数字 回车 的格式读取,当你输入数字结束按回车时,刚好满足这种形式,这时缓冲区内什么都没有。

这时就需要再一次输入然后再按回车,使\n可以留在缓冲区。这样代码才会继续往下执行。

而且,\n是回车的意思,scanf函数是输入函数,顾名思义,输入函数时不需要我们来换行。

所以,使用scanf函数是不需要加\n的,加了反而会出错。

参考https://blog.csdn.net/weixin_44967885/article/details/108994960 

你可能感兴趣的:(c语言,c++)