-1

私は初心者なので、何が問題なのかを知るのを手伝ってください。ユーザーが終了するまで短い文を入力して、逆の順序で表示するようにユーザーに求めるプログラムを作成しようとしています。

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;
}
4

2 に答える 2

1

std::stringの代わりにを使用して、これを機能させることができましたchar input[SIZE]cin.getlineまた、実際には必要ないため、ループ内のパーツも削除しました。

std::string input;

do {
    // cin.getline(input, SIZE); <-- removed this line
    if (!getline(cin, input) || input.empty())
       break;
    lines.push_back(input);
} while (true);

こちらのデモをご覧ください。

于 2013-02-18T02:27:23.347 に答える
0

正常に機能すると言ったので...(コメントだけでなく、これを投稿に追加することを検討する必要があるかもしれません)

必要なのは、実行が終了した後、ウィンドウを保持することです。

次に、それは十分に簡単です。

#include <cstdlib>
// whatever.....
int main(){
  ......//whatever 
   .......//foo
    .......//bar
  system("pause"); // hold the window
}

ダミーの無限ループに置き換えるsystem()ことも同様に機能するはずです。これにより#include <cstdlib>、CPU時間を節約できますが、消費されます。

于 2013-02-18T02:48:19.883 に答える