
CPP
Membros-
Total de itens
117 -
Registro em
-
Última visita
Tudo que CPP postou
-
você precisa executar o printf dentro de um laço de repetição. Por exemplo: for (int i = 0; i < n; i++) printf("*"); printf("\n"); [/codebox]
-
Dá uma olhada nesse video que ele explica como por o pdcurses no code::blocks http://www.youtube.com/watch?v=mYnfix8ruAo abs
-
você precisa escolher um compilador ou IDE pra começar. Tem várias opções, dos mais antigos (turbo C) até os mais modernos e gratuitos. Algumas opções são: DevC++ Microsoft Visual C++ Express Borland c++ 5 FreeComandLines Etc Tudo depende do que você quer fazer. Abs
-
Olá Você seta as coordenadas com o gotoxy corretamente, mas seu printf começa com um \ n que faz o cursor ser posicionado na primeira coluna da linha seguinte. Resumindo, tira os \ n da frente dos titulos que eles serão impressos corretamente. Abs
-
Olá, A questão é o seguinte. A funcao strlen() trabalha com strings terminadas com barra zero. Provavelmente o compilador que você está usando não pode valores default na sua variavel (o que é o mais comum), então quando você faz um strlen de uma variavel logo depois de declara-la ela pode estar contando lixo de memoria até encontrar o barra zero. O ideal é colocar conteudo nas variaveis antes de usar funções de tratamento de string com terminador. Pra criar uma string nula você pode fazer strcpy(nome_variavel, "") ou nome_variavel[0] = 0 ou ainda memset(nome_variavel, 0, sizeof(variavel)); Bons estudos. Abs
-
Depende, dá pra fazer um sistema inteiro numa linha só...
-
Fala Fabin, já resolveu essa pendenga? Meu, sua função que insere na pilha tá bem maluca heim. Tem variavel não declarada, você passa carros[qtd_carros] ao invés de carros[n] e etc. Se ainda precisar de ajuda pra resolver fala ai. Abs
-
Isso resolve uma parte do seu problema. O conceito vale pras vagas também. Boa sorte #include <stdlib.h> #include <string.h> #include <mem.h> int getFields(char *bufferIn, char campos[6][30]) { int countCommas = 0; int n, posicaoInicial = 0; for (n = 0; n < strlen(bufferIn); n++) if (bufferIn[n] == ',' || bufferIn[n+1] == 0) { memset(campos[countCommas], 0, 30); // preenche o campo com zeros memcpy(campos[countCommas], bufferIn + posicaoInicial, (bufferIn[n+1] == 0 ? n+1 : n)- posicaoInicial); // copia parte do bufferIn para o campo especifico posicaoInicial = n + 1; countCommas++; } if (countCommas < 6) return 1; // erro, tem que ter 6 campos return 0; } void main(void) { char *veic = "TJB9312,9BWCA11,850,1.5,3.2,2.1"; char camposVeic[6][30]; if (getFields(veic, camposVeic) == 0) { for (int n = 0; n < 6; n++) printf("campo[%d] = %s\n", n, camposVeic[n]); } else printf("Erro: Numero de campos esperado inconsistente\n"); } [/codebox]
-
Ola, O erro estava no retorna da funcao. Você estava devolvendo o indice errado do vetor. E como você já esta reordenando o proprio vetor, nem precisa ter retorno. Fiz uma versão reduzida pra você ter uma idéia. qualquer coisa avisa ai. Abs #include <stdio.h> #include <stdlib.h> //funçao com problema!!!!! void ordinv(int *pv,int n){ int i,j,aux; for (i=0,j=n-1;i<j;i++,j--) { aux=*(pv+i); *(pv+i)=*(pv+j); *(pv+j)=aux; } return pv; } void main(void Agora vai o codigo completo. Desculpe. #include <stdio.h> #include <stdlib.h> //funçao com problema!!!!! int *ordinv(int *pv,int n){ int i,j,aux; for (i=0,j=n-1;i<j;i++,j--) { aux=*(pv+i); *(pv+i)=*(pv+j); *(pv+j)=aux; } return pv; } void main(void) { int *n = (int*) malloc(sizeof(int) * 10); n[0] = 0; n[1] = 1; n[2] = 2; n[3] = 3; n[4] = 4; n[5] = 5; n[6] = 6; n[7] = 7; n[8] = 8; n[9] = 9; ordinv(n, 10); for (int i = 0; i < 10; i ++) printf("%d, ", n[i]); }
-
Gravando/Lendo arquivos em um diretorio fora do projeto da aplicação
pergunta respondeu ao guedestorm de CPP em C, C++
na verdade a forma correta é você dobrar a barra, desse jeito. "c:\\pacote.txt" Abs -
Olá você declarou sinal com apenas um byte, mas a função gets coloca o terminador '' no final da string, ou seja, seu programa esta corrompendo a memoria. Muda pra char sinal[5] que resolve seu problema. Abs
-
Olá marcio_jagua, Na funcao GetCommandLine, declara a str desse jeito static char str[25];
-
Olá, Muda essas duas linhas no inicio do seu código e testa novamente. long int i,j,k,onesin,v=0,quant; double g,soma=0,calc=0,nume=1, fat; Abs
-
Oba, No item 4 eu quis dizer que você não precisa fazer c++ nessa linha porque ela não faz sentido. Quero dizer, você já acumulou os numeros menores no if (n <35) c++; Ai você exibe esse valor e depois incrementa c novamente com c++. Ou seja, esse incremento nem vai ser usando. Entendeu o que eu tava dizendo? Qualquer coisa fala ai... Abs
-
Fala ai mano. Seu programa tinha os seguintes probleminhas. 1) Não compilava porque a variavel "p" não tinha sido definida. Troquei por P1. 2) A linha P = (P1*100)/q causava divisão por zero já que pra sair do while q tinha quer ser menor que 1 (ou seja, igual a 0 "zero") Fiz um backup de q em bq pra poder usar no final. 3) O if (n>=50 && n<=100) tem que ser >= ou <= pra considerar os numero entre 50 e 100, inclusive o 50 e o 100. 4) Você usou um c++ aqui sem necessidade: cout<<"\nQuantidade de numeros menores que 35: "<< c++; 5) Não conheço a sintaxe float(S). Troquei por um cast de float da divisão de S por a. Ficou assim M = (float)(S/a); Qualquer duvida avisa ai que a galera te ajuda. Abs #include <iostream> using namespace std; main() { int q,c=0,S=0,n,a=0; float M, P, P1=0.0; cout<<"Digite a quantidade de numeros: "; cin>>q; int bq = q; while (q) { cout<<"\nDigite o numero: "; cin>>n; if (n<35) c++; if (n>0) { a++; S = S + n; } if (n>=50 && n<=100) P1++; q--; } M = (float)(S/a); P = (P1*100)/bq; cout<<"\nQuantidade de numeros menores que 35: "<< c; cout<<"\nMedia aritmetica dos numeros positivos: "<< M; cout<<"\nPorcentagem de numeros entre 50 e 100: "<< P << "%"; }
-
você precisa de dois for´s e um if pra fazer o que quer. Um for pra percorrer as linhas da matriz e outro pra percorrer as colunas. for (l = 0; l < 4; l++) { for (c = 0; c < 4; c++) { if (matriz[l][c] == 10) printf("Achei a bagaça em (%d,%d)\n", l, c); } } Abs
-
Não sei o que você tava tentando fazer mas, char str[]=""; aloca um byte e depois você executa alguns strcat...isso corrompe sua memoria. você precisa alocar espaço suficiente , tipo char str[256]="";
-
Concordo prenamente cum o Kuroi.
-
Olá Alan Tinha muita coisa errada no seu código, mas agora compila e executa. Tem que melhorar um pouco o fluxo, mas tá bom. Só peço que você tente melhorar sua identação pra facilitar inclusive sua vizualização. você confunde um pouco o uso de %c com %s. Cuidado!!!! Mudei o typedef de livros pra LIVROS pra aproveitar os lugares onde você já tinha digitado livros.Codigo e etc. você não pode indexar livros.codigo[0] porque ele não é um vetor, o mesmo vale pra outros pontos onde você fez isso. As funções cadastrar e exibir deveriam receber um ponteiro para o registro passado nas chamadas. Faltou colocar uma pausa em alguns pontos pra que o usuário possa ver o que foi exibido na tela. Sugiro que você compare linha a linha os códigos pra ver as diferença e em caso de dúvidas posta ai que a gente te ajuda. Bons estudos. Abs #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #define TAM_LISTA 500 typedef struct { int Codigo; char Doado; char Obra [50]; char Autor [50]; char Editora [50]; int Paginas; }LIVROS; typedef struct { LIVROS Exatas [TAM_LISTA + 1]; LIVROS Humanas [TAM_LISTA + 1]; LIVROS Biomedicas [TAM_LISTA + 1]; } biblio; //função cadastrar void cadastrar(LIVROS *livros) { printf("CADASTRAR LIVROS\n\n"); printf("informe codigo: "); fflush(stdin); scanf("%d", &livros->Codigo); printf("o livro foi doado s/n ? "); fflush(stdin); scanf("%c", &livros->Doado); printf("informe nome do livro: "); fflush(stdin); scanf("%s", livros->Obra); printf("informe nome do autor: "); fflush(stdin); scanf("%s", &livros->Autor); printf("informe editora: "); fflush(stdin); scanf("%s", &livros->Editora); printf("informe numero de paginas: "); fflush(stdin); scanf("%d", &livros->Paginas); printf("CADASTRO REALIZADO COM SUCESSO"); fflush(stdin); getchar(); } //função exibir void exibir (LIVROS *livros) { printf("CONSULTA DE LIVROS\n\n"); printf("codigo: %d\n", livros->Codigo); printf("doado: %c\n", livros->Doado); printf("nome do livro: %s\n", livros->Obra); printf("nome do autor: %s\n", livros->Autor); printf("editora: %s\n", livros->Editora); printf("numero de paginas: %d\n", livros->Paginas); fflush(stdin); getch(); } //função main int main() { biblio Biblioteca; int i, op, op1; memset(&Biblioteca, 0x00, sizeof(biblio)); while(1) { system("cls"); printf("MENU\n\n"); printf("1:cadastrar\n2:consultar\n3:Excluir\n4:encerra programa\n\n"); printf("digite sua opcao: "); fflush(stdin); scanf("%d", &op); switch (op) { case 1: { system("cls"); printf("NOVO CADASTRO\n\n"); printf("1:biomedicas\n2:humanas\n3:exatas\n4:fim\n\n"); printf("digite sua opcao: "); fflush(stdin); scanf("%d", &op1); switch (op1) { case 1: for(i=0; i<TAM_LISTA; i++) if (!Biblioteca.Biomedicas[i].Codigo) break; cadastrar(&Biblioteca.Biomedicas[i]); break; case 2: for(i=0; i<TAM_LISTA; i++) if (! Biblioteca.Humanas[i].Codigo) break; cadastrar (&Biblioteca.Humanas[i]); break; case 3: for(i=0; i<TAM_LISTA; i++) if (! Biblioteca.Exatas[i].Codigo) break; cadastrar (&Biblioteca.Exatas[i]); break; } } break; case 2: { int nCodigo; system("cls"); printf("NOVO CONSULTA\n\n"); printf("1:biomedicas\n2:humanas\n3:exatas\n4:fim\n\n"); printf("digite sua opcao: "); fflush(stdin); scanf("%d", &op1); if (op1 >=1 || op1 <=3) { fflush(stdin); printf("digite codigo: "); scanf("%d", &nCodigo); } switch (op1) { case 1: for(i=0; i<TAM_LISTA; i++) if (Biblioteca.Biomedicas[i].Codigo == nCodigo) { exibir (&Biblioteca.Biomedicas[i]); break; } else { printf("\n\ncodigo não cadastrado"); fflush(stdin); getch(); } break; case 2: for (i=0; i<TAM_LISTA; i++) if (Biblioteca.Humanas[i].Codigo == nCodigo) { exibir (&Biblioteca.Humanas[i]); break; } else { printf("\n\ncodigo não cadastrado"); fflush(stdin); getch(); } break; case 3: for (i=0; i<TAM_LISTA; i++) if (Biblioteca.Exatas[i].Codigo == nCodigo) { exibir (&Biblioteca.Exatas[i]); break; } else { printf("\n\ncodigo não cadastrado"); fflush(stdin); getch(); } break; } } case 3: { int nCodigo; system ("cls"); printf("NOVO EXCLUSAO\n\n"); printf("1:biomedicas\n2:humanas\n3:exatas\n4:fim\n\n"); printf("digite sua opcao: "); fflush(stdin); scanf("%d", &op1); if (op1 >=1 || op1 <=3) { fflush(stdin); printf("\n\ndigite o codigo "); scanf("%d", &nCodigo); } switch (op1) { case 1: for (i=0; i<TAM_LISTA; i++) if (Biblioteca.Biomedicas[i].Codigo == nCodigo) { memset(&Biblioteca.Biomedicas[i], 0x00, sizeof(LIVROS)); break; } case 2: for (i=0; i<TAM_LISTA; i++) if (Biblioteca.Humanas[i].Codigo == nCodigo) { memset(&Biblioteca.Humanas[i], 0x00, sizeof(LIVROS)); break; } case 3: for (i=0; i<TAM_LISTA; i++) if (Biblioteca.Exatas[i].Codigo == nCodigo) { memset(&Biblioteca.Exatas[i], 0x00, sizeof(LIVROS)); break; } break; } } case 4: { printf ("encerrando sistema"); exit (0); break; } default: { printf ("Opcao invalida"); break; } } } return 0; }
-
Vandal, Eu fiz uma função básica pra contar dias entre duas datas. Existe uma forma mais científica de fazer isso. Inclusive tenho essa versão num dos módulos do sistema. Mas, acho essa versão mais didática. Espero que atenda suas expectativas. Você pode conferir os resultados com uma planilha excel. Eu fiz usando parametros de linha de comando então você precisa digitar: datas <menor data> <maior data> Sempre no formato "dd/mm/aaaa" (com as barras) Qualquer dúvida avisa ai mano. Abs #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int IsValidDate(char *data); unsigned int diffdate(char *data1, char *data2) { if (!IsValidDate(data1) || !IsValidDate(data2)) return 0; int meses[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, ano; unsigned soma = 0; char auxData[10], datax[10]; strcpy(datax, data1); // dd/mm/aaaa datax[2] = 0; datax[5] = 0; dia = atoi(datax); mes = atoi(datax + 3); ano = atoi(datax + 6); do { if (ano%4==0 && (ano%400==0||ano%100!=0)) meses[1] = 29; else meses[1] = 28; dia++; if (dia > meses[mes - 1]) { dia = 1; mes++; if (mes > 12) { mes = 1; ano++; } } soma++; sprintf(auxData, "%02d/%02d/%04d", dia, mes, ano); } while(strcmp(auxData, data2)); return soma + 1; } int IsValidDate(char *dataIn) { int meses[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, ano; char data[10]; strcpy(data, dataIn); // dd/mm/aaaa data[2] = 0; data[5] = 0; dia = atoi(data); mes = atoi(data + 3); ano = atoi(data + 6); if (ano%4==0 && (ano%400==0||ano%100!=0)) meses[1] = 29; if ((mes < 1 || mes > 12) || (dia < 1 || dia > meses[mes - 1])) return 0; // data invalida return 1; // data valida } void main(int argc, char **argv) { if (!IsValidDate(argv[1])) { printf("Data invalida (%s)\n", argv[1]); exit(1); } printf("Diferenca entre %s e %s = %u\n", argv[1], argv[2], diffdate(argv[1], argv[2])); }
-
Legal Vandal, Ficou muito bom. Só não entendi bem sua solicitação final. Pode explicar melhor? Abs
-
axlrose A logica que faz o teste está com erros. Um exemplo é o seguinte: Se os numeros sorteados forem 62788 E o usuario digitar exatamente essa sequencia a saida será ***#* porque o teste não está considerando numeros repetidos. Alem disso, um ELSE antes de do if que poe # ia ser bem-vindo. O que você quer? Quer tentar corrigir a rotina ou quer saber como fazer? Abs
-
Olá Vandal, Vou te dar a missão de melhorar o calculo do ano bissexto ok. Tem algo mais que deve ser considerado. Também tá faltando os includes necessários. void main(void) { int meses[] = {31,28,31,30,31,30,31,31,30,31,30,31}; int dia, mes, ano; printf("\nDIA: ); scanf("%d", &dia); printf("\nMES: ); scanf("%d", &mes); printf("\nANO: ); scanf("%d", &ano); if ((ano % 4) == 0) meses[1] = 29; if ((mes < 1 || mes > 12) || (dia < 1 || dia > meses[mes - 1])) printf("\nData invalida: "); else printf("\nData Valida: "); printf("%02d/%02d/%04d\n\n", dia, mes, ano); }
-
Olá Exemplo de como digitar 12345 e colocar cada numero numa posição do vetor. Tem que dar include de <string.h> e <conio.h> int vetor[5]; char aux[10]; fflush(stdin); gets(aux); for (int n = 0; n < strlen(aux); n++) vetor[n] = aux[n] - '0'; printf("%d %d %d %d %d", vetor[0], vetor[1], vetor[2], vetor[3], vetor[4]); getch(); Pra usar rand() você precisa antes executar randomize() Abs
-
1) Na função main tá faltando um return 0; no final. 2) Antes de //pesquisa deveria ter void Pesquisar(void) { pessoa aluno; 3) A linha fread(& aluno,sizeof(struct.pessoa),1,disco): deveria ser fread(&aluno, sizeof(aluno), 1, disco); 4) A linha if(strcmp(np.aluno.nome)==0){ deveria ser if(strcmp(np, aluno.nome)==0){ 5) A linha cout<<",não cadastrado\n"; deveria estar dentro do fi (!achou){ 6) Depois de achou=true; deveria ter uma } Tem alguns erros de lógica, mas pelo menos agora deve compilar. Agora eu peço uma ajuda. Tentem organizar o código com uma identação melhor, sem manter todo o codigo alinha a esquerda. Isso facilita a analise, inclusive pra vocês mesmos. Qualquer dúvida posta ai. Abs