以下是从文本文件中获取输入的代码。我使用了charecter明智的阅读。当我打印B时,它仅在'rao'之后打印额外的行。
我的文本文件输入是:
1 singh
2 sen singh rao singh pal sen jain sen de rao
3
这是代码
int main() {
ifstream in;
in.open( "Text.txt" );
string s;
while(getline(in,s)){
char x;
x=in.get();
if(x=='1'){
string s;
in>>s;
}
if (x=='2'){
char c;
c=in.get();
c=in.get();
do{
string A;
string B;
do{
A=A+c;
c=in.get();
} while(c!=' ');
c=in.get();
do{
B=B+c;
c=in.get();
} while(c!=' '&&c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7');
cout<<B<<endl;
}
while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&c!='6'&&c!='7');
if(c!='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'){
in.putback(c);
}
}
}
}
答案 0 :(得分:2)
std::endl
插入换行符并刷新流。
如果您只想使用std::flush
,请说实话,大多数情况下您都不需要。
答案 1 :(得分:0)
首先,您可能需要修改代码,就像忘记输入文件中行末尾的空白区域一样,在此处进入无限循环:
do{
A=A+c;
c=in.get();
} while(c!=' ');
如果该行中的最后一个字符是' '
,那么就可以了:退出此循环但使用后面的c=in.get();
将char换行符加载到c中。
字符串B上的while循环首先将c(这是一个换行符char)加载到空字符串B中。然后从文件中读取char 3,这样就可以退出循环。
现在很明显,cout
会打印两个新行:一个在B中,另一个来自endl
。
如果您认为输入文件是这样的话,可能会更清楚:
1 singh[newline]2 sen singh rao singh pal sen jain sen de rao [newline]3
快速解决方案是在cout之前放置这条线:
if (B=="\n") B.clear();
我不确定代码的目标,因此我很难提出更好的设计。