2014-09-27 580 views
0

我在创建的程序中有一个while循环的问题。 基本上这是假设要求用户输入,直到ctrl + D进入(条目最终将存储在一个数组中,但我只是试图在我开始之前检查输出)stepC++ while循环和getline问题

问题是当我cout变量时,第一行缺失。

int main() 
{ 
    string title; 
    string url; 
    string comment; 
    double length = 0.0; 
    int rating = 0; 
    string sort_method; 

    cin >> sort_method; 

while(getline(cin,title)) 
{ 
     getline(cin, title); 
     getline(cin, url); 
     getline(cin, comment); 
     cin >> length; 
     cin >> rating; 
     cin.ignore(); 

} 
    cout << title << endl; 
    cout << url << endl; 
    cout << comment << endl; 
    cout << length << endl; 
    cout << rating << endl; 

我很感激任何帮助。

+3

你两次读称号。删除while(get-while)条件中的getline(cin,title); ** **。如果您希望与每组输入交互式地看到它们,请将while循环在下方插入* cout插入。 – WhozCraig 2014-09-27 04:29:48

+0

将所有这些读入一个单独的函数可能是值得的。这里是一个示例结构,我提供了另一个可能(或可能不会)帮助的问题:http://stackoverflow.com/questions/26027674/readline-in-c/26027873#26027873 – Galik 2014-09-27 04:33:36

+0

把'cin.ignore()'在第一个'getline'之前。 – 0x499602D2 2014-09-27 04:43:51

回答

0

我编译了你的代码。你没有给身体上的任何指令来打破这一切。 (1)你已经使用了cin.ignore();你可以使用cin.ln函数而不是使用这个(cin.ignore(256,'\ n'))。这有助于为下一个输入获取cin的空缓冲区。 (2)你需要关注while循环应该中断的条件。我在这里查看你的第一个输入变量标题。在while循环之后的第一条语句应该是条件应该是(具体决定条件,如标题(先生小姐)),如果(title!=“Mr.”|| title!=“Miss。”|| title !=“太太”)比休息; (3)显示所有输入作为输出..你应该存储它们。如果你不想要,把所有的cout语句放在while循环中。

#include <iostream> 
using namespace std; 
int main() 
{ 
    string title; 
    string url; 
    string comment; 
    double length = 0.0; 
    int rating = 0; 
    string sort_method; 
    cin >> sort_method; 

    while(getline(cin,title)) 
    { 
     // use operator overloading 
     if(title!="Mr."||title!="Mrs."||title!="Miss.") 
      break; 
     getline(cin, url); 
     getline(cin, comment); 
     cin >> length; 
     cin >> rating; 
     cin.ignore(256,'\n'); 
     cout << title << endl; 
     cout << url << endl; 
     cout << comment << endl; 
     cout << length << endl; 
     cout << rating << endl; 
     cout<<"for quit press 'q'"<<endl; 
    } 
    return 0; 
} 

希望如此,这可能帮助你...