
bruce845
Membros-
Total de itens
81 -
Registro em
-
Última visita
Tudo que bruce845 postou
-
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...
-
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).
-
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; }
-
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!
-
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.
-
mas você está usando quais funções para gravar no arquivo?
-
Alguém sabe um programa que é equivalente ao NetMeeting?
uma questão postou bruce845 Outros Softwares
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... -
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?
-
Calculadora usando ponteiros e funções diversas
uma questão postou bruce845 Tutoriais & Dicas - C, C++
#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]); } } -
Amigo, você completou os lugares que coloquei para completar ou tentou rodar do jeito que estava?
-
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?
-
Mas você conhece algum compilador que ainda tenha?
-
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!
-
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!
-
Não entendi cara. O que essa função tem que fazer mesmo?
-
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.
-
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
-
(Em C somente) Use fgets() ao invés de gets()!
pergunta respondeu ao bruce845 de bruce845 em Tutoriais & Dicas - C, C++
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! -
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?
-
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á!
-
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!
-
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.
-
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!
-
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...
-
(Em C somente) Use fgets() ao invés de gets()!
uma questão postou bruce845 Tutoriais & Dicas - C, C++
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!