Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jardel Nunes

C++: como interromper o fluxo de entrada usando o Dev-C++?

Recommended Posts

Pegando esse pedaço de código como exemplo:



#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

#include <cmath>

#include <locale.h>


using namespace std;

inline void keep_window_open() {char ch; cin>>ch;}


int main (){



setlocale(LC_ALL, "Portuguese");


vector <string> palavras;

string temp;


while (cin >> temp) palavras.push_back(temp);


...


Como faço para interromper o fluxo de entrada (cin >> temp)? Li que deve-se pressionar Control + z. Fiz isso, mas não deu certo. Só tenho conseguido de um jeito: pressionando control + z + enter, um atrás do outro, repetidas vezes. O problema disso é que às vezes consigo interromper o fluxo de entrada na primeira vez que digito essa sequência, mas às vezes não. Quando não consigo na primeira vez (maioria das vezes) acaba acontecendo que os caracteres '^Z' são digitados, mudando o resultado final do programa.


Alguém sabe um jeito eficaz de interromper o fluxo de entrada?


OBS: meu sistema operacional é o Windows 8

OBS-2: uso o Dev-C++ 5.11


Desde já agradeço ;D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Especificando um pouco mais a minha pergunta:

 

Quero ler palavras (strings) e, quando eu quiser, finalizar o fluxo de entrada. cin >> temp é verdadeiro se um valor foi lido corretamente e falso em caso contrário. O laço while irá ler todos os strings (logo, todos os caracteres) que fornecemos. Então eu vou inserindo strings, como, por exemplo, 'banana pera manga', etc. O que quero é saber um comando específico que termine com o laço while (que termine com o fluxo de entrada). Se a variável que eu armazenasse a leitura fosse um double, em vez de uma string, terminar o fluxo de entrada (finalizar o while, nesse caso) seria fácil, pois para cin >> temp ser falso bastaria eu digitar um valor incorreto (que não fosse ponto flutuante), como 'k' por exemplo. O problema é que na string, '2', 'k' ou qualquer caractere que seja é aceito. Ou seja, deve haver uma comando específico para finalizar o fluxo de entrada. Mas não sei qual é. Isso que eu queria saber. Sei que posso colocar para finalizar o fluxo quando eu digitar um caractere específico (dentro de um if), como '|', por exemplo. Mas não quero isso, senão o usuário não iria poder digitar esse caractere. Sei que deve haver esse comando específico pois li a respeito. O livro 'princípios e prática de programação com c++'', do bjarne stroustrup, diz que é o control + z. Tentei, mas não funciona.

Segue o resto do código do programa que eu coloquei acima:

//Este programa lê palavras, as ordena e emite uma saída para palavras que não gosta (previamente definidas)

#include <iostream>

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <locale.h>

using namespace std;
inline void keep_window_open() {char ch; cin>>ch;}

int main (){


setlocale(LC_ALL, "Portuguese");

string desgosta= "renga";
string desgosta2= "olaa";
vector <string> palavras;
string temp;

while (cin >> temp) palavras.push_back(temp);

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

for (int i= 0; i < palavras.size(); ++i){

if (palavras== desgosta || palavras == desgosta2){
cout << "\nRUÍDO";
}else if (i== 0 || palavras [i-1] != palavras){
cout << "\n"<< palavras;
}
}
}

Claro, esse é só um exemplo de programa, há vários outros que preciso saber como finalizar o fluxo de entrada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.