【问题标题】:cin missing first word of linecin 缺少行的第一个单词
【发布时间】:2016-08-13 01:25:09
【问题描述】:

我在涉及 cin 的程序中遇到问题。

我的问题是我输入的所有内容的第一个单词似乎都被跳过了,这可能是因为缓冲区的处理方式。我已经看到过类似的帖子,但尝试将他们的修复应用到我的代码到目前为止都失败了。应该发生的是用户输入一个名称,并且该名称与其他输入的数据一起存储在一个文本文件中。但是,它总是丢掉第一个单词。

#include "string"
#include "stdafx.h"

string _name;    

int main()
{
    cout << "Choose a name" << endl;

    getline(cin, _name);
    cout << _name;

    ofstream dat;
    dat.open("data.txt");
    dat << _name;
    dat.close();
        return 0;
    }

此代码似乎是问题所在。我只是无法接受第一个单词。

【问题讨论】:

  • 请发布您有问题的真实代码,而不是虚构的甚至无法编译的幻想代码。
  • 不用担心,如果事实上这已经被回答过,它将被标记为重复,并带有正确的重复问答链接

标签: c++ cin getline


【解决方案1】:
cin >> _name;

这会将输入第一行的第一个单词读入_name

getline(cin, _name);

这会将行的其余部分读入_name。这会覆盖 name 的现有内容。

因为这会覆盖 _name 的现有内容,其中包含读取的第一个单词,所以最终会读取除该行的第一个单词之外的所有内容,如您所述。

如果您只想将整行读入_name,唯一需要做的就是删除cin &gt;&gt; _name

【讨论】:

  • 我已经尝试删除 cin >> _name 这样做会导致没有输入任何内容。
  • 为我工作。定义“无需输入”。
  • 我的意思是我输入的内容都没有读入 _name 但我只是修复了它,它只是像以前一样删除了第一个单词
  • 你怎么知道“它只是像以前一样丢掉第一个单词”?问题中显示的代码中没有任何内容显示_name 的内容。如果确实如此,它将表明它按预期工作。很抱歉,但我们所有的通灵师现在都出去吃午饭了,办公室里没有人知道如何操作神奇的心灵射线机,它需要射入你的头脑并查看你正在运行的实际代码,而不是问题中显示的幻想代码,它工作得很好。
  • 我问题中的代码是问题的全部代码,而不是“幻想代码”,我可以说我已经编写了接受 _name 并将其放入文本文件的代码.但据我所知,文本文件的代码很好,我没有包含它
【解决方案2】:

如果您想从 cin 中读取名称,那么您的代码应如下所示:

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

int main()
{
    string _name;
    cout << "Choose a name : ";

    getline(cin, _name);
    cout << _name << endl;

    // Do something with _name - write to file etc..
    // ..
}

【讨论】:

  • 我认为您在使用 cin 和 getline() 时遇到了问题。 cin>> 将换行符留在 iostream 中,如果在 cin>> 之后使用 getline,则额外的换行符会导致第一个单词丢失。尝试在 cin 之后和真正的 getline() 之前添加一个虚拟 getline()。
  • 我会尝试的,但奇怪的是我复制粘贴了你的代码,看看它是否可以工作,但在将它与我的程序的其余部分一起放入后,程序只是跳过了 getline并返回 0。
  • cin/getline() 问题也在这里讨论:stackoverflow.com/questions/5739937/…
  • 好吧,我看看这是否能回答我的问题,但到目前为止,我将其归结为我的 VS 安装中的一个错误,因为复制粘贴相同的代码破坏了我的程序
猜你喜欢
  • 2012-03-17
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多