2011-05-04 15 views
18

Próbuję zapisać dane wejściowe wprowadzane przez użytkownika za pośrednictwem konsoli. więc muszę dołączyć "enter" i dowolną białą przestrzeń.Czytanie pełnej linii wejściowej

Ale cin zatrzymuje się dając mi wejście po pierwszej przestrzeni.

Czy istnieje sposób, aby przeczytać całe linie aż CTRL + Z jest wciśnięty, czy coś?

+0

Możliwe dwóch egzemplarzach. Proszę spojrzeć na http://stackoverflow.com/questions/2765462/how-to-cin-space-in-c – mkaes

+0

Nie znalazłem tego wpisu podczas wyszukiwania. gdybym to zrobił, chciałbym opublikować kolejny ^^ przepraszam, spróbuję spojrzeć głębiej następnym razem – Katia

Odpowiedz

38

Czy jest jakiś sposób jak readLines do naciśnięcia CTRL + Z lub coś?

Tak, dokładnie tak, korzystając z bezpłatnego std::getline funkcję (nie metoda o tej samej nazwie istream!):

string line; 

while (getline(cin, line)) { 
    // do something with the line 
} 

To będzie czytać wiersze (w tym spacji, ale bez kończącego znaku nowej linii) z wejścia, aż dojdzie do końca wejścia lub cin sygnalizuje błąd.

+0

, więc jeśli dane wejściowe były jak 5 linii zakończone z CTRL + Z bez mater co zawiera wiersz, przejdzie do zmiennej liniowej? ? kiedy starałem się wcześniej, wejście do zmiennej łańcuchowej nie przechowuje po spacji .. jest bo używałem cin nie getline ?? – Katia

+1

@katia Tylko 'getline' czyta całą linię. Jeśli wpiszesz ciąg znaków za pomocą 'cin >> line', to będzie on czytał tylko do pierwszych białych znaków. –

+0

mam go teraz, thx milion :) – Katia

3
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
    string s; 
    while(getline(cin, s)) { 
     // do something with s 
    } 
} 
0

Dla mojego programu, napisałem następujący fragment kodu, który odczytuje każdy pojedynczy znak wejścia aż ctrl + x jest wciśnięty. Oto kod:

char a; 
string b; 
while (a != 24) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

Dla Ctrl + Z, wprowadź to:

char a; 
string b; 
while (a != 26) 
{ 
cin.get(a); 
b=b+a; 
} 
cout << b; 

nie mogę potwierdzić, że CTR + oo rozwiązanie działa, jak jestem na komputerze z systemem UNIX i ctrl + Z zabija program. Może jednak działać w oknach lub nie; Musiałbyś sam się przekonać.

+0

ustawiasz swoją jaźń aż do przepełnienia bufora, to nie jest bezpieczne w każdej – thecoshman

-1
#include <string> 
#include <iostream> 

int main() 
{ 

    std::cout << "enter your name: "; 

    std::string name; 

    std::getline(std::cin, name); 

    return 0; 

} 
+1

Witamy na przepełnienie stosu! Chociaż dziękujemy za odpowiedź, byłoby lepiej, gdyby zapewniała dodatkową wartość na podstawie innych odpowiedzi. W takim przypadku twoja odpowiedź nie zapewnia dodatkowej wartości, ponieważ inny użytkownik już opublikował to rozwiązanie. Jeśli poprzednia odpowiedź była dla Ciebie pomocna, powinieneś zagłosować, zamiast powtarzać te same informacje. –

0

Można użyć funkcji getline w C++

#include<iostream> 
using namespace std; 
int main() 
{ 
    char msg[100]; 
    cin.getline(msg,100); 
    return 0; 
} 
Powiązane problemy