Preciso de ajuda no meu codigo

estava fazendo um codigo para um trabalho da minha faculdade e tive um problema que não consigo resolver… preciso de ajuda pois ainda estou na primeira faze de ciencia da computação.

segue o codigo

#include

using namespace std;

int main()
{

float dinheiroI, dinheiroF, dinheiroC, tara, peso, pesoC, valorTotal;
char resp;
int contP;

  do{
   cout << "deseja abrir o caixa" << endl;
   cin >> resp;
   resp = toupper(cin.get());
  }while(resp == 'S' || resp == 'N');

if(resp == 'S'){

 do{
  cout  << "Informe o valor disponivel no caixa R$: ";
  cin  >> dinheiroI;
 }while(dinheiroI >= 100);

  do{
   cout << "O peso do prato: ";
   cin >> tara;
  }while(tara >= 0);

  do{
   cout <<  "O valor para cada Kg de comida é R$: ";
   cin >> pesoC;
  }while(pesoC >= 1);

system("clear||cls");

do{

  do{

  cout << "Informe o peso da comida em Kg";
  cin >> peso;

  peso = peso - tara;

  cout << "O peso é: " << peso;

  valorTotal = valorTotal + (pesoC * peso);

  contP = contP + 1;

  cout << "tem mais algum prato de comida ?? ";
  cin >> resp;

  system("clear||cls");

  }while (resp != '+');

  cout << "O valor a se pagar é R$: " << valorTotal;

  do{
   cout << "Informe o valor dado pelo cliente R$: ";
   cin >> dinheiroC;
  }while(dinheiroC >= valorTotal);

  dinheiroF = dinheiroI  + valorTotal;

  cout << "O seu troco é de R$: " << dinheiroC - valorTotal;

  cout << "Tem mais algum cliente ??";
  cin >> resp;

}while(resp != 'S');

 cout << "O valor total é R$: " << dinheiroF;

 cout << "O lucro foi de R$:" << dinheiroF - dinheiroI;

 cout << "A quantidade de pratos vendidos foi de: " << contP;

} if(resp == 'N'){

  cout << "Saindo do sistema sem abertura do caixa.";
}

return 0;
}

Qual problema?

não sei dizer ao certo mas, no primeiro “do” ele finaliza o codigo, sem fazer o resto dos comandos

Tenta isso:

resp = toupper(resp);

mano eu testei isso mas agr ele fica repetindo a pergunta infinitamente.

:rofl::rofl::rofl:

Estou enferrujado em C. Essa lógica funciona no Java.

Acredito que o @Lucas_Camara ou o @wldomiciano deve conseguir te dar uma ajuda.

@Fefo80 quase acertou! É que toupper() retorna o character como seu valor real, como int. Faltou só fazer um casting:

resp = (char)toupper(resp);

Só que sua lógica tá errada, @Mr-86, e não vai funcionar do jeito que vc quer de qualquer forma.

Com isso:

while(resp == 'S' || resp == 'N');

Vc está dizendo “repita enquanto resp for igual a S ou N” só que o que vc quer é o oposto disso. Vc quer que repita se resp não for S ou N. Teria que ser assim:

do {
  cout << "deseja abrir o caixa" << endl;
  cin >> resp;
  resp = (char)toupper(resp);
} while (resp != 'S' && resp != 'N');
1 curtida

muito obg cara, esse sua explicação me ajudou a resolver os outros problemas no código.

1 curtida