你说的执行是回车符吧('\r', 0x0d), 在这里你可以无视它. 你在按下回车键时,实际读入输入缓冲区的只有一个换行符('\n', 0x0a)。
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读入, 但是输入缓冲区里还有一个'\n'. getchar()把'\n'取出,以免影响gets. 而gets在遇到'\n'时会停止读数据,所以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符。
1、换行是光标从当前位置换到下一行;
回车是光标从当前位置回到本行的行首;
换行回车效果就是前面两个效果的叠加,也就是换到下一行,并回到行首
2、回车符是Carriage Return, C语言中是'\r'
换行符是Line Feed, C语言中是'\n'
回车换行符实际是两个字符, 就是\r\n
/r
scanf("%d",&num[i]);执行后, 你输入数字123, 按回车,输入缓冲区的内容是"123\n". 这时数字被scanf读入, 但是输入缓冲区里还有一个'\n'. getchar()把'\n'取出,以免影响gets. 而gets在遇到'\n'时会停止读数据,所以如果不用getchar取出'\n', gets遇到'\n'立即停止,只能读到一个空串, '\0'. 这个'\0'是gets自己添加到字符串尾的,读不到数据就会有这样一个字符,这个是字符串结束标志,并非读到的字符。
OK