如何解决 for 循环中潜在的 getline() 问题,数组的第一个索引未显示? [复制]

Posted

技术标签:

【中文标题】如何解决 for 循环中潜在的 getline() 问题,数组的第一个索引未显示? [复制]【英文标题】:How to solve potential getline() issue in a for loop, First index of an array isn't showing up? [duplicate] 【发布时间】:2019-06-29 17:57:49 【问题描述】:

我正在创建一个包含术语和定义词典的程序。它需要我创建两个输入长度的字符串数组。然后提示用户分别输入术语和定义。它有 2 个功能,主要功能(作为输入功能)和输出功能。我已经包含了我的代码。

我的问题是我得到的输出,它似乎无法将术语的索引 0 识别为任何内容。它跳过它并将所有内容都放在一个索引中。我认为这与我的 getline() 函数有关。

我试过 cin.ignore() 并且只删除每个字符串的第一个字符。

#include <iostream>
#include <string>
using namespace std;


//Main acts as the input function
int main() 


    //Declarations
    void output(string* terms, string* definitions, int numEnteries);
    string* terms;
    string* definitions;
    int numEnteries;

    //Input
    cout << "How many terms would you like in the dictionary?: " << endl;
    cin >> numEnteries;

    //Making the arrays the size the user wants
    terms = new string[numEnteries];
    definitions = new string[numEnteries];

    //Inputs for both terms and definitions
    //I think the issue may be in this loop, I may be wrong though
    for (int i = 0; i < numEnteries; i++)
        cout << "Enter term " << (i+1) << ":";
        getline(cin, terms[i]);
        cin >> ws;

        cout << "Enter the definition for '" << terms[i] << "': ";
        getline(cin, definitions[i]);
        cin >> ws;
    

    //Calling the output function
    output(terms, definitions, numEnteries);

    return 0;


void output(string terms[], string definitions[], int numEnteries)

    cout << "You entered: " << endl;

    //Outputting the terms and definitions in order
    for (int i = 0; i < numEnteries; i++)
    cout << (i+1) << ". " << terms[i] << ": ";
    cout << definitions[i] << endl;
    

    //Deleting the "new" arrays
    delete[] terms;
    delete[] definitions;

我希望输出是一个不错的列表,例如: 1.“第 1 项:定义 1” 2.“第 2 项:定义 2” ...等

但相反,我得到: 1. : 第 1 学期 2. 定义 1:第 2 学期 3. def 2:第三学期

【问题讨论】:

【参考方案1】:

看起来你基本上忘记了一个

//Input
cout << "How many terms would you like in the dictionary?: " << endl; 
cin >> ws;

输入号码后。添加后一切似乎都按预期工作,请参阅here。

【讨论】:

这似乎有帮助,但现在我遇到了一个奇怪的间距问题。在我输入输入的数量后,它会提示我输入第一个术语,但不会打印“输入术语 1”这一行,直到我输入其他内容并按 Enter 后。然后将以下输入推回错误的打印行。

以上是关于如何解决 for 循环中潜在的 getline() 问题,数组的第一个索引未显示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何正确继续存在潜在错误的 for 循环? [复制]

如何强制getline()一次输入一行[重复]

awk从入门到入土(11)awk getline函数详解

字符串——明文加密

字符串——明文加密

第3章 字符串向量和数组