如何将cin.getline()用于多行文本输入

时间:2018-03-24 23:10:44

标签: c++

我正在尝试创建一个字符数组,然后使用cin.getline()来存储来自多个行的用户的输入。

我知道我可以使用向量和字符串类轻松地完成此操作,但我需要使用C风格来完成。

int main (){
int size;
cout << "Please enter how many character you want to type: ";
cin >> size;
cin.ignore();
char array[size];

 while (cin.getline(array,size))
    {

        cin.getline(array,size);

    }
cout << array;

}

即使用户点击进入以及如何让用户随时停止迭代,我也无法弄清楚如何继续进行迭代。

这就是我使用向量和字符串

来解决它的方法
while ( getline (cin,input) ) {

        if ( input == "quit" ) {
        break;
        }
        container.push_back( input );
    }

我仍然需要像上面提到的那样去做。任何提示都将受到高度赞赏

  

编辑:

我希望我的程序像我使用不同的库编写的那样执行,这在此任务中是不允许的。

从键盘/文件中读取文本。按字母顺序排序每一行。将它们打印在屏幕上并保存在文件中。

我之前完成的完整程序:

使用namespace std;

class text_handling { 公共:

void keyboard_input (){

    string input;
    vector< string > container;
    vector< int > int_container;
    cout << "Pleas enter your text, Enter \"quit\" to exit: \n" ;
    while ( getline (cin,input) ) {

        if ( input == "quit" ) {
        break;
        }
        container.push_back( input );
    }

    cout << "#####################################"<<endl ;
    cout << "\nOriginal order of the text:"<<endl ;
    for_each( container.begin(), container.end(), [](const string& s) { cout << s << endl; } );

    sort( container.begin(), container.end() );

    cout << "#####################################"<<endl ;
    cout << "\nSorted order of the text:" << endl;
    for_each( container.begin(), container.end(), [](const string& s) { cout << s << endl; } );

    ofstream output_file("./example.txt");
    ostream_iterator<string> output_iterator(output_file, "\n");
    copy(container.begin(), container.end(), output_iterator);
    cout << "#####################################"<<endl ;
    cout << "Your file has been updated" << endl;
}


void file_input (){

    ifstream output_file("./example.txt");
    vector<string> container;
    string input;
    while(getline (output_file,input)){

    container.push_back(input);
    }

    for_each( container.begin(), container.end(), [](const string& s) { cout << s << endl; } );

}

}; int main(){

text_handling obj;
int x;
cout << "Please enter 1 if you want to write text using keyboard , Press any key to load text from file" << endl;
cin >> x;
if (x==1){
obj.keyboard_input();
}
else{
int start_s=clock();
obj.file_input();   
int stop_s=clock();
cout << "time: " << (stop_s-start_s)/double(CLOCKS_PER_SEC)*1000 << endl;
}

}

我需要做同样的事情,但不使用矢量或字符串或算法类。只是c风格。

我的想法是创建一个char数组并使用cin.getline()来读取用户输入的所有行。然后尝试循环遍历它们并以某种方式对它们进行排序并存储它们。正如你在上面的问题中看到的那样,我陷入了第一步的困境

0 个答案:

没有答案