C++ 为什么cin.getline()会跳过每行的第一个单词?

C++ 为什么cin.getline()会跳过每行的第一个单词?,c++,cin,C++,Cin,我试图逐行显示命令行输入的文本文件的文本。但出于某种原因,它会跳过第一行之后每行的第一个单词 代码: 但是moby.txt中的前三行是: CHAPTER 1. Loomings. Call me Ishmael. Some years ago--never mind how long precisely--having little or no money in my purse, and nothing particular to interest me on 代码省略了调用,几乎没有

我试图逐行显示命令行输入的文本文件的文本。但出于某种原因,它会跳过第一行之后每行的第一个单词

代码:

但是moby.txt中的前三行是:

CHAPTER 1. Loomings.

Call me Ishmael. Some years ago--never mind how long precisely--having  
little or no money in my purse, and nothing particular to interest me on
代码省略了调用,几乎没有。 我觉得这是一个错误,但我不知道如何修复它。 提前感谢您的帮助

cin.getline(x,100) >> argv[2];
将一行或该行的前99个字符读入x。然后跳过任何空格,将下一个单词读入argv[2]。第一句话就在这里结束了

为什么要使用>>argv[2]?你想用这个做什么?argv[2]可能不存在,即使它存在,您也无法控制argv[2]指向的字符数组的大小,因此溢出该数组的可能性非常高

与其直接使用字符数组,不如使用std::getline和std::string将行读入std::string对象:这样编写正确的代码要容易得多。比如说,

std::string x;
if (!std::getline(std::cin, x)) {
    // handle input error
}
将一行或该行的前99个字符读入x。然后跳过任何空格,将下一个单词读入argv[2]。第一句话就在这里结束了

为什么要使用>>argv[2]?你想用这个做什么?argv[2]可能不存在,即使它存在,您也无法控制argv[2]指向的字符数组的大小,因此溢出该数组的可能性非常高

与其直接使用字符数组,不如使用std::getline和std::string将行读入std::string对象:这样编写正确的代码要容易得多。比如说,

std::string x;
if (!std::getline(std::cin, x)) {
    // handle input error
}

@詹姆斯·麦克内利斯已经指出了基本问题。我的建议是:

不要使用getline的成员函数形式。 不要在同一语句中混合使用getline和>>。 使用循环。
@詹姆斯·麦克内利斯已经指出了基本问题。我的建议是:

不要使用getline的成员函数形式。 不要在同一语句中混合使用getline和>>。 使用循环。

我发现其他C++ GETLIN更容易使用,更安全;p>

string str;
getline (cin,str);

将把整行串成一个字符串,然后您可以通过许多精细字符串方法或stringstream(如果您想对字符串的某些部分执行I/O)来使用它

> P>我发现其他C++ GETLIN更容易使用,更安全。p>
string str;
getline (cin,str);

将把整行串成一个字符串,然后您可以通过许多精细字符串方法或stringstream(如果您想对字符串的某些部分执行I/O)来使用它

我选择这样做是为了确保在使用getline时不会遗漏任何单词或字母:


我选择这样做是为了确保在使用getline时不会遗漏任何单词或字母:


@user646651:您认为>>argv[2]到底在做什么?您为什么要编写它?我的意思是argv[2]是从命令行参数输入的moby.txt文件。所以我的意思是让这行代码在moby.txt文件中读入cin.getlinex,100。@user646651:No.argv[2]是一个char*。>>argv[2]跳过任何空白字符,然后从流std::cin中读取下一个单词(在本例中为该字符*指向的字符数组)。moby.txt的内容可以通过std::cin获得:这就是命令行上的>argv[2]到底在做什么,为什么要编写它?我的意思是argv[2]是从命令行参数输入的moby.txt文件。所以我的意思是让这行代码在moby.txt文件中读入cin.getlinex,100。@user646651:No.argv[2]是一个char*。>>argv[2]跳过任何空白字符,然后从流std::cin中读取下一个单词(在本例中为该字符*指向的字符数组)。moby.txt的内容可以通过std::cin获得:这就是命令行上的>argv[2];的一种非常有创造性的使用;。我必须记住,下一次我真的想跳过每行开头的内容。我的同事永远猜不到它的作用!你为什么要读argv?!?语言cin.getliney,100>>argv[2];,的一种极具创造性的用法;。我必须记住,下一次我真的想跳过每行开头的内容。我的同事永远猜不到它的作用!你为什么要读argv?!?一般来说,在混合getline和>>时要格外小心。一般来说,在混合getline和>>时要格外小心。感谢您的编辑。第一次邮寄。两天前刚刚开始使用Vs代码。我在使用getline时遇到了很多麻烦,直到我找到了这个用法。我没有在别的地方找到它,只是一直在试
不同的事情,直到有事情发生。。。仍然需要了解如何突出显示getline,以及为什么需要删除空格。我这样问是因为在发帖时说要缩进8个空格,把它变成代码。谢谢你的编辑。第一次邮寄。两天前刚刚开始使用Vs代码。我在使用getline时遇到了很多麻烦,直到我找到了这个用法。我没有在其他地方找到它,只是不断尝试不同的东西,直到有些东西起作用。。。仍然需要了解如何突出显示getline,以及为什么需要删除空格。我这样问是因为在发帖时说要缩进8个空格,以便将其转换为代码。
cout << "\nEnter some words: ";

while (getline(cin,myString)){
       getline(cin,myString);
       break;
};