为什么getline(cin,string_name)在我第一次在循环中使用它时会创建一个空字符串
Why does getline(cin, string_name) creates an empty string the first time I use it in a loop?
所以基本上我将从代码开始,我的问题写在下面。
string words = "";
fstream outFile;
outFile.open(name, fstream::out);
for (int i = 0; i < number; ++i)
{
getline(cin, words);
outFile << i << ": " << words << endl;
words == "";
}
CCD_ 1由用户给定。
我想做的事情是创建一个文件,根据数字放置尽可能多的记录,按顺序(从0开始)以数字开头每个记录,然后将用户在控制台中写入的文本(通过getline将其放入"words"字符串中)。
不幸的是,我遇到了一个问题,因为对于冒号后的记录编号0,它会打断一行,实际上它会开始从下一条记录中复制文本。
为什么会发生这种情况?有人能解释一下吗?
编辑:
#include <iostream>
#include <cstdio>
#include <fstream>
#include <string>
using namespace std;
int main()
{
short int counter_of_commands;
string cmd = "";
string name = "";
cin >> counter_of_commands >> cmd;
if (cmd == "create")
{
string words = "";
int records;
cin >> name;
cin >> records;
fstream outFile;
outFile.open(name, fstream::out);
for (int i = 0; i < records; ++i)
{
if (i == 0)
getline(cin, words);
getline(cin, words);
outFile << i << ": " << words << endl;
words == "";
}
outFile.close();
}
return 0;
}
对于输入:1
创建example.txt 3
示例111 222
示例1 333 444
示例2 444 555
我得到:
0:示例111 222
1:示例1 333 444
2:示例2 444 555
<-然而,它创建了第四行(第3行),就好像在第2行结束后,它又点击了一次回车,但什么都没写一样。这不是我希望它的工作方式,它应该创建用户指定的确切行数。
您忘了这里的;
吗?
for (int i = 0; i < number; ++i)
而不是
for (int i = 0 i < number; ++i)
编辑(OP评论后):
好吧,这很好:
int number = 3;
string words = "";
fstream outFile;
outFile.open("c:/test/test1.txt", fstream::out);
for (int i = 0; i < number; ++i) {
getline(cin, words);
outFile << i << ": " << words << endl;
words == "";
}
但正如Vaughn Cato已经指出的那样,你可能正在阅读之前的一行。