GustavoBorba Postado Março 12, 2010 Denunciar Share Postado Março 12, 2010 Olá, sou novato em C++, e estou programando o DEV-C++, gostaria de saber como faço para cancelar aquela coisa de quando apertar enter fechar a janela. Já tentei System("pause"); mas mesmo assim se pressiono ENTER ele fecha. Alguma ajuda por favor? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Março 12, 2010 Denunciar Share Postado Março 12, 2010 Não entendi direito o que você quer, mas no DEV C++ se não tiver um comando que pause o programa, ele se fecha no final da execução.Muitos acham ruim o system("pause"), eles aconselham usar o getchar ou scanf.Caso não seja essa sua dúvida, explique melhor.Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Olá RonaldoRG,Estou querendo desenvolver um programa que capture o que o cara escrever no prompt de comando, e ao apertar enter, checar o que ele escreveu. Se ouver o ENTER para sair, na hora em que ele apertar enter o programairá fecvhar. (eu acho) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 uma hora o programa tem q fechar ne. ele não pode ficar aberto pra sempre.depois q o cara digitar o numero, é so você por um codigo pro sistema continuar. você faz a checagem q você quer.e ai depois de fazer td q vq quer, se você quer mostrar o resultado na tela, ou qualquer coisa assim, poe um system("pause"), um getch(), um getchar(), ou qualquer coisa sim, pra esperar por uma tecla antes de fechar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Como faço para capturar uma string? Ocorre um erro de runtime quando tento executar o código a seguir:#include <iostream> using namespace std; int main (int argc, char *argv[]) { string command; printf("Digite um comando: "); scanf("%s", &command); getchar(); printf("\n\nComando digitado: %s\n", command); getchar(); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 com scanf(), eu não sei, so se você tivesse declarado como array de char.mas da pra fazer com cin:#include <iostream>using namespace std;int main (int argc, char *argv[]){ string command; printf("Digite um comando: "); cin >> command; getchar(); cout << "\n\nComando digitado: " << command << "\n"; getchar(); return 0; }[/code] Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Kuroi, seu código me ajudou muito. Tenho duas dúvidas:1. Só é possível inserir somente um comando a cada vez que o programa é iniciado. Ex:Digite o comando: (Eu digitei o comando /oi)Você Digitou o Comando /oi(Aqui eu tento repetir o processo, mas ele interpreta o meu ENTER como 'sair')2. Como checar se o que o cara escreveu é igual a um comando do meu programa.Ex:stringComandoDigitado é igual a stringComando/Oise for, fazer tal coisa. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 (Aqui eu tento repetir o processo, mas ele interpreta o meu ENTER como 'sair')Pra repetir você faz um loop.... while(1) /// Nesse caso vai repetir até você fechar o programa { printf("Digite um comando: "); cin >> command; getchar(); /// Pra quê esse comando aqui? cout << "\n\nComando digitado: " << command << "\n"; } ... 2. Como checar se o que o cara escreveu é igual a um comando do meu programa. Como você tá usando o tipo string você pode comparar com o ==. if(command == "Oi") { /// Coloca os comandos }Abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Opa! Obrigado plea ajuda em relação aos loops. Última pergunta, eu juro. Eu criei um comando que deveria capturar o que vem depois do espaço, converter para um int, e realizar uns ifs.if(command == "/deposit") { command.substr(9, 3); int amount = atoi(command.c_str()); if(amount > 999) cout << "\n\nYou can deposit only from $1 to $999."; if(amount < 1) cout << "\n\nYou can deposit only from $1 to $999."; accDeposit(amount); }O problema é que quando eu executo ele, o programa termina. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 hum, esse seu substr() não ta servindo pra nd. você deveria pegar o retorno dele pra alguma outra string.e tb não entendi direito o q você quer fazer. você ta tentando converter a string pra intero. mas olha la, você sabe q o conteudo da string é "/deposit". como você vai converter isso pra intero?? so strings numericas podem ser convertidas.muito possivelmente o programa ta fechando por não conseguir transformar o texto em numero. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 Ele quer pegar os 3 caracteres após o "/deposit " e converter para int, não o "/deposit" em si.Como o kuroi falou, você deve pegar o retorno para outra string.if(command == "/deposit") { std::string tmp = command.substr(9, 3); int amount = atoi(tmp.c_str()); if(amount > 999) cout << "\n\nYou can deposit only from $1 to $999."; if(amount < 1) cout << "\n\nYou can deposit only from $1 to $999."; accDeposit(amount); }Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 hum, esse seu substr() não ta servindo pra nd. você deveria pegar o retorno dele pra alguma outra string.e tb não entendi direito o q você quer fazer. você ta tentando converter a string pra intero. mas olha la, você sabe q o conteudo da string é "/deposit". como você vai converter isso pra intero?? so strings numericas podem ser convertidas.muito possivelmente o programa ta fechando por não conseguir transformar o texto em numero.kuroi, o que eu quero fazer é pegar uns digitos depois do " " (ESPAÇO) e converte-los para inteiros. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 (editado) Ele quer pegar os 3 caracteres após o "/deposit " e converter para int, não o "/deposit" em si.hum?? mas se o valor da variavel é "/deposit", significa q acaba no 8º caracter, não tem nd depois disso.pra passar no if no comeco significa q a variavel é simplesmente "/deposit" não tem nd alem disso, certo??kuroi, o que eu quero fazer é pegar uns digitos depois do " " (ESPAÇO) e converte-los para inteiros.gustavo, primero de tudo, com cin você não consegue ler string com espacos. você deveria fazer assim:getline(cin, command); em vez de: cin >> command;e depois, naquele if você deveria comparar o substr(0, 8) da string command e não o command intero.o substr(0, 8) vai pegar apenas a parte "/deposit".e ai o codigo do durub de dentro do if deve funcionar pra você. Editado Março 13, 2010 por kuroi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Desculpem eu não saber muita coisa, mas...int main (int argc, char *argv[]) { cout << "______________________________________________________\n"; cout << " Welcome to the bank!\n"; cout << "\n"; cout << "Here you can check your account, withdraw and deposit.\n"; cout << "'/balance' '/deposit amount' '/withdraw amount'\n"; cout << "______________________________________________________\n\n"; string command; while(1) { cin >> command; getchar(); if(command == "/balance") { accBalance(); } getline(cin, command); if(command == "/deposit") { command.substr(0, 9); int amount = atoi(command.c_str()); if(amount > 999) cout << "\n\nYou can deposit only from $1 to $999."; if(amount < 1) cout << "\n\nYou can deposit only from $1 to $999."; accDeposit(amount); } } getchar(); return 0; }Não acontece nada quando eu digito /deposit 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 assim ó:getline(cin, command); if(command.substr(0, 8) == "/deposit") { int amount = atoi(command.substr(9, 3).c_str()); if(amount > 999) cout << "\n\nYou can deposit only from $1 to $999."; if(amount < 1) cout << "\n\nYou can deposit only from $1 to $999."; accDeposit(amount); }[/code]tenta agora. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Mesma coisa, não entendo o que está acontecendo! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 ue, aqui to compilando o codigo ta assim, no dev c++:#include <iostream>using namespace std;void accBalance() { }void accDeposit(int x) { }int main (int argc, char *argv[]){ cout << "______________________________________________________\n"; cout << " Welcome to the bank!\n"; cout << "\n"; cout << "Here you can check your account, withdraw and deposit.\n"; cout << "'/balance' '/deposit amount' '/withdraw amount'\n"; cout << "______________________________________________________\n\n"; string command; while(1) { getline(cin, command); if(command == "/balance") { accBalance(); } if(command.substr(0, 8) == "/deposit") { int amount = atoi(command.substr(9, 3).c_str()); if(amount > 999) cout << "\n\nYou can deposit only from $1 to $999."; if(amount < 1) cout << "\n\nYou can deposit only from $1 to $999."; accDeposit(amount); } } getchar(); return 0;}[/code]e ai se eu digito /deposit 0, ele mostra a mensagem "You can deposit only from $1 to $999." certinho.não sei o q tem na sua funcao accDeposit(). mas se ela não mostra nd na tela, não vai acontecer nd mesmo, a não ser q você deposite 0, como eu fiz. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 GustavoBorba Postado Março 13, 2010 Autor Denunciar Share Postado Março 13, 2010 Resolvi meu problema! è que eu estava interrompendo os ifs com a função getchar();Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RonaldoRG Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 (editado) Tenta começar a substring de 10, porque 8 pega o espaço:... int amount = atoi(command.substr(10, 3).c_str()); ...EDIT: Respondi tarde, que bom que deu certo. Abraço. Editado Março 13, 2010 por RonaldoRG Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Março 13, 2010 Denunciar Share Postado Março 13, 2010 Ele quer pegar os 3 caracteres após o "/deposit " e converter para int, não o "/deposit" em si.hum?? mas se o valor da variavel é "/deposit", significa q acaba no 8º caracter, não tem nd depois disso.pra passar no if no comeco significa q a variavel é simplesmente "/deposit" não tem nd alem disso, certo??Verdade! Tinha me esquecido deste detalhe. Faltava o substring no if também.È que sempre que escrevia esse tipo de código era em strncmp, ou seja, vinha com essa "feature embutida" praticamente. Esqueci.Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
GustavoBorba
Olá, sou novato em C++, e estou programando o DEV-C++, gostaria de saber como faço para cancelar aquela coisa de quando apertar enter fechar a janela. Já tentei System("pause"); mas mesmo assim se pressiono ENTER ele fecha. Alguma ajuda por favor?
Link para o comentário
Compartilhar em outros sites
19 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.