Ir para conteúdo

Arquivado

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

deathcon4

Problmas com string

Recommended Posts

#include <iostream>

#include <cstdlib>

#include <string>

//#include "../cygwin/usr/i686-pc-mingw32/sys-root/mingw/include/tchar.h"

//#include "../cygwin/usr/i686-pc-mingw32/sys-root/mingw/include/locale"

#include "locale.h"


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


using namespace std;


int main()

{

//_tsetlocale(LC_ALL, _T("portuguese_brazil"));

setlocale(LC_ALL, "");

char ch;

float mo1,mp1,mb1,mo2,mp2,mb2,mo3,mp3,mb3,ptot1,ptot2,ptot3;

//const float pmnm;

ch = 0;

string pais1, pais2, pais3;


cout << "Entre com o primeiro país.\n";

cin >> pais1;

cout << "Entre com o número de medalhas.\n";

cout << "Medalhas de ouro, prata e bronze respectivamente.\n";

cin >> mo1 >> mp1 >> mb1;

mo1 = (3*mo1) + 1;

mp1 = (2*mp1) + 1;

mb1 = mb1 + 1;

ptot1 = mo1 + mp1 + mb1;


cout << "Entre com o nome do segundo país.\n";

cin >> pais2;

cout << "Entre com o nº de medalhas para o segundo país.\n";

cout << "Entre medalhas de ouro, prata e bronze respectivamente.\n";

cin >> mo2 >> mp2 >> mb2;

mo2 = (3*mo2) + 1;

mp2 = (2*mp2) + 1;

mb2 = mb2 + 1;

ptot2 = mo2 + mp2 + mb2;


cout << "Entre com o nome do terceiro país,\n";

cin >> pais3;

cout << "Entre com o nº de medalhas para o terceiro país.\n";

cout << "Entre medalhas de ouro, prata e bronze respectivamente.\n";

cin >> mo3 >> mp3 >> mb3;

mo3 = (3*mo3) + 1;

mp3 = (2*mp3) + 1;

mb3 = mb3 + 1;

ptot3 = mo3 + mp3 + mb3;


while (ch != -1)

{


if ((ptot1 > ptot2) && (ptot1 > ptot3))


{

cout << "O " << pais1 << " é o campeão.\n" << endl;

if (ptot2 > ptot3)

{

cout << "O " << pais2 << " é o vice-campeão.\n" << endl;

cout << "O " << pais3 << " é o terceiro colocado.\n" << endl;

}

else

{

cout << "O " << pais3 << " é com vice-campeão.\n";

cout << "O " << pais2 << " é o terceiro colocado.\n";

}

}


else if ((ptot2 > ptot1) && (ptot2 > ptot3))

{

cout << "O " << pais2 << " é o campeão.\n";

if (ptot1 > ptot3)

{

cout << "O " << pais1 << " é o vice-campeão.\n";

cout << "O " << pais3 << " é o terceiro colocado.\n";

}

else

{

cout << "O " << pais3 << " é vice-campeão.\n";

cout << "O " << pais2 << " é o terceiro colocado.\n";

}

}



else if ((ptot3 > ptot1) && (ptot3 > ptot2))

{

cout << "O " << pais3 << " é o campeão.\n";

if (ptot1 > ptot2)

{

cout << "O " << pais1 << " é o vice-campeão.\n";

cout << "O " << pais2 << " é o terceiro colocado.\n";

}

else

{

cout << "O " << pais2 << " é o vice-campeão.\n";

cout << "O " << pais1 << " é o terceiro colocado.\n";

}

}




cout << "Para sair digite -1\n.";

cin >> ch;

if (ch == -1)

cout << "Deseja sair, digite -1.\n" << endl;

break;

}


//system ("PAUSE");

//return EXIT_SUCCESS;

}



Por que no código acima, quanto tento entrar com o nome do país, uma string longa, dá erro? Por exemplo: tento entrar com a palavra Estados Unidos.

Ele pula tudo e vai para o final, ignora o while e no final aparece a frase:Process excited with return value 0. Mesmo colocando o while no final ou no início.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que no código acima, quanto tento entrar com o nome do país, uma string longa, dá erro? Por exemplo: tento entrar com a palavra Estados Unidos.

Ele pula tudo e vai para o final, ignora o while e no final aparece a frase:Process excited with return value 0. Mesmo colocando o while no final ou no início.

 

Como voce nao esta lendo uma "linha" (Ler ate encontrar \n), ao digitar "Estados Unidos", o programa vai entender que voce digitou duas strings, entao se no seu programa tiver duas leituras do teclado, ao digitar duas strings na primeira leitura, a outra e lida na proxima leitura, no caso e como se pulasse a leitura do nome do segundo país.

 

Este erro e comum se tratando de scanf seguido por fgets, em linguagem c. Aonde, scanf nao lê o \n e ao chegar no fgets que termina ao encontrar o \n, lê esse caractere.

 

 

Tente assim:

 

#include <iostream>

 

using namespace std;

 

int main()

{

string name;

 

cout << "Digite um nome ae: ";

getline(cin, name);

 

cout << "Seu nome fera: " << name << endl;

return 0;

}

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.