回复 10楼 东方罗密欧
10楼分析的很好,学到东西了,但是fflush(stdin)的移植行好像不好,如果是gcc就不能编译通过了,用cin.clear()函数重置输入状态好像就能成功了...
回复 10楼 东方罗密欧
如果我没理解错误的话,足下的意思是:当输入流被标记错误状态,那么输入流的缓冲区将被冻结,由于输入流的输入机制是当按下回车换行符时,从缓冲区的第一个位置指针扫描,扫描到回车换行符之前的字符,然后将回车换行符流在了缓冲区,故而,当数据被冻结时,直接会跳过错误的数据而读入回车换行符,于是输入读入了空字符(据我所知gets函数不能连用就是因为会读入空字符串)。但是尊兄细看,如果是这样的机制,那么我在cin>>arr这行就应该会重置arr的数据才对,因为它读入了空字符串,但实际上,它并没有重置——它没有被改动过——应该是说此时的输入流无效才对。另外,如果刷新了输入流,我原来在数字字符尾输入的字符串何去何从呢?望启发童蒙。