Ir para conteúdo
Fórum Script Brasil

D@vid

Membros
  • Total de itens

    24
  • Registro em

  • Última visita

Tudo que D@vid postou

  1. você não alocou memoria para o ponteiro... portanto não pode usar a função strcat para fazer isto é simples, troque char* espacos = ""; por char* espacos = new char[numespacos]; memset(espacos, 0, numespacos); //é necessario "zerar" a memoria que você aloca não se esqueça de deletar a memoria alocada depois de usa-la sobre alocação de memoria http://www.cplusplus.com/doc/tutorial/dynamic/ espero ter ajudado :)
  2. D@vid

    Classes C++

    não aconselho fazer isso... mas o unico jeito de fazer o que você quer é usar funções estaticas http://msdn.microsoft.com/en-us/library/yy...w(v=vs.80).aspx
  3. D@vid

    Duvidas sobre vetores

    *Sempre use int main(); *o ++ já imcrementa a variavel... então não é necessario "variavel=variavel++;, usa-se apenas variavel++" *voce não precisa comparar o vetor com 0, é mais facil usar "!", ficaria "!frase" em vez de "frase!=0". *isso é C e não C++ ( mas agora você não vai ver muita diferença entre os 2 ) para contar o nº de espaços basta adicionar o seginte codigo apos o if que conta as vogais: else if(frase[i]==' ') numespacobr++; mas se quiser dar um passo a frente e usar estruturas mais complexas, um jeito mais "simplificado" de fazer isso seria com um for e switch(da uma procurada nu google de como se usam eles)... seu codigo ficaria assim: #include<stdio.h> #include<conio.h> char frase[80]; int numletras=0; int numvogal=0; int numconsoantes=0; int numespacobr=0 int main() { printf("Entre com uma frase de ateh 80 caracteres:\n"); gets(frase); int i; for(i=0; frase[i]; i++){ numletras++; switch(frase[i]) { case 'a': numvogal++; break; case 'e': numvogal++; break; case 'i': numvogal++; break; case 'o': numvogal++; break; case 'u': numvogal++; break; case ' ': numespacobr++; break; default: numconsoantes=numconsoantes++; } } printf("A frase tem %d, letras.",numletras); printf("A frase tem %d vogais.",numvogal); printf("A frase tem %d consoantes.",numconsoantes); getch(); } pode até parecer um pouco complexo agora... mas é essencial você aprender a usar esses tipos de estruturas pois ce continuar programando com certeza vai precisar delas e de outras... espero ter ajudado ;)
  4. D@vid

    Funções Winsock

    Funções com o sufixo "Ex" geralmente são um pouco mais lentas pois processam mais parametros. Nesse caso as funções como a "AcceptEx()" usam a dll Mswsock.dll diferente da "WSAAccept()" ou "accept" que usam a Ws2_32.dll, Na minha opinião é melhor usar as funções "normais" como a "accept", "bind()", "send()", etc; pois alem de ser um tipo mais basico de socket, não são funções especificas da Microsoft como as outras, ou seja, são compativeis com Linux.
  5. D@vid

    (Resolvido) ajuda em codigo

    Use as tags , É que o código de uma letra não é nem 1 ou 2, semdo assim ele volta pro começo do "do{..." e o scanf não pega apenas um numero ou uma letra... ele pega o buffer do teclado, justamente por isso que ele não é usado em aplicações "reais", o que esta acontecendo provavelmente é que o scanf esta pegando algo mais q já esta no buffer do teclado... o que você pode fazer para resolver isso, apesar de ser uma gambiarra é usar "fflush(stdin)" antes do scanf. clrscl() é só pra Unix/Linux, em windows pode-se usar "system("cls")" ou construir uma função especifica para isso, mas ai já requere ter um conhececimento mais avançado de c e windows.
  6. Isso é VisualC.net não c++, sub-forum errado ^^ mas você deve estar tentando desenvolver uma aplicação em c++ mesmo, se for este o caso você pode usar o WinSock, nesse link tem um tipo de tutorial do WinSock http://msdn.microsoft.com/en-us/library/ms738545(VS.85).aspx Espero ter ajudado.
  7. D@vid

    scanf sem enter

    use a getch() da conio.h *você pode ter problemas se usar essa função no windows vista e tentar pegar as teclas correspodentes as setas do teclado;
  8. Achar algum livro de C bom em português é meio bastante dificil, (eu ate tenho alguns pdf's só que tudo em ingles :wacko: ) Caso não domine o inglês sugiro você aprender,pois a area de TI exige muito ingles, tem muitas documentações/artigos que estão todos em inglês. + da uma fuçada na net que você encontra alguns tutoriais em português, mesmo aqui no forum, da uma olhada lá da seção de tutoriais & dicas.
  9. D@vid

    Imprimindo em cores

    Na verdade arquivos não podem ter fontes coloridas, tanto que se você abrir uma planilha do execel no bloco de notas não verá cor alguma, o que acontece é que alguns tipos arquivos tem formatações que permitem identificar a cor da fonte, tamanho, imagens no texto, etc para serem mostrados no programa. Um dos metodos que existem para fazer isso é usar os arquivos RTF (Rich Text Format ou Formato de Texto Rico em português), este por sua vez é um formato proprietário da Microsoft, o que facilita a sua implementação se você estiver usando windows. Para usar o RTF você primeiramente tem que escrever o arquivo, você pode faze-lo usando a classe descrita nesse artigo: http://www.codeproject.com/KB/string/RTFBuilder.aspx Depois de ter o arquivo escrito, para mostra-lo em seu programa, uma das maneiras de fazer isso seria usando uma janela com a classe "RichTextBox" http://msdn.microsoft.com/en-us/library/aa261653(VS.60).aspx se você estiver usando programas em cosole e quiser uma implementação mais simples, você pode usar a função: #include <windows.h> //(...) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); //Coloque no lugar do 0 a cor que você quiser Você pode encontrar no link abaixo a lista das cores que você pode usar para esta função http://msdn.microsoft.com/en-us/library/ms...cter_attributes *Esse metodo não grava nenhum tipo de informação referente a cor em arquivos, ele apenas modifica a saida do seu programa, para que você possa ter fontes coloridas na tela. Espero ter ajudado ;)
  10. isso é uma função, você coloca no espaco global e usa onde quiser no codigo. *pra usar ela você passa como argumento a array com os nº's e ela retorna um inteiro com o menor valor. *caso não saiba como implementar uma função é melhor ler um livro de C.
  11. Seria +- isso que você quer? int ProcuraMenorValor(int *array) { int menorValor=array[0]; int i; for(i=0; array[i]; i++){ if(array[i]<menorValor) menorValor=array[0]; } return menorValor; }
  12. Você esta usando a mesma variavel para os loop's (no caso o "i"), assim vai dar erro mesmo, declare variaveis diferentes para cada um dos for's.
  13. Tem alguns errinhos sim, como o i++ apos o while da segunda função, aconselho apenas o nº 0 ao invez de '\o', pos você esta confundindo '\o' com '', o "destino[c] = '\o';" na segunda função logo apos a copia do charactere ( porque anular o que você acabou de copiar?) tem + alguns erros tambem, se quiser um exemplo completo sobre como implementar essas duas funções olhe esse tópico: http://scriptbrasil.com.br/forum/index.php?showtopic=154523 Foi perguntado por funções exatamente iguais a essas que você tentou fazer.
  14. Esse erro não tem nada a ver com o código, mas sim com a configuração do mingw(compilador usado pelo Dev-Cpp), vá em Feramentas, Opções Do compilador e depois na aba Diretórios, você deve configurar as pastas onde estão os respectivos arquivos usados pelo mingw, como no seu caso é um .exe que esta faltando, vá em binarios e adicione a pasta onde se encontram os arquivos executaveis do compilador, o "cc1.exe" fica por padrão na pasta "C:\Dev-Cpp\libexec\gcc\mingw32\3.4.2", então adicione essa pasta. *O local onde fica o "cc1.exe" pode variar dependendo de onde você instalou o dev-cpp *Caso não funcione tente reinstalar o dev-cpp
  15. alguns compiladores não suportam usar uma referencia para ponteiro diretamente (no caso o &*). Se você não sabe o que é passar um ponteiro por referencia leia o artigo a seguir: (EM INGLES) http://www.codeguru.com/cpp/cpp/cpp_mfc/po...ticle.php/c4089 fiz uma pequena modificação na função para funcionar com o seu compilador. void PadLeft(char charPrencher, char **charDestino, const char *charOrigem, int total) { int strSize=strlen(charOrigem)+total+1; *charDestino=(char*)malloc(strSize); char *tmp=*charDestino; memset(*charDestino, 0, strSize); int i; for(i=0; i<total; i++){ tmp[i]=charPrencher; } strcat(tmp, charOrigem); *charDestino=tmp; } agora a referencia para o ponteiro deverá ser passada ao chamar a função. (o segundo parametro deverá ser precedido de '&' "). exemplo: char *dest; const char *origem="Test"; PadLeft('0', &dest, origem, 5); //Repare que "dest" é passado por referencia MessageBox(0, dest, 0, 0); free(dest); //Não se esqueça de desalocar a memoria *Se não funcionar agora sugiro trocar de compilador ¬¬ ;)
  16. D@vid

    Listando diretorios.

    Precisei disso há um tempo atras tambem ^^.... tem ai um pequeno código que lista todos os arquivos em um diretório, HANDLE FindHandle = INVALID_HANDLE_VALUE; WIN32_FIND_DATA FindData; //no Primeiro parametro do FindFirstFile, voce especifica o diretório e os arquivos.... nesse caso "*.*" significa qualquer arquivo com qualquer extensão. FindHandle = FindFirstFile("c:\\*.*", &FindData); if (INVALID_HANDLE_VALUE != FindHandle) { do { std::cout << FindData.cFileName << "\n"; if(!(FILE_ATTRIBUTE_DIRECTORY & FindData.dwFileAttributes)){ // abre o arquivo se não for um diretório ifstream in(FindData.cFileName, ios::in | ios::binary); if(!in) return -1; in.seekg(0, ios::end); int size=in.tellg(); in.seekg(0, ios::beg); char *text=new char[size]; in.read(text, size); out.close(); delete [] text; } } while (FindNextFile(FindHandle, &FindData) != 0); FindClose(FindHandle); *Não se esqueça de incluir os headers nessessarios. (windows.h, iostream, fstream) *Esse código só funciona no windows. Sobre abrir os arquivos e le-los de tras pra frente ate tem como, mas acaba sendo mais conveninente ler o arquivo do começo para o fim usando o "std::fstream.Getline(...)"
  17. você deve estar provavelmente pegando uma string como cpf.... e scanf("%d",dados.cpf) pega um inteiro para dados.cpf, a variavel cpf da struct dados (dados.cpf) deve ser provavelmente do tipo char* , assim você deve usar "scanf("%s",dados.cpf);".
  18. qual erro deu? que compilador você esta usando? eu dei uma testada rapida aqui no visual studio e funcionou... você deve ter errado ao chamar a função.... tenta compilar o código abaixo: #include <stdio.h> #include <string.h> #include <malloc.h> #include <conio.h> void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total) { int strSize=strlen(charOrigem)+total+1; charDestino=(char*)malloc(strSize); memset(charDestino, 0, strSize); int i; for(i=0; i<total; i++){ charDestino[i]=charPrencher; } strcat(charDestino, charOrigem); } int main() { char *destino; PadLeft('0', destino, "test", 10); printf("%s", destino); free(destino); getch(); }
  19. Você esta usando um arrray bidimensional do tipo CHAR, na declaração: (char nomes[10][20]) você esta declarando um array de 10 sequencias de 20 characteres... Assim quando você indica nomes[x][x] você esta indicando apenas um caractere... e a função strcpy() tem como parametros duas SEQUENCIAS DE CARACTERES (char*) não apenas um caratere. para resolver é só indicar nomes em vez de nomes[20] (faça isso para a variavel check tambem) e outra coisa: *Não use system("pause"); porque alem de não ser portavel, e se o usuario mudar a funcionalidade do "pause"? *Não use goto nesses casos, ele favorece a ilegibilidade do código. existem outras alternativas para ele... da uma procurada no google. da uma olhada nesse post: http://www.guiadohardware.net/comunidade/s...st/4087421.html ;)
  20. void PadLeft(char charPrencher, char *&charDestino, const char *charOrigem, int total) { int strSize=strlen(charOrigem)+total+1; charDestino=(char*)malloc(strSize); memset(charDestino, 0, strSize); int i; for(i=0; i<total; i++){ charDestino[i]=charPrencher; } strcat(charDestino, charOrigem); } Essa função aloca a memoria necessária para a string de destino (charDestino), não se esqueça de desalocar a memoria depois que usar a string, usando free();
  21. D@vid

    Resultado estranho

    como você esta trabalhando com TCHAR é só usar "wcout" em vez de "cout".
  22. D@vid

    Solução de Warning

    Isso tá acontecendo porque você tá somando o "pacote" que é um ponteiro (unsigned char*) e o sizeof(...) que retorna um inteiro com o tamanho em bytes do "ether_header", o resultado disso é que você tem adicionado ao "ipc" o "pacote" na posição retornada pelo sizeof. pra parar de aparece isso é só reescrever essa linha assim: ipc = reinterpret_cast</*TIPODOIPC*/>(pacote + sizeof( struct ether_header )); /* linha 40 */
  23. D@vid

    Linguagem C

    o FOR tem que ser assim: for(Variaveis; Condiçao p/ o loop continuar; código a ser executado depois de cada loop) e você tah colocando assim: for(boi=0; boi++) axei outro erro no final tambem: printf("Gordo:id:maior_peso:peso",gordo,maior_peso); printf("Magro:id:menor_peso:peso",magro,menor_peso); teria que ser assim: printf("Gordo:%d:maior_peso:%d",gordo,maior_peso); printf("Magro:%d:menor_peso:%d",magro,menor_peso); esses são os erros de sintaxe, mas tem alguns erros de lógica.... de uma revisada no código, no começo do programa você esta zerando a variavel "boi" que representa o nº de bois.... você tem que declarar uma variavel no loop FOR... ficaria +- assim: for(int numerodoboi=0; numerodoboi <= boi; numerodoboi++){ //resto do programa }
  24. void copia(char *str1, const char *str2) { char *temp=str1; while(*temp++=*str2++); } void concatena(char *str1, const char *str2) { char *temp=str1; while(*temp) temp++; //Vai ate o final da str1 while(*temp++=*str2++) } :) se não entende qualquer coisa é só posta que te esplico.
×
×
  • Criar Novo...