Ir ao conteúdo
  • Cadastre-se

Ninenome

Membro Júnior
  • Posts

    10
  • Cadastrado em

  • Última visita

Reputação

8
  1. @arfneto obrigado, você me deu boas ideias e condegui o meu objetivo e ficou o seguinte #include <iostream> using namespace std; int main() { char num[5]; int i,comp[5]; bool flag; do { flag = false; cout<<"Digite somente numeros de ate 5 digitos: "<<endl; cin>>num; for(i = 0; i < 5; i++) { comp[i] = num[i]; if(comp[i] < 48 || comp[i] > 57) { flag = true; } } }while(flag == true); cout<<num<<endl; return 0; } Acabei usando array aqui mas funciona do mesmo modo para um unico numero fico muito agradecido!
  2. @arfneto Desculpe por não ser tão específico, ja editei o topico e corrigi, estou usando c++
  3. Ola, meu problema consiste em saber como eu garanto que o usuario insira somente números, exemplo: usuario deve informar uma squencia de numeros ou somente um número, mas ele pode querer colocar caracteres ao invés de números como eu garanto que isso não aconteça? Desde ja agradeço toda ajuda! Estou usando c++!
  4. #include <iostream> #include <cstring> /*11. Faca um programa que leia os dados de 10 alunos (Nome, matricula, Media Final), armazenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores, o vetor dos aprovados e o vetor dos reprovados, considerando a media mınima para a aprovacao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos dados do vetor de reprovados. */ using namespace std; struct Alunos { char nome[40]; int matricula; double mediaFinal; }; Alunos lerDados(); void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1); int main() { int i, cont = 0, cont1 = 0; Alunos dados[3]; Alunos apro[3]; Alunos repr[3]; for(i = 0; i < 3; i++) { dados[i] = lerDados(); } for(i = 0; i < 3; i++)//não esta copiando para aprovados { if(dados[i].mediaFinal > 5.0) { cont++; strcpy(apro[i].nome,dados[i].nome); apro[i].mediaFinal = dados[i].mediaFinal; apro[i].matricula = dados[i].matricula; } } for(i = 0; i < 3; i++)//não esta copiando para reprovados { if(dados[i].mediaFinal < 5.0) { cont1++; strcpy(repr[i].nome,dados[i].nome); repr[i].mediaFinal = dados[i].mediaFinal; repr[i].matricula = dados[i].matricula; } } imprimirDados(apro, repr, cont, cont1); return 0; } Alunos lerDados() { Alunos p; int n1, n2, n3; cout<<"Nome do aluno: "<<endl; cin.getline(p.nome,40); cin.sync(); cout<<"Matricula: "<<endl; cin>>p.matricula; cin.sync(); cout<<"Digite as notas 1, 2, 3: "<<endl; cout<<"Nota 1: ";cin>>n1; cout<<"Nota 2: ";cin>>n2; cout<<"Nota 3: ";cin>>n3; cin.sync(); cout<<endl; p.mediaFinal = (n1 + n2 + n3)/3; return p; } void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1)//imprimi os aprovados e reprovados { int i; for(i = 0; i < c; i++) { cout<<"--------APROVADO--------"<<endl; cout<<"Nome.......: "<<ap[i].nome<<endl<<endl; cout<<"Matricula..: "<<ap[i].matricula<<endl<<endl; cout<<"Media final: "<<ap[i].mediaFinal<<endl<<endl; } for(i = 0; i < c1; i++) { cout<<"--------REPROVADO--------"<<endl; cout<<"Nome.......: "<<rp[i].nome<<endl<<endl; cout<<"Matricula..: "<<rp[i].matricula<<endl<<endl; cout<<"Media final: "<<rp[i].mediaFinal<<endl<<endl; } } entre linha 30 a 46 o programa deveria copiar os valores para o outro vetor e assim exibi-los na função imprimirDados na linha 70.As impressões s]ao separadas entre aprovados primeiro(na linha 76) em seguida é impresso os reprovados(na linha 82). Gostaria de saber se este tipo de cópia não e permitido pelo sistema e aceito ideias de solução! Desde ja agradeço!
  5. @JorgeGus entendi ocorre o encontro de ambas as metades, muito obrigada
  6. ola, me deparei com um exemplo de inversão de string de forma manual, ate ai ok, mas na linha 12 no ponto de parada do laço for o tamanho da string e dividido por 2! Bom isso não iria ler a string pela metade? Exemplo sabonete contém 8 caracteres dividido por 2 ficaria 4 caracteres "sabo", isso não ocorre, ele imprime a palavra completa. MAS PORQUE? #include <iostream> #include <cstring> using namespace std; //inversao de palavras de forma manual int main() { string s; cin>>s; int p=s.size()-1;//o -1 é para não capturar o terminador, ok entendo cout<<" Tamanho "<<s.size()<<endl; for(int i=0; i<s.size()/2;i++) //porque dividir o tamanho por 2? { char t=s[i]; s[i]=s[p]; s[p]=t; p--; } cout<<"\n\n"<<s<<endl; return 0; }
  7. Obrigado pela atenção vou procurar melhorar o max, e assim aprender com meus erros! A estrada vai ser longa comecei nesse mundo tem quase 3 meses faz quase 3 meses que comecei mas ja percebi que preciso melhorar e muito ainda, não vou mais misturar c com c++ um erro que agora possuo conhecimento disto pesquisarei mais a fundo o c++ inclusive neste código em que você melhorou imensamente e assimilar o max muito obrigada
  8. Olá, estou aprendendo a programar em c++, e devo admitir não é fácil, e tive a ideia de desenvolver um pequeno projete de uma AGENDA. O problema consiste em que não recebo o retorno das funções de exibir o contato selecionado e nem a alteração de contato caso o usuario deseje alterar algum contato. Os problemas estão ao fim do código marcados com comentarios! Segue abaixo o codigo: #include <iostream> #include <cstring> #include <locale> #define MAX 50//Para não precisar mudar cada um individualmente using namespace std; //PROTOTIPOS--------------- void menu(); void cadastro(int cadastro); char* needMemoria(int tam); void NumeroCont(int Tcont); int indic(int totalCont, char* Snome); int mostraC(int indice); void modificar(int indice); //------------------------- struct Agenda { char* nome; char telefone[18]; char* email; }agenda[MAX]; int main() { setlocale(LC_ALL,""); int Cadas=0; char nome[MAX]; int opc; int indice; do { system("cls"); menu(); cin>>opc; switch(opc) { case 1: Cadas++;//acrescenta a quantidade de cadastros realizados cadastro(Cadas); break; case 2: NumeroCont(Cadas); break; case 3: cin.ignore(1000,'\n'); cout<<"Nome do contato: \n"; scanf("%[^\n]c",nome); setbuf(stdin,NULL); indice=indic(Cadas, nome); if(indice >= 0 && indice <= 99) { mostraC(indice); } else { cout<<"Contato não cadastrado!\n"; } break; case 4: cout<<"Indice do contato[1 - 99]: \n"; cin>>indice; indice-=1; if(indice>=0 && indice <=99) { modificar(indice); } else {cout<<"Contato não existente!\n";} break; case 5: cout<<"5\n\n"; case 0: cout<<"OBRIGADO, PELA preferência\n\n"; break; default: cout<<"ERRO! opção desconhecida\n"; } cout<<Cadas<<" <-REGISTROS\n";//EXCLUIR DEPOIS system("pause"); }while(opc!=0); return 0; } //MENU------------- void menu() { cout<<"-----MENU-----\n"; cout<<"1-- Adicionar contato: \n"; cout<<"2-- Ver lista de contatos: \n"; cout<<"3-- Ver contato: \n"; cout<<"4-- Modificar contato: \n"; cout<<"5-- Excluir contatos: \n"; cout<<"0-- SAIR! \n"; } //Funcao adiciona novos contatos void cadastro(int registro) { char dd[MAX]; cin.ignore(100,'\n'); cout<<"Nome do contato: "; scanf("%[^\n]c",dd); setbuf(stdin,NULL); agenda[registro].nome=needMemoria(strlen(dd));//verifica o tamanho e aloca strcpy(agenda[registro].nome,dd); cout<<"Numero do contato: "; scanf("%[^\n]c",agenda[registro].telefone); setbuf(stdin,NULL);//ideia de test para limpar buff cout<<"Email do contato: "; scanf("%[^\n]c",dd); setbuf(stdin,NULL); agenda[registro].email=needMemoria(strlen(dd)); strcpy(agenda[registro].email,dd); } //tentativa de alocar memoria e verificar se a espaco //não consegui com new mas esta funcionando com malloc char* needMemoria(int tam){ char* info = NULL; info = (char*) malloc(sizeof(tam) * sizeof(char)); if(info == NULL){ printf("ERRO: impossível alocar a quantidade de memória requisitada!"); exit(1); } return info; } //Total de contatos void NumeroCont(int Tcont) { int cont=1; for(int i=1;i<=Tcont;i++) { cout<<"Contato nº: "<<cont++; cout<<"Nome : "<<agenda[i].nome<<endl; cout<<"Numero : "<<agenda[i].telefone<<endl; cout<<"Email : "<<agenda[i].email<<"\n\n"; } cout<<"Total de contatos: "<<cont<<"\n\n"; } //Mostra um contato especifico int indic(int totalCont, char* Snome) { for(int i=0;i<totalCont;i++) { if(strcmp(Snome,agenda[i].nome) == 0) { return i; } } return -1; } //Mostra o indice selecionado int mostraC(int indice)//PROBLEMA não RETORNA E FECHA O PROGRAMA COM ERRO! { cout<<"Nome : "<<agenda[indice].nome; cout<<"Telefone: "<<agenda[indice].telefone; cout<<"Email : "<<agenda[indice].email; } //Modifica um contato void modificar(int indice)//PROBLEMA não RETORNA E FECHA O PROGRAMA COM ERRO! { char* nome; char telefone[18]; char* email; char dd[MAX]; cin.ignore(100,'\n'); cout<<"Nome do contato: "; scanf("%[^\n]c",dd); setbuf(stdin,NULL); nome=needMemoria(strlen(dd));//verifica o tamanho e aloca cout<<"Numero do contato: "; scanf("%[^\n]c",agenda[indice].telefone); setbuf(stdin,NULL);//ideia de test para limpar buff cout<<"Email do contato: "; scanf("%[^\n]c",dd); setbuf(stdin,NULL); email=needMemoria(strlen(dd)); strcpy(agenda[indice].nome,nome); strcpy(agenda[indice].telefone,telefone); strcpy(agenda[indice].email,email); } Desde ja agradeço toda ajuda!
  9. com a ajuda de vocês percebi tambem que eu estava construindo esse carro fora do construtor carro, muito obrigada!
  10. O programa não retorna nenhum erro ou warning, mas na exibição não mostra as strings no cmd final, as variáveis do tipo int são exibidas corretamente! #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; typedef struct{ string nome; string cor; int pot; int vel; int velMax; }Carro; //Coleta informações void Adiciona(string snome,string scor,int spot,int svelMax, int svel){ Carro car; car.nome=snome; car.cor=scor; car.pot=spot; car.velMax=svelMax; car.vel=0; }; //impressão void exibe(){ Carro t; cout<<"Nome : "<<t.nome<<endl; cout<<"Cor : "<<t.cor<<endl; cout<<"Potencia : "<<t.pot<<endl; cout<<"vel : "<<t.vel<<endl; cout<<"Vel Maxima: "<<t.velMax<<endl; } int main() { Carro carro1; Adiciona("Carro","Azul",350,250,220);//As duas strings não aparecem no retorno do cmd exibe(); return 0; } Desde já agradeço qualquer ajuda! OBS: Sou um aprendiz nessa area, desculpe se for algum erro óbvio!

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