deathcon4 0 Denunciar post Postado Julho 20, 2014 #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
ScreenBlack 13 Denunciar post Postado Julho 20, 2014 Experimente usar "cin.getline()" Compartilhar este post Link para o post Compartilhar em outros sites
deathcon4 0 Denunciar post Postado Julho 20, 2014 Ok, talvez seja erro do compilador. Compartilhar este post Link para o post Compartilhar em outros sites
CL4nG 36 Denunciar post Postado Julho 23, 2014 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