Ir ao conteúdo
  • Cadastre-se

Vetores e Strings


dftaino

Posts recomendados

Olá,

Tenho que receber uma quantidade de disciplinas e associar um código e um nome a cada uma


#include <iostream>
#include <string>

using namespace std;

int main()
{
int quantidade;
int i;
int j;

cout<<"Digite a quantidade \n";
cin>>quantidade;

string codigo[quantidade];
string nome[quantidade];

cout<<"Digite o codigo das disciplinas \n";
for(i=0;i<quantidade;i++){
cin>>codigo[i];
}
cout<<"Agora os nomes \n";
for(j=0;j<quantidade;j++){
getline(cin,nome[j]);
}

cout<<"Como sao "<<quantidade<<" disciplinas temos \n";
for(i=0;i<quantidade;i++){
for(j=0;j<quantidade;j++){
cout<<codigo[i]<<"-"<<nome[j]<<"\n";
}
}
return 0;
}

Mas quando eu compilo:

"Digite a quantidade

2

Digite o codigo das disciplinas

dgrfed

dvbfvdvfd

Agora os nomes // não sei por que ele recebe um único nome

Estrutura de Dados

Como sao 2 disciplinas temos

dgrfed-

dgrfed-Estruturas de Dados

dvbfvdvfd-

dvbfvdvfd-Estrutura de Dados"

Acredito que já mudei o código tantas vezes que nem consigo encontrar a falha...

Alguém pode apontar o error, por favor?

Obrigada

Process returned 0 (0x0) execution time : 5.728 s

Press any key to continue.

Link para o comentário
Compartilhar em outros sites

dftaino,

Uma sequência de leitura de dados pelo teclado realmente é algo que às vezes pode confundir um pouco. Por aqui, é bastante comum esse tipo de dúvida. A função cin.ignore() foi necessária limpar o buffer de entrada, descartando o '\n' (newline).

#include <iostream>
#include <string>

using namespace std;

int main()
{
int quantidade;
int i;

cout<<"Digite a quantidade de disciplinas: ";
cin>>quantidade;
cin.ignore();

string codigo[quantidade];
string nome[quantidade];

cout<<"\n\nAgora, digite o codigo e o nome das disciplinas:\n";
for(i = 0; i < quantidade; i++)
{
cout<<"\n\nCodigo da disciplina "<<i+1<<": ";
getline(cin, codigo[i]);

cout<<"\nNome da disciplina "<<i+1<<": ";
getline(cin, nome[i]);
}

cout<<"\n\nComo sao "<<quantidade<<" disciplinas, temos:\n\n";

for(i=0; i<quantidade; i++)
cout<<codigo[i]<<" - "<<nome[i]<<"\n";

return 0;
}

[]'s

LNW

Link para o comentário
Compartilhar em outros sites


#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
int quantidade;
int i;
int j;[B][COLOR="blue"]//Esta variável não é necessária[/B][/COLOR]

cout<<"Digite a quantidade \n";
cin>>quantidade;

string codigo[quantidade];
string nome[quantidade];

cout<<"Digite o codigo das disciplinas \n";
for(i=0;i<quantidade;i++){
cin>>codigo[i];
}
cout<<"Agora os nomes \n";
for(i=0;i<quantidade;i++){
cin>>nome[i];[B][COLOR="blue"]//Usei a mesma lógica usada por você no "for" de cima[/B][/COLOR]
}

cout<<"Como sao "<<quantidade<<" disciplinas temos \n";
for(i=0;i<quantidade;i++)
[B][COLOR="Blue"] //sem usar a variável "j"[/COLOR][/B]
cout<<codigo[i]<<"-"<<nome[i]<<"\n";

system("pause");
return 0;
}


Se não for esse o problema é só me avisar.

Link para o comentário
Compartilhar em outros sites


#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
int quantidade;
int i;
int j;[B][COLOR="blue"]//Esta variável não é necessária[/B][/COLOR]

cout<<"Digite a quantidade \n";
cin>>quantidade;

string codigo[quantidade];
string nome[quantidade];

cout<<"Digite o codigo das disciplinas \n";
for(i=0;i<quantidade;i++){
cin>>codigo[i];
}
cout<<"Agora os nomes \n";
for(i=0;i<quantidade;i++){
cin>>nome[i];[B][COLOR="blue"]//Usei a mesma lógica usada por você no "for" de cima[/B][/COLOR]
}

cout<<"Como sao "<<quantidade<<" disciplinas temos \n";
for(i=0;i<quantidade;i++)
[B][COLOR="Blue"] //sem usar a variável "j"[/COLOR][/B]
cout<<codigo[i]<<"-"<<nome[i]<<"\n";

system("pause");
return 0;
}


Se não for esse o problema é só me avisar.

O código funcionou, a única coisa que tive que trocar foi:

 cin>>codigo[i]; // "pega" uma unica palavra

 getline(cin,codigo[i]);  //"pega" a frase completa

Obrigada pela ajuda!

dftaino,

Uma sequência de leitura de dados pelo teclado realmente é algo que às vezes pode confundir um pouco. Por aqui, é bastante comum esse tipo de dúvida. A função cin.ignore() foi necessária limpar o buffer de entrada, descartando o '\n' (newline).

#include <iostream>
#include <string>

using namespace std;

int main()
{
int quantidade;
int i;

cout<<"Digite a quantidade de disciplinas: ";
cin>>quantidade;
cin.ignore();

string codigo[quantidade];
string nome[quantidade];

cout<<"\n\nAgora, digite o codigo e o nome das disciplinas:\n";
for(i = 0; i < quantidade; i++)
{
cout<<"\n\nCodigo da disciplina "<<i+1<<": ";
getline(cin, codigo[i]);

cout<<"\nNome da disciplina "<<i+1<<": ";
getline(cin, nome[i]);
}

cout<<"\n\nComo sao "<<quantidade<<" disciplinas, temos:\n\n";

for(i=0; i<quantidade; i++)
cout<<codigo[i]<<" - "<<nome[i]<<"\n";

return 0;
}

[]'s

LNW

Realmente não sabia que isso poderia acontecer...

Obrigada por ambos, a informação e a resposta!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...