Ir para conteúdo
Fórum Script Brasil
  • 0

Cacelando o pressione ENTER para sair.


GustavoBorba

Pergunta

19 respostass a esta questão

Posts Recomendados

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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;    
}

Link para o comentário
Compartilhar em outros sites

  • 0

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]

Link para o comentário
Compartilhar em outros sites

  • 0

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/Oi

se for, fazer tal coisa.

Link para o comentário
Compartilhar em outros sites

  • 0
(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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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.

Link para o comentário
Compartilhar em outros sites

  • 0
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 por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0
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!

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...