【菜鸟求助】ACM题目:Reverse Text

来源:百度知道 编辑:UC知道 时间:2024/07/03 01:21:01
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i,j,n;
char str[71];
cin>>n;
cin.getline(str,71); //***标记***//
for(i=0;i<n;i++)
{
cin.getline(str,71);
for(j=strlen(str)-1;j>=0;j--)
cout<<str[j];
cout<<endl;
}
return 0;
}
以上已AC.
1.为什么去掉标记行,输出结果会不一样?去掉以后输出,输入n时会回车两行?
2.标记行的作用是什么?
谢谢各位!!!

这是个很古老的问题啦...原因是cin.getline是读到回车结束的,而且会把最后的回车从键盘缓冲区读掉.
上面的 cin>>n; 虽然读到了所需要的数字,但是并没有把后面的那个回车从键盘缓冲区拿掉,所以实际上后面的 cin.getline(str,71); 是把那个剩余的回车读掉, 这样后面的真正需要内容才能被循环中的 cin.getline(str,71);得到.

基于这个原理, 循环前面的 cin.getline(str,71); 也可由getchar();代替!!!
因为 getchar(); 刚好读掉一个字符,和 cin.getline(str,71); 的作用一样!