printing twice with for()

Asked

Viewed 43 times

0

i tried to make 1 code to be possible to register several projects (maximum 10) and several users being at most 4 and I wanted after all registered he presented them on the screen, 1 per 1, however when printing with more than 1 candidate on the same project he prints first all the infomations of the project and then prints again with the second candidate and so per diantes, follows error picture and codeinserir a descrição da imagem aqui

 #include <stdlib.h>
 #include <fstream>
 #include <string.h>
 #include <iostream>



 using namespace std;
 typedef struct{
     int cpf;
     string strnome;

 } informacoes;

 struct projetos{
     string strstartup;
     string strequipe;
     int valorinvestido;

 };

 int main() {
     int j,aux2;
     projetos *projeto = new projetos[10];
     cout << "digite o numero de projetos (max. 10)";
     cin >> aux2;
     while(aux2 > 10){
     cout << "por favor digite um numero menor ou igual a 10" << endl;
   aux2 = 0;
   };
   while(aux2 < 0){
   cout << "por favor digite um numero maior que 0" << endl;
   aux2 = 0;
   };



   int i,aux;
   informacoes *infos = new informacoes[4];
   cout << "digite o numero de candidatos (max. 4)";
   cin >> aux;

   while(aux > 4){
   cout << "por favor digite um numero menor ou igual a 4" << endl;
   aux = 0;
   };
   while(aux < 0){
   cout << "por favor digite um numero maior que 0" << endl;
   aux = 0;
   };
   infos[0].cpf = 0;
   infos[1].cpf = 0;
   infos[2].cpf = 0;
   infos[3].cpf = 0;

   for (j = 0; j < aux2;j++){
       cout << "por favor digite o nome da startup" << endl;
       cin >> projeto[j].strstartup;
       cout << "por favor digite o nome da equipe" << endl;
       cin >> projeto[j].strequipe;
       cout << "por favor digite o valor investido" << endl;
       cin >> projeto[j].valorinvestido;
       for (i = 0;i < aux;i++){

           cout << "digite o cpf:\n";
           cin >> infos[i].cpf;
           cout << "\ndigite o nome do componente:";
           cin >> infos[i].strnome;
           cout << "startup:["<< j+1 <<"]" << projeto[j].strstartup << endl;
           cout << "equipe:["<< j+1 <<"]" << projeto[j].strequipe << endl;
           cout << "valor investido:["<< j+1 <<"]" << projeto[j].valorinvestido << endl;
           cout << "cpf do componente:[" << i+1 <<"]:" << infos[i].cpf << endl;
           cout << "nome do componente:[" << i+1 <<"]:"<<infos[i].strnome << endl;
       }

       if(j < aux2 - 1) {
               cout << "digite o numero de candidatos (max. 4)";
               cin >> aux;
       }
   }
   return 0;
}

1 answer

0

Well, first let’s do this end-to-end. First let’s make an organization in this code, starting at the beginning... The structs Information would be the candidates and the projects would be each of them, right?

#include <stdlib.h>
 #include <fstream> //Não entendi o uso da stdlib.h e da fstream
 #include <string.h>
 #include <iostream>

 using namespace std;
 typedef struct{ //É melhor usar typedef? Seria melhor como o modelo de projetos
     int cpf;
     string strnome;

 } informacoes; 

 struct projetos{ //Projetos de cada um
     string strstartup;
     string strequipe;
     int valorinvestido;

 };

//Seria melhor criar uma classe a projetos.
class Projetos{
      string strstartup;
      string strequipe;
      int valorinvestido;
      
      public:
            void setProjectInfo(string startup, string equipe, int investido){
                 //Coloca as atribuições para as variáveis.
            }
            //Faça uma função de receber os itens acima.
};

Now let’s go to main(), take this j and change aux2 to nproj to make it softer.

int nproj;
     projetos *projeto = new projetos[10]; //Seu máximo
     projsinit: //Crie isso para usar o goto isso vai repetir até colocar o número correto.
     cout << "digite o numero de projetos (max. 10)";
     cin >> aux2;
     //Tirando o while e fazendo o seguinte.
     
     if(nproj >= 1 && nproj <= 10){ //Isso verifica se nproj está entre 0 e 11 (De 1 a 10).
         //Seguir o resto do código...
     } else{
           cout << "O números de projetos está incorreto, pode ser apenas de 1 a 10\n";
           //Use setlocale(LC_ALL, "Portuguese"); para usar acentuação, mas precisa usar #include <locale.h>
           nproj = 0;
           //Use alguma coisa de delay para ter transição bem lenta.
           //Use system("pause"); ou use this_thread.sleep_for(chrono::milliseconds(2000)) mas antes um #include <thread> e <chrono>.
           goto projsinit;
     }

The information will already initialize the CPF? It may or may not be. Now on the candidates part do the same as I did on projects only with different print and limit. Change aux to ninfo and take i. Create if equal to projects an invalid number message, reset nymph etc. No for() create an int i or j to repeat.

No for create a variable to store project values if you use this class and also for infomasons. At the end create another for out of this information by making a list print can do as is in your code but try to soften and do as I say. I hope it helps.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.