2016-12-29 22 views
0

私は運動に問題があります。私はいくつかの数字を与える必要があり、プログラムはそれらを逆順に表示することですが、最後に入力した数字は表示されません。あなたの入力し、最後の番号を入力し、Enterキーを押したとき逆配列 - 最初の番号なし

#include <iostream> 
#include <list> 
#include <cstdio> 

using namespace std; 

list <int> lista; 

int main() { 
    int liczba; 
    while ((cin >> liczba) &&(getchar()!='\n')) { 
     lista.push_front(liczba); 
    } 
    for(list<int>::iterator i=lista.begin();i != lista.end(); ++i) 
     cout<<*i<<" "; 

    return 0; 
} 

同じことがstd::vector

+1

最後の数字を入力して* Enter *を押すと、ストリームに '\ n 'が追加され、' getchar() 'がそれを取り込みます。しかしあなたの状態が失敗するので、ループは入力されません。 – WhiZTiM

+1

*同じことがstd :: vector *にあります - さらに、 'vector'は' push_front'関数を持たないので、リストとベクトルの両方に対して 'push_back'を単に呼び出すことができ、逆の反復子を使ってループします(' rbegin ()、rend() ')を呼び出します。 – PaulMcKenzie

+0

@PaulMcKenzieまたは 'std :: deque'を使用してください –

答えて

1

であり、\nは、ストリームに追加され、getchar()はそれをピックアップします。そこにあなたの状態が失敗するので、最後の値が読み込まれたときにループは入力されません。さらにstd::cinをテストして番号を追加することもできます。

while ((cin >> liczba) &&(getchar()!='\n')) { 
    lista.push_front(liczba); 
} 
if(cin) 
    lista.push_front(liczba); //for the last item. 
+0

Whamバムを行った:Dありがとう – Emilo

関連する問題