Ir para conteúdo
Fórum Script Brasil

princknoby

Membros
  • Total de itens

    32
  • Registro em

  • Última visita

1 Seguidor

Sobre princknoby

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

princknoby's Achievements

0

Reputação

  1. Recomendo tentar fazer.. Mas tá ai, tente aprender cara, é simples. Primeiro exercício: #include <stdio.h> void limpar () { int ch; while ((ch=fgetc(stdin) != '\n' && ch != EOF)); } void pausar () { printf ("\nPress [ENTER] to exit . . ."); scanf ("%*c"); } int main () { int x, y, i; printf ("Digite um valor: "); scanf ("%d", &x); limpar (); printf ("Digite outro valor: "); scanf ("%d", &y); limpar (); for (i = 0; i <= 1; i++) { if (x == y) { printf ("Os valores são iguais! Tente novamente!\n"); printf ("Digite um valor: "); scanf ("%d", &x); limpar (); printf ("Digite outro valor: "); scanf ("%d", &y); limpar (); i = 0; } else i++; } if (x > y) printf ("\nO maior valor é: %d\n", x); else printf ("\nO maior valor é: %d\n", y); pausar (); return 0; } Segundo exercício: #include <stdio.h> void limpar () { int ch; while ((ch=fgetc(stdin) != '\n' && ch != EOF)); } void pausar () { printf ("\nPress [ENTER] to exit . . ."); scanf ("%*c"); } int main () { int ano, res; printf ("Digite o ano de nascimento: "); scanf ("%d", &ano); limpar (); res=2019 - ano; printf ("\nIdade dessa pessoa: %d\n", res); if (res >= 16) //a partir de 16 já pode votar printf ("\nPortanto, essa pessoa pode votar!\n"); else printf ("\nPortanto, essa pessoa não pode votar!\n"); pausar (); return 0; } Último exercício: #include <stdio.h> void limpar () { int ch; while ((ch=fgetc(stdin) != '\n' && ch != EOF)); } void pausar () { printf ("\nPress [ENTER] to exit . . ."); scanf ("%*c"); } int main () { int senha; printf ("Digite a senha: "); scanf ("%d", &senha); limpar (); if (senha == 1234) printf ("ACESSO PERMITIDO"); else printf ("ACESSO NEGADO"); pausar (); return 0; }
  2. Obrigado @Nefisto ajudou bastante, confesso que fiquei um pouco perdido no seu primeiro código, vou salvar ele aqui, e dar uma estudada nele rsrs, a respeito de criar a função atoi, mesmo com seu exemplo não faço ideia de como fazer isso. Baixei uma apostila de C: http://www2.dcc.ufmg.br/disciplinas/pc/source/introducao_c_renatocm_deeufmg.pdf e percebi que não estou tão bom assim em coisas básicas, percebi isso, após ver alguns exemplos na apostila, que eu deveria saber, de coisas básicas, e que eu não estava sabendo, a apostila está me acrescentando muitas coisas que eu não sabia. Vou continuar estudando ela, e estudando esse seu códio. Esse seu último código me ajudou bastante, estava faltando um '&' no meu código, ai declarei os inteiros como arrays, e deu certo. Só uma coisa que me deixou encabulado rsrs Eu fiz da seguinte forma: //converter dia tipo 'string' para dia tipo 'int' for (i = 0; i < 2; i++) /*dia está em [0] e [1], então devemos percorrer apenas essas posições*/ { dia[i]=atoi(&data[i]); } //receber mes for (i = 3; i < 5; i++) { /*mes esta nas posições [3] e [4] */ mes[i]=atoi(&data[i]); } //receber ano for (i = 6; i < 10; i++) /*ano esta em [6][7][8][9]*/ { ano[i]=atoi(&data[i]); } Ao fazer esse código, eu imaginei que em cada posição das variáveis, como ex: O array 'dia' a cada laço, ele iria armazenar na posição do array, o que tava na posição da string. Foi isso que pensei inicialmente... Mas quando fui imprimir as saídas, tentei imprimir o vetor inteiro, usando '%ls' porém apareceu foi outras coisas, ai pensei "hmmm... achou que vou ter que imprimir posição por posição" Tá, fiz: printf ("%d%d", dia[0], dia[1]); Mas pra mim surpresa, em cada posição de dia, já estava o dia todo: Ex dia era 23 >> imaginei que o '2' estaria em [0] e o 3 em [1], mas não, em dia[0], já tava o número 23 todo... Então acabou que quando fiz: printf ("%d", dia[0]); eu imprimi o dia todo, os dois caracteres... Isso me deixou confuso, já que quando eu estudava vetores, cada número ficava em uma posição, e até quando imprimo uma string caracter por caracter, cada caracter está em uma posição... Meu código tá bem poluído em comparação ao seu, mas deixarei aqui. Muito obrigado 😄 " Ri demais aqui kkkkkkkkkkkkkkkkkkkkkkkkkkkk você está corretissimo, concordo com você, mas eu fico literalmente louco, quando aparece algum exercício, mesmo que seja desse tipo, e eu não consigo fazer... Ai eu acabo fazendo kkkkkk Eu realmente tetei entender essa função, mas ainda não consegui. E olhando pro restante do seu código, percebi que eu poderia ter feito algumas coisas diferentes no meu, que deixariam ele mais "enxuto". Mas deixo aqui o meu código gigantesco rsrs: #include <stdio.h> #include <stdlib.h> #include <string.h> void limpar () { int ch; while ((ch=fgetc(stdin)) != '\n' && ch != EOF); } /*você me passou outra função pra limpar o buffer, eu deixei essa um pouco mais parecida com a sua*/ /*ela continua não sendo recomendada?*/ /*essa questão de limpar o buffer, é outra coisa que buga minha mente rsrs*/ void pausar () { printf ("\nPress [ENTER] to quit..."); scanf ("%*c"); } int main () { char data[100]; int dia[10], mes[10], ano[10], i, cont=0, TAM=1; printf ("Digite a data: "); scanf ("%99[^\n]", data); limpar (); //vamos analisar se as datas são numeros for (i = 0; i < TAM; i++) {/*vamos repetir esse laço sempre que entrar em algum lugar!*/ while (data[0] < 48 || data[0] > 57) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao dia não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[1] > 57 || data[1] < 48) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao dia não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } if (cont != 0) {//significa que ele leu algo errado, e vamos checar de novo por via de duvidas TAM++; cont=0; } else break; } //-------------------------------------------------------------------------- //mes for (i = 0; i < TAM; i++) {/*vamos repetir esse laço sempre que entrar em algum lugar!*/ while (data[3] < 48 || data[3] > 57) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao mes não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[4] > 57 || data[4] < 48) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao mes não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } if (cont != 0) {//significa que ele leu algo errado, e vamos checar de novo por via de duvidas TAM++; cont=0; } else break; } //-------------------------------------------------------------------------- //ano for (i = 0; i < TAM; i++) {/*vamos repetir esse laço sempre que entrar em algum lugar!*/ while (data[6] < 48 || data[6] > 57) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao ano não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[7] > 57 || data[7] < 48) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao ano não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[8] > 57 || data[8] < 48) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao ano não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[9] > 57 || data[9] < 48) { printf ("\nAtual data digitada: %s \n", data); printf ("\nO valor que voce digitou referente ao ano não é numérico!\n"); printf ("Por favor , digite a data toda (DD/MM/AAAA novamente: "); scanf ("%99[^\n]", data); limpar (); cont++; } if (cont != 0) {//significa que ele leu algo errado, e vamos checar de novo por via de duvidas TAM++; cont=0; } else break; } //-------------------------------------------------------------------------- //vamos verificar as posições das barras //devem ter barras nas posições [2] e [5] for (i = 0; i < TAM; i++) {/*vamos repetir esse laço sempre que entrar em algum lugar!*/ while (data[2] != '/') { printf ("\nAtual data digitada: %s \n", data); printf ("\nOnde voce digitou '%c' deve ser barra!", data[2]); printf ("Por favor, digite a data INTEIRA novamente no formato DD/MM/AAAA: "); scanf ("%99[^\n]", data); limpar (); cont++; } while (data[5] != '/') { printf ("\nAtual data digitada: %s \n", data); printf ("\nOnde voce digitou '%c' deve ser barra!", data[5]); printf ("Por favor, digite a data INTEIRA novamente no formato DD/MM/AAAA: "); scanf ("%99[^\n]", data); limpar (); cont++; } if (cont != 0) {//significa que ele leu algo errado, e vamos checar de novo por via de duvidas TAM++; cont=0; } else break; } //converter dia tipo 'string' para dia tipo 'int' for (i = 0; i < 2; i++) /*dia está em [0] e [1], então devemos percorrer apenas essas posições*/ { dia[i]=atoi(&data[i]); } //receber mes for (i = 3; i < 5; i++) { /*mes esta nas posições [3] e [4] */ mes[i]=atoi(&data[i]); } //receber ano for (i = 6; i < 10; i++) /*ano esta em [6][7][8][9]*/ { ano[i]=atoi(&data[i]); } //até que enfim chegamos ao final do programa! //vamos imprimir a data: DD/MM/AAAA printf ("\nDIA:%d", dia[0]); printf ("\nBARRA:%c", data[2]); printf ("\nMES:%d", mes[3]); printf ("\nBARRA:%c", data[5]); printf ("\nANO:%d\n", ano[6]); pausar (); return 0; } Obrigado mais uma vez @Nefisto
  3. Olá a todos, acho que vou poluir esse fórum de tantos pedidos de ajuda kkkkkkkk Estou fazendo o seguinte exercício de strings: Leia uma cadeia de caracteres no formato “DD/MM/AAAA” e copie o dia, mês e ano para 3 variáveis inteiras. Antes disso, verifique se as barras estão no lugar certo, e se DD, MM, e AAAA são numéricos. Caso algum deles não seja, ou alguma barra estiver fora do lugar ou faltando, informe para o usuário qual foi o erro e peça para repetir a operação. Faça isso até que ele forneça os dados corretamente. Consegui fazer, ficou extremamente grande, mas consegui kkkk Estou com apenas um problema... "...Copie dia, mes e ano para 3 variáveis inteiras) Fui pesquisar e descobri a função atoi do cabeçalho <stdlib.h> Porém eu preciso copiar as posições específicas da string, para os inteiros. Eu tentei fazer da seguinte forma: //converter dia tipo 'string' para dia tipo 'int' for (i = 0; i < 2; i++) /*dia está em [0] e [1], então devemos percorrer apenas essas posições*/ { dia=atoi(data); } //receber mes for (i = 3; i < 5; i++) { /*mes esta nas posições [3] e [4] */ mes=atoi(data); } //receber ano for (i = 6; i < 10; i++) /*ano esta em [6][7][8][9]*/ { ano=atoi(data); } Porém dessa forma, todas as saídas (dia, ano e mes) estão recebendo o mesmo valor! Estão recebendo todas, o valor da posição [0] e [1]. E quando tento fazer como arrays: ano[i]=atoi(data[i]) da erro, e o compilador me da alguns avisos sobre ponteiros, mas eu ainda não aprendi ponteiros. OBS: não postei o código todo, porque está muito grande, mas caso seja necessário, só pedir que eu mando.
  4. Cara!!!!! Incrível, aprendi MUITAS coisas com esse seu código. Ah que fiquei mais "chocado" foi declarar uma variável e depois chamar ela de posição, e atribuir posições a ela, e na hora de imprimir, imprimir essa variável que na verdade é uma posição!!!!!!!!!!!!!!!!!!!!!!!!! Aqui: int velho=0, novo=0; ..... if ( idade[i] < idade[novo]) {novo=i}//A variavel vai receber uma posição!!! ..... printf (".....%s %d", idade[novo], nome[novo]); //E eu vou poder imprimir ela aqui!!! Fiquei chocado kkkkkkk e um pouco triste por nunca ter conseguido pensar isso antes kkkkk Obrigado pelo código de limpeza, eu comecei a me interessar por isso quando comecei a usar o linux para programar, e queria pausar o programa, e acabei recebendo dicas aqui no fórum mesmo de qual função usar, segue o link: Sobre limitar o scanf aprendi aqui também rsrs link: Seu código me ajudou muito!!!! Tentei fazer um em paralelo ao seu, até usei as mesmas variáveis, só mudei, que se digitar um negativo, ele sai do programa, olha o código ai: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PESSOAS 3 #define MAX_NOME 100 #define limpar do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) void pausar () { printf ("\nPress [ENTER] to quit..."); scanf ("%*c"); } int main () { char nome[MAX_PESSOAS][MAX_NOME]; int idade[MAX_PESSOAS]; int i, velho=0, novo=0; for (i = 0; i < MAX_PESSOAS; i++) { printf ("%d(o) nome: ", i+1); scanf ("%99[^\n]", nome[i]); limpar; printf ("Idade de '%s': ", nome[i]); scanf ("%d", &idade[i]); limpar; if (idade[i] < 0) { printf ("\nEssa idade é inválida!"); printf ("\nSaindo do programa!\n"); pausar (); exit (0); } } for (i = 0; i < MAX_PESSOAS; i++) { if (idade[i] < idade[novo]) { //achar o mais novo novo=i; } if (idade[i] > idade[velho]) { velho=i; } } printf ("\nA pessoa mais velha é: %s com %d anos!\n", nome[velho], idade[velho]); printf ("\nA pessoa mais nova é: %s com %d anos!\n", nome[novo], idade[novo]); pausar (); return 0; } OBS: limitei o MAX_PESSOAS em 3 porque como ainda estou tentando compreender ao máximo, usar o valor 10 daria iria gastar mai tempo pra quando eu fosse executar o programa pra ver se esta funcionando, digitar 3 nomes e idades é bem mais rápido que 10 kkkkkk Enfim... Você me ajudou MUITO com esse código, aprendi muitas coisas até o momento, e sei que ainda tem muita coisa ai que preciso aprender rsrs Vamos ver se agora o programa sai rsrs Obrigado irmão 😄 ___________________________________________________________________________________ EDIT: Acho que agora o programa saiu rsrs Como ele pediu >> A's' mais velhas e mais novas, imaginei que quisesse que fizesse uma média de idade, e as pessoas acima da média seriam as mais velhas, e as abaixo da média seriam as mais novas. Então partindo disso (espero não estar errado na interpretação do exercício), fiz o seguinte código com a ajuda do @Nefisto : CÓDIGO: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PESSOAS 3 #define MAX_NOME 100 #define limpar do{ int c; while((c = getchar()) != '\n' && c != EOF);}while(0) void pausar () { printf ("\nPress [ENTER] to quit..."); scanf ("%*c"); } int main () { char nome[MAX_PESSOAS][MAX_NOME]; int idade[MAX_PESSOAS]; int i, velho=0, novo=0, soma=0, media; for (i = 0; i < MAX_PESSOAS; i++) { printf ("%d(o) nome: ", i+1); scanf ("%99[^\n]", nome[i]); limpar; printf ("Idade de '%s': ", nome[i]); scanf ("%d", &idade[i]); limpar; soma=soma+idade[i]; if (idade[i] < 0) { printf ("\nEssa idade é inválida!"); printf ("\nSaindo do programa!\n"); pausar (); exit (0); } } //fazer a media de idades media=soma/MAX_PESSOAS; //achar as pessoas mais velhas /*ACIMA DA MEDIA É AS MAIS VELHAS, ABAIXO DA MEDIA AS MAIS NOVAS*/ printf ("\n*********************\n"); printf ("*PESSOAS MAIS VELHAS*\n"); printf ("*********************\n"); for (i = 0; i < MAX_PESSOAS; i++) { if (idade[i] > media) { printf ("Nome: %s - Idade: %d\n", nome[i], idade[i]); } } //achar pessoas mais novas printf ("\n********************\n"); printf ("*PESSOAS MAIS NOVAS*\n"); printf ("********************\n"); for (i = 0; i < MAX_PESSOAS; i++) { if (idade[i] < media) { printf ("Nome %s - Idade: %d\n", nome[i], idade[i]); } } pausar (); return 0; } OBS: ainda estou lendo apenas 3 pessoas. Obrigado @Nefisto 😄
  5. Olá a todos mais uma vez rsrs (as dúvidas são muitas). Iniciei o estudo de string a um tempinho atrás, mas estava com bastante dificuldade, então resolvi voltar o conteúdo um pouco, e agora estou novamente em strings (as coisas estão um pouco mais claras agora). Estava fazendo uma lista de exercícios, e estava indo tudo MUITO bem, mas de repente, surgiu um exercício que quebrou minha cabeça, passei horas tentando fazer, e pesquisando, mas ainda não consegui. O exercício é o seguinte: Escreva um programa que leia a idade e o primeiro nome de 10 pessoas. Seu programa deve terminar quando uma idade negativa for digitada. Ao terminar, seu programa deve escrever o nome e a idade das pessoas mais jovens e mais velhas. Eu tentei fazer, mas não consegui, então tentei "deixar o exercício mais fácil" pra que talvez ficasse mais fácil de entender. Então o que tentei fazer foi, ler os 10 nos e as 10 idades, e apresentar apenas o nome e idade da pessoa mais velha, consegui entender como fazer, mas pra satisfazer o exercício isso não serve, e eu ainda continuo sem saber como fazer o exercício. O meu código: #include <stdio.h> #include <string.h> void limpar () { int ch=fgetc(stdin); while (ch != EOF && ch != '\n'); } void pausar () { printf ("\nPress [ENTER] to quit..."); scanf ("%*c"); } int main () { char nome[100], nomem[100]; int i, idade[100], mid=0; for (i = 0; i < 5; i++) { printf ("Nome: "); scanf ("%99[^\n]", nome); limpar (); printf ("Idade %s: ", nome); scanf ("%d", &idade[i]); limpar (); if (idade[i] > mid) { mid=idade[i]; strcpy(nomem, nome); } } printf ("\nPessoa mais velha: %s\n", nomem); printf ("Idade dessa pessoa: %d\n", mid); pausar (); return 0; } A única coisa que eu consigo pensar pra resolver, é armazenar os nomes em posições assim como eu vazia com vetores: scanf ("%d", &vetor[i]); //no caso de vetor Mas no caso de strings não faço ideia de como fazer isso, e por isso fiz o 'if' a cada laço, porque cada vez que eu fazia o laço, eu perdia o nome digitado... Então eu já fiz o laço, e fui armazenando o nome da pessoa mais velha, em outra string, já que não consegui fazer um for comparando algo do tipo >> if (idade[i] > pessoa_mais_velha) { pessoa_mais_velha=idade[i]; nome_pessoa_mais_velha=nome[i];//nome[i] >> nome na posição da idade da mais velha, mas isso não dá certo 😞 } Enfim, não sei pra onde vu, alguém poderia por favor me dar uma ajuda? Obrigado Strings ainda estão sendo bem confusas pra mim ><
  6. princknoby

    EOF, '\0' e '\n'

    @Nefisto Muito obrigado pela explicação, e perdoe-me a ignorância rsrs, sou beeemmm iniciante ainda e ainda não entendi muito bem todos os conceitos, por isso essas dúvidas meio bobas kkkk Mas a sua explicação foi perfeita, consegue entender bem, muito obrigado pela ajuda 😄 Quanto ao nosso colega, capaz que foi pra mim o emoticon kkkk por ser uma pergunta que agora vi com clareza bem "idiota" kkkk Muito obrigado pela disposição 😄
  7. Olá a todos, gostaria de tirar um dúvida... Existe alguma diferença entre usar EOF, '\0' e '\n' ?? Por exemplo, na hora de ler uma string, usar um: for (int i = 0; string != '\0'; i++) {code...} seria diferente de usar: for (int i = 0; string[i] != EOF; i++) {code...} ou também usar: for (int i = 0; string[i] != '\n'){code...} Desde já, obrigado 😄
  8. Creio que dê pra entender com os comentários. Caso tenha dúvida em alguma parte, posta ai 🙂 Tenta entender o código, mesmo que o prazo do exercício tenha terminado, é importante entender essas 'coisinhas' rsrs Estamos aqui pra ajudar 😄 Mas lembre-se, você não irá aprender se só copiar e colar o código, rode o código, analise as saídas, veja o que eu fiz que o programa recebeu essas saídas, entenda o raciocínio por atrás. Em seguida, feche o código, e tente fazer sozinho. Eu sempre tive mais facilidade em aprender vendo o código dos outros, e o que eles fizeram, do que ler instruções e raciocínios, consigo visualizar muito 'melhor' quando estou com o código em mãos, vendo ele trabalhar... Enfim, cada pessoa tem mais facilidade de aprender de um jeito, o meu jeito é esse, "ver a coisa toda acontecendo". Código: #include <stdio.h> #include <stdlib.h> int main () { int x, i, soma =0; printf ("Digite um valor: "); scanf ("%d", &x); //Recebe o numero limpar (); if (x > 1) //verifica a condição que você postou 'se x > 1...' { for (i = 1; i <= x; i++) //percorre os valores de '1 a x' { if (i%5==0)//se o numero 'i' for divisivel por 5, entra no bloco { printf ("Multiplo de 5 -> %d\n", i);//imprimi o valor soma=soma+i;//soma o valor } } printf ("\nE a soma desses valores é = %d\n", soma);//imprimi o resultado da soma } else //caso a condição 'x > 1' não seja satisfeita.. 'else' é a negação da condição do 'if' { printf ("\nERRO!\nValor invalido!\n"); //Pode escrever a mensagem que quiser aqui } system pause (); return 0; }
  9. E ai tranquilo? Esse programa é bem fácil de fazer continuar tendo números repetidos, mesmo pedindo pro usuário digitar outro. Então se a proposta do exercício for APENAS pedir pra digitar outro valor, caso a pessoa tenha digitado valores repetidos, esse código aqui deve funcionar: CÓDIGO: #include <stdio.h> #define TAM 5 void limpar () { int ch = fgetc(stdin); while (ch != EOF && ch != '\n'); } void pausar () { printf ("\nPess [ENTER] to continue . . ."); getchar(); } int main () { int v[TAM], i, x, aux; for (i = 0; i < TAM; i++) { printf ("Valor = "); scanf ("%d", &v[i]); limpar(); } //Percorrer o vetor para achar numeros repetidos for (i = 0; i < TAM; i++) { for (x = i + 1; x < TAM; x++) { while (v[i] == v[x]) //use 'while' se quiser que a pessoa digite um valor diferente do que se repetiu //por exemplo se o o valor '1' se repete, e voce estiver usando 'if' a pessoa pode digitar 1 dnv //já com o while isso não acontece { printf ("\nO valor %d esta se repetindo!\n", v[i]); printf ("Por favor, digite outro valor: "); scanf ("%d", &v[i]); limpar(); } } } //VETOR GERADO SEM NENHUM NUMERO REPETIDO printf ("\nNovo vetor:\n"); for (i = 0; i < TAM; i++) { printf ("%d\n", v[i]); } printf ("\n"); pausar (); return 0; } OBS: Esse código permite que o vetor continue tendo valores repetidos! Ele apenas realiza a proposta do exercício de pedir outro valor, mas o usuário pode facilmente fazer com que continue tendo valores repetidos! Entenda esse código! Se só copiar colar e entregar e não tentar entender, você não irá aprender! Então gaste alguns minutos tentando entender, caso não entenda alguma parte, poste ela aqui, que eu tento te explicar melhor, ok?
  10. @giu_d_ Não sei nem como te agradecer, obrigado por ter tirado o seu tempo pra me passar todas essas informações. Com sinceridade, a primeira vez que li as funções que me mandou, foi bem confuso mesmo, fiquei totalmente perdido e sem entender o que a função estava fazendo, só sabia qual seria o final, então aceitei o final e comecei a usá-las, e também comecei a ler sobre elas na internet. Ainda não entendi perfeitamente, mas agora estão bem mais claras pra mim, perto da primeira vez em que li o código, ainda mais agora depois das suas explicações. Muito obrigado! :D
  11. Ei @giu_d_ acho que só agora entendi o motivo de você ter me recomendado chamar a função de limpeza após os scanf's Sou bem iniciante, mas voltei ainda mais ao inicio pra tentar entender, fazendo programas ainda mais simples. Eu passei a criar as funções separadas, uma pra limpeza, outra pra pausar, ai no caso, eu só chamo a função de limpeza caso meu programa tenha scanf, se não tiver é só não chamar, pois significa que o buffer estaria limpo, e ai só chamaria a função de pausa do console, ao final do programa. Seria isso??
  12. Olá @giu_d_ me perdoe se eu soar abusado em te pedir ajuda mais uma vez... Mas me deparei com uma situação que não consegui encontrar nada na internet. A função que você me ensinou está me servindo muito bem! Mas me deparei com a seguinte situação: E quando não houver nada no buffer para ser 'consumido' ou 'limpo'? Como por exemplo nesse programa: Código: #include <stdio.h> #define TAM 10 void pausar () { int ch; while((ch = fgetc(stdin)) != EOF && ch != '\n'); printf ("\nPress any key to continue . . ."); scanf("%*c");//não PRECISO LIMPAR O BUFFER porque O USUARIO não VAI DIGITAR NADA } int main () { int m[TAM][TAM], i, j; for (i = 0; i < TAM; i++) { for (j = 0; j < TAM; j++) { if (i < j) { m[i][j] = 2*i + 7*j -2;//2i + 7j − 2 se i < j } else if (i == j) { m[i][j] = 3*(i*i) - 1; //3i² − 1 se i = j; } else if(i > j) { m[i][j] = 4*(i*i*i) - 5*(j*j) + 1; //4i³ − 5j 2 + 1 se i > j } } } printf ("\nMATRIZ:\n"); for(i = 0; i < TAM; i++) { for (j = 0; j < TAM; j++) { printf ("%d\t", m[i][j]); } printf ("\n"); } pausar (); return 0; } Ao termino desse programa eu estou tendo que pressionar alguma tecla, creio eu que para preencher o buffer com algo para ser limpo.. Como fica essa situação? Ante de escrever o código eu devo sabe se vou ter algo pra precisar limpar? Ou existe alguma forma de verificar se existe algo para ser limpo, e se não existir avançar para próxima etapa, que seria a 'pausa' do programa? Mais uma vez, muito obrigado! 😄
  13. Caramba, muito obrigado pelo conteúdo. A segunda função pra limpar o buffer ( fflush_stdin() ) funcionou perfeita aqui! Agora é estudar pra entender direitinho o que ela faz...como ela trabalha 😄 Obrigado pelo link da aula também, irei assistir. Até mais @giu_d_
  14. Achei algo interessante pesquisando ainda mais um pouco... Achei uma forma de limpar o buffer que não consegui achar muitas críticas contra.. Coloquei o comando setbuf(stdin,NULL) antes do getchar(); e ai eu consegui usar apenas um getchar(); e rodou tudo certo. Esse comando setbuf(stdin,NULL) é recomendado? Depois das coisas que li na gringa criticando o system("pause") fiquei até traumatizado, a rapaziada lá criticou de tudo que eu conheço kkkk Então acabou que era tudo que agora to ficando com o pé atrás com todos esses comandos. Seria essa uma solução viável e segura? Obrigado.
  15. princknoby

    vetor 5

    Mano, eu não entendi nadinha do que precisa ser feito... Você quer imprimir TODOS os números entre 000000 e 1? Se for isso, você tem uma PORRADA de numero, se for realmente isso, eu fiz aqui e criei um contador pra ver quantos números deu, to com um pouco de sono então não to pensando direito, então talvez o programa possa estar contando errado kkkkk mas me deu que leu 1000001.000000 de números!!! Você tem certeza que é pra armazenar isso em um vetor, se for isso, você vai precisar de um vetor de tamanho 1000001.000000 !!! Eu fiz apenas essa parte do programa, a parte do vetor e a parte de tirar os números repetidos, eu realmente não consegui entender o que é pra fazer... Talvez porque eu esteja bem cansado mesmo Mas segue ai o código da parte do programa que eu fiz (caso seja isso que é pra fazer, caso não seja, apenas peço desculpas) CÓDIGO: #include <stdio.h> void pause () { printf ("Pressione a tecla [ENTER] para continuar . . ."); setbuf(stdin,NULL); getchar(); } int main () { double i, q=0; for (i = 0; i < 1.000001; i=i+0.000001) { printf ("%f\n", i); q++; } printf ("\nImprimiu %f numeros!\n", q); pause(); return 0; }
×
×
  • Criar Novo...