编程小白求问,为什么下图for循环中scanf()只执行了一次?
实际运行的时候,scanf 输入ABCDE后 按Enter,程序自动将ABCDE五个字母赋值给了数组的五个元素。
而为什么不是这样?scanf 输入A,按Enter,赋值给数组第0个元素;输入B,按Enter,赋值给数组第1个元素。。。这样一个一个赋值?
这个问题看起来简单讲起来复杂
scanf()其实是执行了5次,每次读入一个字符,将它加4之后再输出的,但是它看起来好像一下就执行完了,这是因为:
1.scanf函数会从输入缓冲区里读数据,如果输入缓冲区是空的,那么代码会阻塞在这里,只要输入缓冲区不是空的,它就会从里面读一个数据出来,同时将数据从缓冲区里清除
2.你在控制台下敲字符的时候,并不总是会进入输入缓冲区里,只有当你敲击了回车键(换行符),输入才会进入缓冲区
3.你键入的换行符同样会进入输入缓冲区
4.如果你想一行数据一换行,需要代码里将多余的换行符读入,否则换行也被存进了数组里,也+4再输出,那输出的必定是乱码
小学生问题。这么短的代码,而且逻辑很清晰:第一步把输入的字母赋给数组元素,第二步将元素值加4,第三步输出元素值。
因为你scanf在for循环里边,所以每次循环都会执行一次,分别赋值 ch[0],ch[1],ch[2],ch[3],ch[4]