Ir para conteúdo
Fórum Script Brasil

bruce845

Membros
  • Total de itens

    81
  • Registro em

  • Última visita

Tudo que bruce845 postou

  1. Bem, muitos não sabem, mas em C, o buffer pode ser lido de maneira incorreta ao ler-se dados de diferentes tipos. Ex.: int numero; char letra; scanf("%d",numero); scanf("%c",letra); // Ele irá iginorar esse scanf() caso seja lido desse jeito. Para resolver o problema do buffer (ignora ler um dado), use o comando fflush(stdin) para limpar o buffer. Esse comando é muito usado em arquivos, mas nessa ocasião tem uma função especial. Toda vez que for ler um tipo de dado diferente (int com char, string com float, etc.) use o fflush(stdin). int numero; char letra; scanf("%d",numero); fflush(stdin); scanf("%c",letra); Dados que podem ser lidos juntos: int, float e double; char e string; Nunca leia um int, float ou double depois de um char, string ou vice-versa sem limpar o buffer antes. Agora executem esse programa com o define LIMPABUFFER com o valor de 0 e depois com o valor de 1 para ver a diferença: #include <stdio.h> #include <stdlib.h> #include <conio.h> #define LIMPABUFFER 1 // Troque por 0 para desativar a limpeza do buffer. int main(int argc, char **argv) { int numero; char letra,palavra[20]; puts("Digite o numero:"); scanf("%d",&numero); system("CLS"); /* Limpa a tela. */ #if LIMPABUFFER==1 fflush(stdin); #endif puts("Digite a palavra:"); gets(palavra); system("CLS"); /* Limpa a tela. */ #if LIMPABUFFER==1 fflush(stdin); #endif puts("Digite a letra:"); scanf("%c",&letra); system("CLS"); /* Limpa a tela. */ printf("O numero e: %d\n",numero); printf("A palavra e: %s\n",palavra); printf("A letra e: %c\n",letra); getch(); /* Inclua a biblioteca conio.h para usar esse comando! */ return 0; } Postem o que acharam...
  2. Fiz algumas correções. Roda aí para ver no que dá... #include <stdio.h> #include <stdlib.h> #include <conio.h> /* Inclua a conio.h para usar a funcao getch().*/ #include <ctype.h> /* Inclua a ctype.h para usar a funcao tolower() */ int main(int argc, char **argv) { int x, pecas, Total_pecas=0, Contador_h=0, Contador_m=0; float salariofuncionario=0, Folha_pagamento=0, Media_pecas_h=0, Media_pecas_m=0; char sexo; for (x=0; x<=14; x++) { printf("Digite o sexo do funcionario:\n"); sexo=tolower(getch()); /* Inclua a biblioteca conio.h e ctype.h para usar esse comando! */ system("CLS"); /* Limpa a tela */ printf("Digite quantidade de pecas do funcionario:\n"); scanf("%d", &pecas); system("CLS"); /* Limpa a tela */ } if (pecas<=30) salariofuncionario=300; if (pecas>31 && pecas<=35) salariofuncionario=300+((pecas-30)*0,3); if (pecas>35) salariofuncionario=300+((pecas-30)*0,05); Folha_pagamento=Folha_pagamento+salariofuncionario; Total_pecas=Total_pecas+pecas; if (sexo=='m') { Contador_h=Contador_h+1; Media_pecas_h=Total_pecas/Contador_h; } if (sexo=='f') { Contador_m=Contador_m+1; Media_pecas_m=Media_pecas_m/Contador_m; } printf("O salario do funcionario e: %f\n", salariofuncionario); getch(); /* Inclua a biblioteca conio.h para usar esse comando! */ return 0; } Acrescentei essas duas funções: getch(): Grava um caracter de acordo com a tecla pressionada sem precisar apertar ENTER (inclua a biblioteca conio.h para usá-la). tolower(): Transforma a letra digitada em minúsculo (inclua a biblioteca ctype.h para usá-la).
  3. Bem, como você têm o número definido (acho que é 4, no caso), é mehor criar uma matriz (bidimensional) para armazenar as strings! Dicas: Use a diretiva define ao seu favor!Use a função fgets ao invés de gets() para não invadir memória caso exceda o limite da string!Tópico sobre a fgets(): http://scriptbrasil.com.br/forum/index.php?showtopic=164402 Defini a quantidade de nomes no define! #include <stdio.h> #include <conio.h> #define TAMANHO_NOME 30 #define QTDE_NOMES 4 int main(void) { int cont; char vet[QTDE_NOMES][TAMANHO_NOME]; for (cont=0; cont < QTDE_NOMES; cont++) { printf(“Digite uma nova string: \n”); fgets(vet[cont]); system("CLS"); // Apaga a tela. } return 0; }
  4. Usa a função fwrite()! O que acontece: As funções de escrita (com exceção da fwrite), são para escrever textos. Por isso o bloco de notas entende normalmente com exceção dos caracteres '\n' e '\ 0' caso grave em arquivo binário. A função fwrite é específica para gravar em arquivo binário. Ela pode gravar qualquer tipo de variável no arquivo, só que apenas o seu programa conseguirá ler o aqruivo. Uso da fwrite(): size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream ); ptr=ponteiro da variavel ou nome do vetor. size=tamanho da variavel (use a funcao sizeof(nome_da_variavel) para saber o tamanho) count=numero de registros que serão gravados (Somente para guardar várias structs) stream=arquivo (ponteiro) Ex...(Retirado do site www.cplusplus.com): #include <stdio.h> int main () { FILE * pFile; char buffer[] = { 'x' , 'y' , 'z' }; pFile = fopen ( "myfile.bin" , "wb" ); fwrite (buffer , 1 , sizeof(buffer) , pFile ); fclose (pFile); return 0; } Para ler o dado do arquivo, use fread() (tem o mesmo protótipo da fwrite, só que faz o inverso). Espero ter ajudado!
  5. Onde está a função main() do programa? Uma outra dica extra para menus. Eu quando vou fazer menus, uso a função getch() que serve para ler caracter (essa função está na biblioteca conio.h). A vantagem dessa função é que no momento que o usuário aperta a tecla, ela já grava (não necessitando apertar ENTER). Ex.: #include <conio.h> #include <stdio.h> #include <string.h> int main(void) { int continuar=1; puts("Digite:"); puts("1 : Opcao..."); while(continuar) { switch(getch()) { case '1':; case '2':; case 27:continuar=0; // Tecla ESC default:puts("Opcao invalida!"); } } } Note que no exemplo, a getch() retorna sempre um caracter. O caso 27 é referente ao pressionar a tecla ESC, ele sairá do menu.
  6. mas você está usando quais funções para gravar no arquivo?
  7. Alguém sabe um programa que é equivalente ao NetMeeting? O NetMeeting não está mais incluído nas versões do Windows Vista e 7. Achei o MyPhone2, mas se alguém souber de outro...
  8. Eu uso elgumas funções dessa biblioteca, mas não sei outras funções que têm nela. Alguém sabe um lugar que explique melhor sobre essa biblioteca?
  9. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> // Inclua a conio.h, não esqueça! #include <math.h> void validaSimbolo(char *); void validaValor(char *,double *); double calculaOperacao(char *,double *); int main(int argc,char *argv[]) { double valor[2]; char simbolo; system("TITLE Calculadora"); puts("Digite os numeros de acordo com o padrão: x+y e de ENTER!"); scanf("%lf %c %lf",&valor[0],&simbolo,&valor[1]); validaSimbolo(&simbolo); validaValor(&simbolo,valor); system("CLS"); printf("%lf %c %lf = %lf\n",valor[0],simbolo,valor[1],calculaOperacao(&simbolo,valor)); getch(); return EXIT_SUCCESS; } void validaSimbolo(char *simbolo) { while(!strchr("+-*X/:^",toupper(*simbolo))) { puts("Escreva um operador valido!\a"); *simbolo=toupper(getch()); } return; } void validaValor(char *simbolo,double *valor) { while(strchr("/:",*simbolo)&&valor[1]==0) { puts("Informe um numero diferente de 0 para a divisao!\a"); scanf("%lf",&valor[1]); } return; } double calculaOperacao(char *simbolo,double *valor) { switch(*simbolo) { case '+':return valor[0]+valor[1]; case '-':return valor[0]-valor[1]; case 'X':; case '*':return (valor[0])*(valor[1]); case '/':; case ':':return valor[0]/valor[1]; default:return pow(valor[0],valor[1]); } }
  10. Amigo, você completou os lugares que coloquei para completar ou tentou rodar do jeito que estava?
  11. Bem, fiz esse programa em C que lê uma data. #include <stdio.h> #include <conio.h> #include <string.h> void main(void) { short int dia,mes,ano; puts("Digite a data:"); scanf("%hd%*c%hd%*c%hd",&dia,&mes,&ano); printf("%hd/%hd/%hd\n",dia,mes,ano); getch(); return; } Só que se o usuário digitar outra coisa (ex.: kdasdas) Como validar a data nesse caso?
  12. Mas você conhece algum compilador que ainda tenha?
  13. Então, pelo que eu entendi, necessitará de uma função que ordene os valores do vetor v e coloque nas variáveis a & b os menor e o maior valor respectivamente. Não sei se você sabe ponteiros... Então é o seguinte: #include <stdio.h> void ordenaVetor(float *,float *,float *); int main(void) { float v[n],a,b; //Valor de n é sua escolha! // Escreva os valores no vetor. ordenaVetor(v,&a,&b); return 0; } ordenaVetor(float *,float *,float *) { // Ordene o vetor aqui e atribua às variáveis a e b. } Me desculpe se eu entendi errado!
  14. Paloma, o menu tem que ser necessariamente interativo? Se não, faça o exempo: #include stdio.h #include stdlib.h #include conio.h // Inclua a conio.h, não esqueça! int main(void) { short int interromper=0; while(!interromper) { puts("Digite:"); puts("1 : Opcao;"); puts("2 : Opcao;"); puts("3 : Opcao;"); puts("ESC : Sair do programa."); switch(getch()) { case '1':system("CLS"); // Coloque os itens aqui! break; case '2':system("CLS"); // Coloque os itens aqui! break; case '3':system("CLS"); // Coloque os itens aqui! break; case 27:system("CLS"); // Opção da tecla ESC interromper=1; break; default:system("CLS"); puts("Opcao invalida!\a"); break; } system("CLS"); } Esse menu não é interativo, mas é o que acho + prático! Aí, se quiser fazer submenus, coloque estes nos items deste menu, aí caso saia do submenu, ele voltará ao menu principal!
  15. Não entendi cara. O que essa função tem que fazer mesmo?
  16. Entre a semana passada e esta, perdemos dois grandes nomes da tecnologia mundial, começou com a morte de Steve Jobs e agora tivemos a má notícia do falecimento de Dennis Ritchie aos 70 anos. Ritchie foi o criador da Linguagem de Programação C e um dos fundadores do sistema operacional Unix, que roda abaixo de outros sistemas operacionais, como Mac OS X, Linux e suas centenas de distribuições diferentes, iOS e Android. Reportagem completa Não sei se posso postar isso aqui neste fórum. Se não, podem deletar.
  17. Onde acho vídeo-aulas para fazer GUI em C++? Não estou acando em lugar nenhum! Ainda estou programando em console e quero aprender a fazer GUI. Se tiverem alguma coisa explicando... Agradeço
  18. Infelizmente não dá pra definir o número de caracteres a serem lidos pela scanf no define. Ex.: #define MAX_NOME 20 scanf("%MAX_NOME[^\n]s", frase); // Não adianta!
  19. Quando aprendi as streams padrão, aprendi que existem as seguintes streams padrão: stdinstdoutstderrstdauxstdprnPortanto, as marcadas em vermelho não existem mais na stdio.h (cstdio). Por que não existem mais? Existe ainda algum compilador que ainda tenha esses padrões?
  20. bruce845

    Vetores

    bem amigo, você tenta mostrar em seu printf(), o valor que está contido no vetor, que não está atribuído nenhum valor (lixo). Você tem que atribuir os valores às variáveis do vetor e aí sim mostrar o que está contido nelas. Ex.: #include <stdlib.h> #include <stdio.h> #include <conio.h> int main(void) { int impar[10],preencher; // Esse primeiro for irá percorrer o vetor atribuindo os valores ímpares! for(preencher=1;preencher<10;preencher+2) { impar[preencher]=preencher; } //Agora o 2º for que você fez irá exibir normalmente os números atribuídos nas variáveis! for(preencher=1;preencher<10;preencher+2) { printf("numeros impares :%d\n",impar[preencher]); } getch(); } Como esse exercício exige que preencha o vetor com os números ímpares e depiois mostrar os números, aí está!
  21. Cara, toda vez que você declara uma variável sem atribuir nenhum valor nela, o que têm na variável é lixo. Assim, seus valoes podem se alterar bruscamente, já que nunca se sabe o que possui em um lixo de memória! Eu já desconfiava da "falha" kkkk!
  22. Use a função sprintf() da biblioteca cstdlib (stdlib.h em C). Uso da sprintf: sprintf(sprintf,%f,numero); Sendo %f recebe um float, mas acho que precisa ser formatado. Se precisar formatar o numero, escreva %<numero de casas antes da virgula>.<nº de casas depois da vírgula> Ex.:%3.2f Assim a função colocará o valor na string, depois basta usar a função strlen() presente na biblioteca cstring (string.h em C) para contar o número de caracteres (ela retorna o número de caracteres na string). Uso: strlen(string) Não sei se existe uma função própria de C++ para essa transformação.
  23. Eu não entendi o porque que a declaração do seu vetor de float recebe o valor de i, sendo que o valor de i é lixo de memória! int i,j,l,soma_qtd=0,qtd_pecas[5]; float preço[i],tot_vend[i]; // O valor de i é um lixo de memória! O valor de i é um lixo de memória! Assim você cria um vetor indefinido! Você poderia atribuir um valor a "i" para que o vetor seja criado sem problemas! Essa é uma das observações que fiz! Cara, não usa ç (cê cedilha) no nome das variáveis, quando fui rodar seu código no meu compilador ele pediu para mim corrigir! Se descobrir mais alguma coisa, eu posto aqui! A biblioteca cmath equivale ao math.h em C++! Mas o uso das duas não tem problema! Não entendi o exercício, poste aqui o enunciado para ver se tá td certo!
  24. Bem, a dica é a seguinte: Crie uma variável ponteiro de string (crie uma para cada mensagem que quiser guardar). Ex.: const char *teste; Agora quendo for escrever uma mensagem qualquer pela primeira vez, armazene-a no ponteiro da seguinte forma: Em C: printf((teste="Alo mundo!")); ou puts((teste="Alo mundo!")); Usando as funções de E/S de C++: cout<<(teste="Alo mundo!")<<endl; Não esqueça de colocar os parenteses! Aí quando você precisar de exibir a mesma string novamente, somente coloque o nome da variavel ponteiro! Em C: printf(teste); ou puts(teste); Usando as funções de E/S de C++: cout<<teste<<endl; Isso ocorre porque toda mensagem que você manda o computador exibir na tela fica na memória durante a execução do seu programa. Assim, a sua mensagem ocupa memória, e cada vez que você manda exibir a mensagem novamente, um novo espaço de memoria é ocupado, causando um desperdício. Queria saber dessa dica se ela não usa a memória de forma incorreta...
  25. Muitos que estão iniciando em C usam a função gets() para ler uma string, mas ela tem os seguintes problemas (a função scanf("%s",string) quando usada para ler string têm o mesmo problema) quando a mesma é usada para ler strings... O gets() não verifica o tamanho da string que você digitou, ou seja, se você digita mais do que o declarado em seu vetor, irá invadir memória. Ex.: char nome[30]; gets(nome); Se você digitar um nome com mais de 30 caracteres, posições de memória que não pertencem ao seu programa serão invadidas. Quanto a scanf() (se usada para ler string), que também não verifica o tamanho da string e invadirá memória caso exeda o limite de caracteres, qualquer espaço digitado, ele colocará '', caracter que siginifica que a string terminou. Uma função (usada em arquivo) que não deixa NADA disso acontecer é a fgets(), onde se for exedido o limite de caracteres, ele não invadirá a sua memória! Uso da fgets: fgets(string,tamanho da string,stdin) (quanto à stdin, apenas inclua a palavra!) O incoveniente dessa função é que ela coloca também no final da string, antes de colocar o '\ 0' (dei um espaço para aparecer, o '\ 0' não estava aparecendo, mas ele não existe), o '\n' (pula linha), aí você terá que sempre fazer o seguinte para remover o '\n' da string: if(string[strlen(string)-1]=='\n') { string[strlen(string)-1]='\ 0'; } Assim irá remover o '\n' da string!
×
×
  • Criar Novo...