私は初心者なので、何が問題なのかを知るのを手伝ってください。ユーザーが終了するまで短い文を入力して、逆の順序で表示するようにユーザーに求めるプログラムを作成しようとしています。
My name is Todd
I like to travel
そしてそのように表示します:
I like to travel
My name is Todd
誰でも私がそれを正しく機能させるのを手伝ってくれる。正しく動作しますが、実行後すぐに終了することはありません。窓を握りたいです。前もって感謝します
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
const int SIZE = 500;
char input[SIZE];
// collection that will hold our lines of text
vector<string> lines;
do
{ // prompt the user
cout << "Enter a short sentence(<enter> to exit): ";
cin.getline(input,SIZE);
if (!getline(cin, input) || input.empty())
break;
lines.push_back(input);
} while (true);
// send back to output using reverse iterators
// to switch line order.
copy(lines.rbegin(), lines.rend(),
ostream_iterator<string>(cout, "\n"));
// assume the file to reverse-print is the first
// command-line parameter. if we don't have one
// we need to leave now.
if (argc < 2)
return EXIT_FAILURE;
// will hold our file data
std::vector<char> data;
// open file, turning off white-space skipping
cin>>(argv[1]);
cin.seekg(0, cin.end);
size_t len = cin.tellg();
cin.seekg(0, cin.beg);
// resize buffer to hold (len+1) chars
data.resize(len+1);
cin.read(&data[0], len);
data[len] = 0; // terminator
// walk the buffer backwards. at each newline, send
// everything *past* it to stdout, then overwrite the
// newline char with a nullchar (0), and continue on.
char *start = &data[0];
char *p = start + (data.size()-1);
for (;p != start; --p)
{
if (*p == '\n')
{
if (*(p+1))
cout << (p+1) << endl;
*p = 0;
}
}
// last line (the first line)
cout << p << endl;
return EXIT_SUCCESS;
}