Jump to content

No(-)me

Members
  • Content count

    1
  • Joined

  • Last visited

Community Reputation

0 Comum

About No(-)me

  1. OBJETIVO: Ler strings armazenando em campos de uma struct, atendendo à necessidade/interesse de não ler o que resta no buffer na próxima entrada (lendo espaços e quantidade de chars pré definidos) O QUE PESQUISEI: Tudo que pude, tentei( E TESTEI!) várias formatações com scanf, li e entendi o que fui capaz (lendo em todo lugar) sobre sscanf, fgets, estruturas de repetição recebendo strings de char em char, função criada para o último método citado, setbuf, setvbuf, bufsize e muito mais acredite, vou até passar na biblioteca estadual amanhã para ver se tem algum livro de C e pesquisar mais. (ISTO SÓ PRA DEIXAR CLARO PRA COMUNIDADE que não sou preguiçoso visto que essa é minha primeira pergunta num fórum na história - todo e qualquer tipo de fórum - porque existe uma pressão muito grande sobre fazer perguntas num fórum de programação em especial) Até que achei um jeito sem ser o famigerado fflush, o rewind (stdin)... *Reafirmo! Estou ciente de getchar em estrutura de repetição ou fgets por exemplo, mas só estou aqui porque não me foi útil.* AFINAL qual o problema de usar a função rewind para o fluxo stdin? Claro, é mais usual para chamar ponteiro de arquivo em leitura, mas isso é motivo suficiente para ser ruim usar em stdin? Qual o problema real de se aplicar no fluxo stdin? Não é portável? Achei até uma doc da microsoft indicando para isto: https://docs.microsoft.com/pt-br/cpp/c-runtime-library/reference/rewind?view=vs-2019 em que há "...Para limpar o buffer de teclado, use rewind com o fluxo stdin, que está associado com o teclado por padrão...". Vi reprovação por meio de usuários de outros fóruns nos quais achei perguntas parecidas como esta mas não achei as explicações de como isto ser ruim muito convincentes (um pouco presunçoso ou dedutivo da minha parte por ser um mero iniciante). O que acham? Eu só tenho 3 meses que conheço a programação em geral. SITUAÇÃO ATUAL: Olha, já que isto é para um trabalho de ADS EAD em que a faculdade ensina com 'fflush stdin' sem problemas, e já que ainda não achei alternativa também totalmente resoluta e confiável, está assim com o fflush stdin GENTE DESCULPE QUALQUER INCONVENIENTE. #include <stdio.h> #include <stdlib.h> #include <locale.h> typedef struct cadastro{ char nLivro[31]; char nAutores[31]; char nEditora[31]; int cod; }livro; int main(){ setlocale (LC_ALL, ""); livro estante[4]; int op, i, j; i = 1; j = 1; do { printf ("\t> Menu <\n\n1 - > Efetua um novo cadastro\n\n2 - > Visualiza todos cadastros\n\n0 - > Sai do menu\n\n"); scanf ("%1d%*c", &op); fflush (stdin); switch (op){ case 1 :if (i < 6){ printf ("\t> Efetua um novo cadastro\n\n> Nome da obra: "); scanf ("%30[^\n]", estante[i-1].nLivro);//não é necessário 's' nesta ocasião. printf ("\n> Autor(es): "); fflush (stdin);//ou rewind(stdin). scanf ("%30[^\n]", estante[i-1].nAutores); fflush (stdin); printf ("\n> Editora: "); scanf ("%30[^\n]", estante[i-1].nEditora); fflush (stdin); printf ("\n\n\t>Cadastro bem sucedido!"); estante[i-1].cod = i; i++; }else { printf ("Cadastro lotado!"); }......(vergonha do código)
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.