Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. E um conselho.... Si tiver um else e dentro um if troque isso por um else if: #include <iostream>using namespace std;int main (){ int cont; float num1, num2; for (cont=1; cont<=5; cont++){ cout<<"\nEscreva um numero: "; cin>>num1; cout<<"\nEscreva um numero 2: "; cin>>num2; if (num1 > num2) { cout<<"\nO numero maior e: "<<num1; }else if (num1 < num2) { cout<<"\nNumero maior e: "<num2; }else { cout<<"\nNumeros iguais"; } } cout<<"\n"; system("pause");}
  2. if ( verifica == 1 )... verifica não é uma função? As funções devem ser chamadas tal como verifica() e si levar parâmetros como no seu caso, é obrigatório você fornecer os dados corretos a essa função. seria algo como if ( verifica(dado1, dado2 ...) == 1 )
  3. O scanf também ta com problema... Mude scanf("&d", &idade); para scanf("%d", &idade);
  4. vangodp

    Hyper V

    Sinto muito, não posso realizar testes com esse computador que tenho, é muito velho. A ver si alguém mais pode te ajudar, si descubro algo mais ponho aqui. =(
  5. Crie uma estrutura como essa: struct Dados{ int numero; char nome[100]; char endereço[100] int telefone; }; Logo faça um typedef typedef struct Dados apartamento[24]; Logo você pode percorrer os 24 apartamentos com um loop for dessa forma: int i; for (i=0;i<24; i++){ scanf( "%d", apartamento.numero ); //scanear o resto } para mostrar é a mesma coisa, somente troque scanf por printf: for (i=0;i<24; i++){ printf( "%d\n", apartamento.numero ); //printefar o resto XD } Tadah!!!
  6. vangodp

    Hyper V

    Realmente não é possível, a alternativa pode ser usar Oracle VirtualBox. Nesse post você pode encontrar instruções http://stackoverflow.com/questions/22106597/hyper-v-in-windows-8-1-single-language Comente si te serviu para que outros saibam que funciona ou não, infelizmente não posso provar isso ja que estou em XP. Sou pobre. hahahah
  7. como null? Um texto não pode ser null! Um string não é um só carácter, si não um punhado de caracteres. Para que você faça uma ideia, si eu fizer char nome[100] = NULL; é como si eu tiver fazendo char nome[100] = 0 no qual é um absurdo, pois não posso designar um int a um string, porém, sim que posso fazer char nome[100] = {0};, nesse caso todos os chars da string nome tomam o valor de nulo, a string fica formatada. Outra coisa que posso fazer é: char nome[100]; strcpy( nome, ""); //<-igual que antes, só que posso fazer após a declaração, a qualquer hora. Si você fizer: char string[100] = "\0"; fputs(string,arquivo); ...provavelmente o arquivo fique com um tamanho de zero, fputs não enviará nada ao arquivo. Então fica difícil te entender. Depende muito como você tem no arquivo, si você enviar o arquivo para eu dar uma analisada talvez possa lhe ajudar. Descreva passo a passo o que você tem no arquivo e o que você quer fazer.
  8. vangodp

    Calculadora em c

    quando você pergunta printf ( "\n\t1 - Soma\n\t2 - Subtracao\n\t3 - Multiplicacao\n\t4 - Divisao\n\t " ), logo depois você le um char scanf ( "%c", &operador );, então o que acontece é que nunca se cumpre nenhuma das condições case 1: pois operador == 1 é falso, o correto seria operador == '1', pois 1 nao é a mesma coisa que '1', 1 é um inteiro, e '1' é um char. #include <stdio.h>int main () { int valor1, valor2, resultado; char operador; printf ( "\n\t1 - Soma\n\t2 - Subtracao\n\t3 - Multiplicacao\n\t4 - Divisao\n\t " ); scanf ( "%c%*c", &operador ); printf ( "Digite o primeiro valor\n" ); scanf ( "%d%*c", &valor1 ); printf ( "Digite o segundo valor\n" ); scanf ( "%d%*c", &valor2 ); switch ( operador ) { case '1': resultado = valor1 + valor2; break; case '2': resultado = valor1 - valor2; break; case '3': resultado = valor1 * valor2; break; case '4': resultado = valor1 / valor2; break; } printf ( "O Resultado e: %d", resultado ); //scanf ( "%c", &operador );}
  9. vangodp

    codigo c

    #include <stdio.h>#include <string.h>#define N_PRODUTOS 5typedef struct{ char nome[20]; int codigo; float preco; int estoque;}Produto;void init(Produto *);void novoProduto(Produto *);void removerProduto(Produto *);void listarProduto(Produto *);void lerDados( Produto *, int );void flush_in();int menu();int main() { Produto lista[N_PRODUTOS] = {0}; init ( lista ); int continuar = 1; while ( continuar ) { switch ( menu() ) { case 1: novoProduto ( lista ); break; case 2: removerProduto ( lista ); break; case 3: listarProduto ( lista ); break; case 0: continuar = 0; break; default: break; } } getchar(); return 0;}void init(Produto *pLista){ int i; for( i=0;i<N_PRODUTOS;i++ ){ pLista[i].codigo = -1; } printf("Lista inicializada!!\n\n");}void novoProduto(Produto *pLista){ int i=0, continuar = 1; while ( i<N_PRODUTOS && continuar == 1 ){ if ( pLista[i].codigo == -1){ lerDados( &pLista[i], 1 ); continuar = 0; } i++; } }void removerProduto(Produto *pLista){ int cod, encontrado = 0; printf("Cod producto a remover?: "); scanf("%d%*c", &cod); int i=0, continuar = 1; while ( i<N_PRODUTOS && continuar == 1 ){ if ( pLista[i].codigo == cod){ pLista[i].codigo = -1; strcpy( pLista[i].nome, "" ); pLista[i].estoque = 0; pLista[i].preco = 0; encontrado = 1; continuar = 0; } i++; } if ( encontrado != 1 ){ printf("Produto Nao Encontrado.\n"); }else{ printf("Produto Removido.\n"); }}void listarProduto(Produto *pLista){ int i; printf ( "%3s %-20s %s %3.2s\n", "Cod", "Nome", " Estoque", "R$" ); for( i=0;i<N_PRODUTOS;i++ ){ if ( pLista[i].codigo != -1 ) { printf ( "%4.3d ", pLista[i].codigo ); printf ( "[%-21.20s] ", pLista[i].nome ); printf ( "%.5d", pLista[i].estoque ); printf ( " %-3.2f\n", pLista[i].preco ); } }}void lerDados( Produto *pProduto, int dadosCompletos ){ printf("Numero do produto: "); scanf("%d%*c", &pProduto->codigo); if ( dadosCompletos == 1 ){ printf("Nome do produto: "); scanf("%20[^\n]s", pProduto->nome); flush_in(); printf("Estoque do produto: "); scanf("%d", &pProduto->estoque); flush_in(); printf("Preco do produto: "); scanf("%f", &pProduto->preco); flush_in(); }}void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}}int menu(){ int op; printf("***Menu***\nEscolha uma opcao\n\n"); printf("1-Inserir produto novo\n"); printf("2-Remover produto\n"); printf("3-Listar produtos\n"); printf("0-Sair\n"); scanf("%d%*c", &op); return op; } Mais ou menos ja esta, mude o numero de produtos a 100 e faça as mudanças menores.
  10. #include <stdio.h>int main() { double raiz = 3.14; int raiz_inteira = ( int ) raiz; if ( raiz - raiz_inteira ) { // Sobra 0.14 por por tanto retorna verdadero printf ( "Tem os quebrados XD" ); } else { printf ( "Inteiro redondo" ); } return 0;} Guarde o resultado na variável raiz e pronto.
  11. Scanf de forma padrão só lê até topar com um espaço branco(' '), um tabulador('\t') e até encontrar('\n') a tecla enter, então para ler ula frase que contenha espaços por exemplo, devemos obrigar ele a fazer o que queremos, utilize o especificador %[^\n]s para isso, é como dizer para o escanf que "leia tudo que não seja '\n' ",então ele vai aceitar espaços. Outra variante é %99[^\n]s, supondo que você tem char nome[100], o scanf que conter %99[^\n]s, somente vai ler 99 letras. Por que só 99? Si você recordar todo o string tem um carácter que indica seu final, si lemos 100, scanf vai por o nulo ao 101, isso é um erro e por isso somente 99. Outra variante mais é %99[^\n]%*c, essa criatura evita que o enter caia ao buffer de entrada causando erros. Cabe destacar que si eu limito a leitura a a 99 caracteres é muito importante saber que acontece com o resto das letras, si eu por exemplo entrar com 110 letras, 99 van a parar no nome, o restante vai ficar no buffer aguardando uma nova função é variável que a retire de aí, a única forma de vaziar o buffer é lendo seu conteúdo. Vamos ver um exemplo: #include <stdio.h>#include <stdlib.h>int main (){ char frase1[10]; char frase2[50]; printf("Entre con a frase1: "); scanf("%9[^\n]%*c", frase1); printf("\nO restante vai parar em frase2 sem sua intervençao: "); scanf("%49s", frase2); printf("\n\nfrase1: %s\n", frase1); printf("frase2: %s", frase2); getchar(); getchar(); return 0;} No código acima, si eu entrar mais de 9 letras o resto vai levar o 2 scanf, por isso é importante você limpar o buffer logo depois de fazer uma leitura. É bom pensar que o usuário é como uma criança, si você falar para não por mais de 10 letras ela vai por 100 só para ver seu programa explodir, e você como uma boa programadora vai dizer, "Obrigado senhor usuário, por estourar minha aplicação, e por ligar para o suporte técnico, agora mesmo vou invocar a equipe novamente, gastar outra milhonada para arrumar todos os bugs que causei por causa da minha inexperiência e muito obrigado." hahaha. Acaso você já viu algum programa dizer pra você não por mais de x quantidade de letras? Lógico que não, e si ver ligue pro cara e diga que você pode perfeitamente assumir seu posto XDD. Quem tem que controlar si o usuário entrou ou não com mais chars do permitido é você... Quer uma solução? void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}} Chama essa função logo depois de cada string ou char que ler, ou antes de ler, e assunto resolto. Vamos aplicar isso ao código anterior. #include <stdio.h>#include <stdlib.h>void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}}int main (){ char frase1[10]; char frase2[50]; printf("Entre con a frase1: "); scanf("%9[^\n]s", frase1); flush_in(); printf("\nAgora pode entrar com a frase2 sem problemas =): "); scanf("%49s", frase2); flush_in(); printf("\n\nfrase1: %s\n", frase1); printf("frase2: %s", frase2); getchar(); getchar(); return 0;} Perceba que agora não tem mais problema, pois si ler mais de 9 caracteres o restante vai ficar no buffer, logo a função flush_in se ocupa de esvaziar todas as letras, a função fgetc trabalhando com o parâmetro stdin, vai retirando uma por uma todas as letras que sobrarem no buffer, o resultado é uma leitura correta ao 100%, sem precisar se preocupar si o cliente vai digitar 30 mil chars, como falei, a única forma de vaziar o buffer de entrada é ler seu conteúdo. Si vou ler um único char ou int, antes de outro char ou string, ponho %d%*c, ou simplesmente ponho um espaço antes da segunda leitura como você fez, isso ignora o enter, que certamente é o causante do seu problema. Uma forma correta de fazer essa leitura seria: #include <stdio.h>#include <stdlib.h>#define NFUNCIONARIOS 2 //NFUNCIONARIOS é uma constante, use maiusculas para constantes ;)typedef struct funcionario{ float salario; int idade; char nome[50];}funcionarios;void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}}int main(){ funcionarios func[NFUNCIONARIOS]; int i; for(i=0;i<NFUNCIONARIOS;i++){ printf("Dados funcionario %d.\n",i+1); printf("Informe o nome: "); scanf("%49[^\n]s", func[i].nome); flush_in(); printf("Informe a idade: "); scanf("%d", &func[i].idade); flush_in(); system("cls"); } for(i=0;i<NFUNCIONARIOS;i++){ printf("Funcionario %d\n", i+1); printf("Nome: %s\n", func[i].nome); printf("Idade: %d", func[i].idade); printf("\n\n"); } return 0;}
  12. vangodp

    Uso do Toupper e Tolower

    #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char frase[20]; int x, v, c, e; v = c = e = 0; printf ( "\n Digite uma frase qualquer: " ); scanf("%19[^\n]%*c", frase); for ( x = 0; frase[x] != '\0'; x++ ) { switch ( tolower ( frase[x] ) ) { case'a': case 'e': case'i': case'o': case'u': v++; break; case ' ': e++; break; default: c++; break; } } printf ( "\n\n A frase tem %d espacos em branco", e ); printf ( "\n A frase tem %d vogais", v ); printf ( "\n A frase tem %d consoantes", c ); system ( "pause>>null" ); }
  13. #include <stdio.h>#include <stdlib.h>#include <string.h>struct produto { int cod; char nome[50]; struct produto *prox;};typedef struct produto ListaProd;void imprime ( ListaProd *l );ListaProd* inicia() { return NULL;}int vaziaLista(ListaProd *lista) { return (lista == NULL);}ListaProd* insereOrdem ( ListaProd *l, int i, char nome[] ) { ListaProd *p = l, *ant = NULL; ListaProd *novo = ( ListaProd * ) malloc ( sizeof ( ListaProd ) ); novo->cod = i; strcpy ( novo->nome, nome ); if ( p == NULL || p->cod > i ) { novo->prox = p; return novo; } else { while ( p != NULL && p->cod <= i ) { ant = p; p = p->prox; } novo->prox = ant->prox; ant->prox = novo; return l; }}//erro ta nesta parte aquivoid removerProdutoLista ( ListaProd *l ) { if ( !vaziaLista ( l ) ) { int index; imprime( l ); puts ( "Entre com o Codigo referente ao item que voce quer remover:" ); scanf ( "%d%*c", &index ); printf( "***FALTA TERMINAR***" ); system ( "PAUSE>>null" ); // o programa vai se deter aqui!! } else { puts ( "A lista está vazia. Não há nada a ser removido." ); }}void imprime ( ListaProd *l ) { ListaProd *p; for ( p = l; p != NULL; p = p->prox ) { printf ( "\nCodigo: %d", p->cod ); printf ( " | Nome: %s", p->nome ); }}int main() { ListaProd *l; int cod, op = 0; char nome[50]; l = inicia(); do { system ( "cls" ); printf ( " \n--------- MENU ---------\n " ); printf ( " \n1 - Inserir Produto Novo " ); printf ( " \n2 - Listar produtos " ); printf ( " \n3 - Remover Produtos " ); printf ( " \n4 - Encerrar " ); printf ( " \nOpcao: " ); scanf ( "%d", &op ); switch ( op ) { case 1: system ( "cls" ); printf ( " \n\n--- Novo produto --- " ); printf ( "\n Codigo: " ); scanf ( "%d", &cod ); printf ( " Nome: " ); scanf ( "%s", nome ); l = insereOrdem ( l, cod, nome ); break; case 2: system ( "cls" ); printf ( "\n\n--- Lista de produtos --- \n" ); imprime ( l ); system ( "pause>>null" ); break; case 3: system ( "cls" ); printf ( "\n\n--- Remover produtos --- \n" ); removerProdutoLista ( l ); default: printf ( " Opcao invalida " ); break; } } while ( op != 4 ); system ( "PAUSE>>null" ); return 0;} Ok... falta escrever o código que o elimina da lista. Ah! e muito importante é você liberar os recursos, faça a função que libere os recursos com free, já que cada vez que executas o programa você esta gerando fuga de memoria, isso deveria ser o primeiro em fazer. Sorte.
  14. Essa lista não é uma lista ordenada? Si você fizer isso o programa vai ficar doido, pois ele se esta baseando no código para ordenar essa lista, acho que é o preço que é para você por como -1, ou realmente não to entendendo sua lógica nesse exercício.
  15. O que você esta buscando são os "containers" da STL, "Standar Template Library". Aqui esta o tal list-> http://www.cplusplus.com/reference/list/list/, que por certo si quiser mais informação busque std::List.
  16. Isso aqui é um fórum de C/C++/C#, certamente muitos saibam sobre visual g ou como se chame isso, particularmente acho perda de tempo, mas.... XD Busque algum fórum de logica de programação, ou espere a ver si alguém te ajuda, sei algo sobre C, C++ e até algo de java, porém portugol me parece chino. XD
  17. muita pratica.... Esse é o melhor conselho. Errar é normal, tente aprender dos erros, as vezes é até recomendado forçar o erro para ver o que acontece. Tenha claro que C/C++ a pontuação é muito importante, as vezes falta um ponto e virgula e indica que tem mil erros, não se assuste, olhe o primeiro deles, os demais marcam erro por que si falta uma acentuação correta tudo o demais marca erro, si não encontrar nada nessa linha olhe a linha anterior, pois o compilador nunca vai te dizer que o problema esta na linha anterior, porém vai ti dizer que o erro esta antes de algo, si esse algo for a primeira palavra da linha seguramente o erro esta na linha anterior, pois para C não importam as linhas, para C é o anterior. Por que isso, por que ele para ver um erro já passou do erro, então ele avisa que o erro ta antes de algo, isso por que ele parou aí. A pratica faz o bom programador, você quer aprender a programar erre bastante e esteja enganchado nos foruns e paginas de programação.
  18. A estrutura é: typedef struct{ char nome[30]; float valor; //preço int estoque; }Produto; Ai você vai la dentro do main e cria uma lista com 3 produtos tipo: ...#define N_PRODUTOS 30int main(){ Produto lista[N_PRODUTOS];... segundo passo é fazer uma função que receba essa lista de produtos e ponha a -1 todos e cada um dos produtos, o campo valor, ele chama de preço, mas sabemos que ç não é bem vinda em C. A funçao você pode passar a lista como ponteiro, assim você não esta passando uma copia, si não a lista completa original, ou seja, você modifica ela dentro do próprio main ainda que passar ela a outra função, pois você estará passando somente a direção. Seria algo como: #include <stdio.h>#define N_PRODUTOS 30typedef struct{ char nome[30]; float valor; //preço... temos que por tudo a -1 logo no inicio int estoque; }Produto;void init(Produto *pLista){ int i; for( i=0;i<N_PRODUTOS;i++ ){ pLista[i].valor = -1; } printf("Lista inicializada!!\n\n");}int main(){ Produto lista[N_PRODUTOS]; init(lista); getchar(); return 0;} Próximo passo é fazer tudo o resto que você não postou
  19. %[^\n] Quer dizer que leia qualquer coisa que não seja avance de linha, si eu puser %[aeiou] só vai ler vogais, por exemplo, si eu introduzir "aeirxz", ele só vai aceitar até que encontra a primeira consoante"aei", o resto vai ficar no buffer a espera de outra variável ou outro scanf sem essa restriçao. #include <stdio.h>#include <stdlib.h>int main (){ char string[100]; scanf("%[aeiou]", string ); printf("%s\n", string); scanf("%s", string ); printf("%s", string); getchar(); return 0;} Então teoricamente com %[^\n] eu obrigo o programa a ler espaços ' ' ja que nao sei si você tentou fazer isso alguma vez com scanf. #include <stdio.h>int main (){ char nome[100]; scanf("%s", nome ); printf("%s\n", nome); getchar(); return 0;} tente por seu nome completo, por exemplo o meu "vangodp vamp" XDD. Só vai sair vangodp, o vamp vai ficar lá no buffer. porém si você fizer: #include <stdio.h>int main (){ char nome[100]; scanf("%[^\n]", nome ); printf("%s\n", nome); getchar(); return 0;} ...Ai você vai perceber que sim faz a leitura completa da frase, e você pode tomar um nome e sobre nome completo em un só string. Scanf de forma padrão só lê até encontrar enter '\n', um espaço ' ', ou um tabulador '\t'. Quando ponho %[^\n] digo lea tudo, menos o enter, porém ele entra na string assim que ponho %*c que o que faz é ignorar a ultima letra lida, sempre vai ser o enter, então, %[^\n] junto com %*c é dizer... "leia tudo menos \n, e não adicione \n no meu string". A tecla \n também é uma letra, e si ela entrar no seu string vai causar erros de leitura, sobretudo quando você tentar ler 2 ou mais chars e vários strings consecutivos, certamente te ensinaram a limpar o buffer com fflush(in), pois que saiba que não é correto fazer isso já que os mesmos criadores dessa função explicam que ela foi criada para limpar o buffer de saída, e não o de entrada, ou seja, ele foi criado para fflush(out), e pode ter comportamentos imprevisíveis quando usado conjuntamente com strings. Por esse motivo uso coisas como %[^\n]%*c, pois limpar é uma ação que deve ser levado a cabo depois da entrada de \n ao buffer, com %[^\n]%*c, eu evito que \n entre ao buffer, e assim eu não uso funções de terceiros que tenham um comportamento indefinido, passo a ter o total controle do meu programa. Agora passo a explicar o que acontece com o 49... Si eu colocar 49 antes de [^\n]%*c e depois de % de forma que fique %49[^\n]%*c, isso quer dizer que somente leia 49 letras no máximo nesse scanf, como tenho uma estrutura com char nome[50], sabemos que só posso ler 49 letras para esse nome. Por que 49? Si você recordar, scanf bota um nulo logo no final da nossa string, então eu não posso usar as 50 letras por que scanf vai botar o nulo na posição 51, essa posição não existe, porém sim existe uma casinha depois da 50 na memoria, pode haver outra variável ao lado da nossa e si usamos os 50 chars, scanf vai botar lá na suposta 51 o nulo, isso causa erros. Então %49[^\n]%*c é como dizer: Scanf... amigo! quero ler 49 letras, quero que leia espaços, tabuladores, todas as letras e números, quero que deixe de fora o enter e que me ponha o nulo no máximo na posição 50. Legal não? Vamos a ver um exemplo: #include <stdio.h>int main (){ char nome[100]; scanf("%5[^\n]%*c", nome ); printf("%s\n", nome); getchar(); return 0;} Al executar esse programa você vai se dar conta que tem o nome com 100 letras porém você nunca vai poder ler mais de 5 pois si você ver o scanf ele tem %5[^\n]%*c, ele agora só lê 5. Que acontece com o resto? Fica no buffer, esperando outro string. #include <stdio.h>int main (){ char nome[100]; char resto[1000]; scanf("%5[^\n]%*c", nome ); printf("\n\nSuas 5 letras ->%s\n", nome); scanf("%s", resto ); printf("\n\nResto que ficou no buffer->%s\n", resto); getchar(); getchar(); return 0;} Eu te estou ensinando que você tem um buffer, a tecla enter causa erros quando entra no buffer, você deve prever isso, e usar os mecanismos adequados para evitar problemas, já que de não tomar a devida precaução, seu programa vai terminar num rotundo fracasso. Então recorde coisas como: Enter é uma letra igual que qualquer outra. Enter causa erros de leitura quando tento ler vários chars e strings consecutivos, com inteiros e outros tipos não tenho esse problema. Si deixo enter entrar ao buffer de entrada padrão "stdin", devo limpar o buffer antes de uma leitura nova. A função fflush não deve ser usada para limpar o buffer de entrada, nunca! Não faça isso nem que te ordene seu professor, é mais, si ele faz isso te esta roubando o dinheiro >_<. Busque-se um profissional melhor qualificado para te ensinar. Posso evitar que enter vaia a parar no buffer indicando qual comportamento scanf deve ter. Scanf lê até encontrar espaço, tabulador ou a tecla enter, de forma padrão esse é seu comportamento, si quero posso modificar esse comportamento como expliquei. A única forma de esvaziar o buffer é lendo seu conteúdo, nao existe outra forma. Veja um exemplo: Si eu quero ler 2 chars: char c1, c2; Vai ser impossivel scanf("%c", &c1); scanf("%c", &c2); o programa vai saltar o segundo char por causa do enter, pode comprovar. porém si faço: char c1, c2, lixo; scanf("%c%c", &c1, &lixo); scanf("%c", &c2); quando entrar com uma letra e pulsar enter, a primeira letra vai parar em c1, e o enter vai entrar na variável lixo, fazendo assim que não temos problemas ao ler o segundo c2. porém não acho certo ter que fazer isso, acho melhor ignorar o enter, por isso faço: scanf("%c%*c", &c1); ...e não preciso por uma segunda variável para receber o lixo. Como falei, a única forma de esvaziar o buffer é lendo seu conteúdo. Em fim... não vou alargar esse tema mais, si quiser uma melhor explicação entre em contato comigo por skype e te explico sem problemas. E para finalizar vamos, te vou fazer um presentinho ijjijjijiji. #include <stdio.h>//funçao magica que limpa buffervoid flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {}}int main (){ char str1[10]; char str2[10]; printf("Entre con a palavra1: "); scanf("%9s", str1); flush_in(); printf("\nEntre con a palavra2: "); scanf("%9s", str2); flush_in(); printf("str1: %s\n", str1); printf("str2: %s\n", str2); getchar(); return 0;} Essa função flush_in, é a melhor função que existe para limpar buffer. Imagine que você tem 2 string de 10 palavras, antes eu falei que si você usar %9[^\n]%*c o programa leia 9 letras e o resto ficava no buffer recorda? Isso é um grande problema ja que si você tiver um segundo scanf com outro string de 10 letras e no primeiro você digitou ums 100 letras, o primeiro scanf vai consumir 9 letras, e o segundo scanf vai jogar essas 91 letras restante no segundo string, causando assim um erro FATAL!!!! porém ai é onde entra nossa "funçãozinha", ela vai lendo tudo o que esta no buffer e deixa ele limpo para uma próxima leitura. Resultado eu posso controlar a quantidade de char em cada variável jiijijijiji Fui!!!!
  20. No meu código não é... Não?
  21. É... certamente tem barreira sim, ao menos para mim. Seguramente poderia acostumar rápido a programar em VB, pois de C++ a java levei uma semana XD, porém não acho que necessite aprender VB a curto prazo. Em C usamos funções, loop for, while, switchs que são bem parecidos a ifs, porém são melhores para menus e estas coisas. Na verdade C é muito potente, e é uma delicia programar nele, uma vez dominado, você se sente capaz de programar qualquer coisa, porém eu sou mais de C++ por causa da OO. Si você estiver dando o salto para o C siga adiante, certamente C você vai gostar muito mais que VB. C é a princesinha do baile. heheh
  22. nao ponha os operadores << dentro de aspas duplas "<<", ele serve para unir literais com variaveis, exemplo "isso é um string literal" << variavel. Si eu fizer "isso é um string literal << " variavel ta errado // Calculo.cpp#include <iostream>using namespace std;int main() { int numero1, numero2, soma, multiplica, subtrai; cout << "\nInforme um numero inteiro"; cin >> numero1; cout << "\nInforme outro numero inteiro"; cin >> numero2; soma = numero1 + numero2; multiplica = numero1 * numero2; subtrai = soma - multiplica; cout << "\n Os resultados: soma: " << numero1 + numero2 << ", multiplicacao: " << numero1 * numero2 << ", subtracao: "<< subtrai; cin.ignore(2); return 0;} respeite a direção dos operadores, cout usa << porém cin usa >>. Pense que cout é a sua tela e que você dirige os dados em direção a tela cout <<, e a mesma coisa com cin, cin é seu teclado então cin >> variavel, você envia do teclado para sua variável. Fazer cin >> "literal"; é errado, você só pode guardar dados em variáveis, nunca em literais.
  23. #include <stdio.h>#include <stdlib.h>#define N_ALUNOS 2#define N_NOTAS 2typedef struct{ char nome[120]; float notas[N_NOTAS];}Dados;void setAlunos(Dados *d){ int i, j; for(i=0; i<N_ALUNOS; i++){ printf("Nome do aluno%d: ", i+1); scanf("%119[^\n]%*c", d[i].nome); for( j = 0; j < N_NOTAS; j++){ printf("...Nota%d: ", j+1); scanf("%f%*c", &d[i].notas[j]); } system("cls"); }}void listAll(Dados *d){ int i, j; for(i=0; i<N_ALUNOS; i++){ printf("Aluno%d: %s\n", i+1, d[i].nome); for( j = 0; j < N_NOTAS; j++){ printf("...Nota%d: %2.2f\n", j+1, d[i].notas[j]); } printf("\n\n"); }}void mediaAprovados(Dados *d){ int i=0, j; float acumulador = 0; while( i<N_ALUNOS ){ j=0; acumulador = 0; while( j < N_NOTAS ){ acumulador += d[i].notas[j]; j++; } float nota = acumulador/N_NOTAS; if ( nota >= 70 ){ printf("Aluno%d: %s ", i+1, d[i].nome); printf("aprovado. Nota %2.2f\n", acumulador/N_NOTAS); } i++; } }int main() { Dados alunos[N_ALUNOS]; setAlunos(alunos); listAll(alunos); mediaAprovados(alunos); return 0;} Configure o programa na parte dos defines. Por exemplo, si quiser 5 alunos com 3 notas cada ponha #define N_ALUNOS 5 #define N_NOTAS 3 O programa fará uma media da nota geral, si ele tem 3 notas, as 3 são somadas e divididas por N_NOTAS, ou seja 3. Tudo é automático não precisa mudar nada, si quiser 10 alunos com 1 só nota ponha: #define N_ALUNOS 10 #define N_NOTAS 1 Ok? Tente entender o código, de nada serve comente copiar. Si tiver alguma duvida pergunte. e tente usar a etiqueta <> que esta no menu de edição tal como comenta Math.PI, assim o código sai organizado e você obtém ajuda mais rápido. Sorte.
  24. #include <stdio.h>#include <stdlib.h>#define N_CONTATOS 2struct Dados { char nome[50]; char dir[50]; //direçao int fone;};int main() { int i; struct Dados agenda[N_CONTATOS]; for ( i = 0; i < N_CONTATOS; i++ ) { printf ( "\nContato%d Digite seu Nome: ",i+1 ); scanf ( "%49[^\n]%*c", agenda[i].nome ); printf ( "\nContato%d Digite seu Endereco: ",i+1 ); scanf ( "%49[^\n]%*c", agenda[i].dir ); printf ( "\nContato%d Digite seu Telefone: ",i+1 ); scanf ( "%d%*c", &agenda[i].fone ); system("cls"); } for ( i = 0; i < N_CONTATOS; i++ ) { printf("Contato%d \nMome: %s \nResidencia: %s \nTel: %d\n\n", i+1, agenda[i].nome, agenda[i].dir, agenda[i].fone); } getchar();} Si tiver duvidas pergunte

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!