princknoby
Membros-
Total de itens
32 -
Registro em
-
Última visita
princknoby's Achievements
0
Reputação
-
Alface começou a seguir princknoby
-
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; }
-
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
-
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.
-
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 😄
-
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 ><
-
@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 😄
-
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 😄
-
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; }
-
Programa que leia valores inteiros e identifique números repetidos
pergunta respondeu ao Elvio Brosovitzki de princknoby em C, C++
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? -
@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
-
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??
-
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! 😄
-
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_
-
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.
-
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; }