为什么getline(cin,string_name)在我第一次在循环中使用它时会创建一个空字符串?

时间:2015-12-25 03:04:24

标签: c++ string file cin getline

所以基本上我会从代码开始,我的问题写在下面。

string words = "";
fstream outFile;
outFile.open(name, fstream::out);
for (int i = 0; i < number; ++i)
{
    getline(cin, words);
    outFile << i << ": " << words << endl;
    words == "";
}

number由用户提供。

我想要做的是创建一个文件,放入与数字一样多的记录,按顺序启动每个记录的编号(从0开始),然后将用户写入的文本放入控制台(它是将getline放入&#34;单词&#34;字符串)。

不幸的是我有一个问题,因为冒号后的记录号为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

example1 333 444

例2 444 555

我明白了:

0:示例111 222

1:example1 333 444

2:例2 444 555

&lt; - 然而,它创建了第四行(第3行),就好像在第2行结束后,它再次点击进入,但没有写任何东西。这不是我希望它如何工作,它应该创建用户指定的确切行数。

1 个答案:

答案 0 :(得分:0)

你忘记了;吗?

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已经指出的那样,你可能正在阅读之前的换行符。