Jump to content
Fórum Script Brasil
  • 0

problema com "while"


Question

Olá a todos do forum. Preciso inserir dados até que eu digite a string: "FIM". mas com ele dá erro sempre e quando tiro o while funciona normalmente, acho q estou errando alguma coisa. alguém me ajuda???

abaixo segue os códigos:

#include <cstdlib>
#include <iostream>
#include <sstream>


using namespace std;

double StrToF(string str)
{
    istringstream iss(str);
    float retorno;
    iss >> retorno;
    retorno = retorno/100;
    return retorno;
} 


int main(int argc, char *argv[])
{
    //variaveis
    struct tipo_despesa
    {
       string codigo;
       string descricao;
    };

    struct valor_conta
    {
       string codigo;
       float valor_jan;
       float valor_fev;
       float valor_mar;
       float valor_abr;
       float valor_mai;
       float valor_jun;
    };
    
    int x;
    int tam;
    int tab[5];
    string campo[6];
    string entrada;
    struct valor_conta despesas[6];
    
    //entrada de valores

******************************************//trecho problemático.

    while (1)
    {
    cout<<"Digite os Valores:"<<endl;
    getline(cin,entrada);
    if (entrada == "FIM")
                break;
    }

******************************************//trecho problemático.
    x=0;
    tam=entrada.size();
    
    //encontrando indices do separador ";"
    for (int i=0; i<=tam;i++)
    {
        if (entrada.substr(i,1)==";")
        {
           tab[x]=i;
           x=x+1;
        }
    }
    
  
    //capturar campos
    campo[0]=entrada.substr(tab[0]+1,(tab[1]-1)-tab[0]);
    campo[1]=entrada.substr(tab[1]+1,(tab[2]-1)-tab[1]);
    campo[2]=entrada.substr(tab[2]+1,(tab[3]-1)-tab[2]);
    campo[3]=entrada.substr(tab[3]+1,(tab[4]-1)-tab[3]);
    campo[4]=entrada.substr(tab[4]+1,(tab[5]-1)-tab[4]);
    campo[5]=entrada.substr(tab[5]+1,tam-tab[5]);
    
    //preencher registro com valores apropriados  
    despesas[0].codigo=entrada.substr(0,2);
    despesas[0].valor_jan=StrToF(campo[0]);
    despesas[0].valor_fev=StrToF(campo[1]);
    despesas[0].valor_mar=StrToF(campo[2]);
    despesas[0].valor_abr=StrToF(campo[3]);
    despesas[0].valor_mai=StrToF(campo[4]);
    despesas[0].valor_jun=StrToF(campo[5]);
    
    //testar saida dos valores do registro
    cout << despesas[0].codigo << endl;
    cout << despesas[0].valor_jan << endl;
    cout << despesas[0].valor_fev << endl;
    cout << despesas[0].valor_mar << endl;
    cout << despesas[0].valor_abr << endl;
    cout << despesas[0].valor_mai << endl;
    cout << despesas[0].valor_jun << endl;  

    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
Ocorre algum erro na compilação ou o erro de lógica?

Obs.:

Não cheguei a analisar completamente seu código, mas aparentemente está bem repetitivo. Isso poderia ser melhorado organizando-o em arrays e utilizando loops.

Erro de compilação! não exibe os dados esperados e fecha sem "pause", quando tiro o while fica normal.

Edited by sidclaynt
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      149287
    • Total Posts
      645679
×
×
  • Create New...