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

Why does getline(cin, string_name) creates an empty string the first time I use it in a loop?

本文关键字:字符串 一个 创建 循环 string cin getline name 为什么 第一次      更新时间:2023-10-16

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

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

相关文章: