Ir para conteúdo

LLuciano

Membros
  • Postagens

    2
  • Registro em

  • Última visita

  • Dias Ganhos

    1

LLuciano venceu a última vez em Setembro 7 2023

LLuciano tinha o conteúdo mais apreciado!

Conquistas de LLuciano

1

Reputação

  1. Nossa! Valeu! Era só ter estudado o scanf decentemente! Tinha que ser mais simples que eu estava fazendo.
  2. Olá pessoal! Estou estudando C sozinho. Em vários exercícios tem a necessidade de criar uma espécie de menu com opções. Mas, considerando o que eu aprendi até agora, é muito fácil de dar um erro caso o usuário digite algo errado, como por exemplo uma letra quando eu esperava um inteiro. Isso me dá uma angustia, ficar fazendo exercício cujo o programa pode ser facilmente quebrado. Eu procurei uma função na biblioteca padrão para isso mas não encontrei, então tentei fazer eu mesmo uma solução. Eis as dúvidas: 1 - Existe alguma função que já implementa isso? 2 - O código que desenvolvi está funcionando... mas parece que estou com a mente viciada.Fico com a impressão de que poderia ser mais simples mas não consigo fazer melhor. Alguém tem alguma sugestão? (Fiz somente considerando opções numéricas, não alfabéticas, ou com palavras) Eis o código: #include <stdio.h> #include <ctype.h> int menuNumberCheck (void); int main(void){ int choice = 0; do { printf("%s", "Digite um número de 0 a 10 ou digite 11 para finalizar: "); choice = menuNumberCheck(); if (choice < 0 || choice > 11){ puts("Opção inválida"); } else printf("Você escolheu a opção %d\n", choice); } while (choice != 11); puts("Programa finalizado"); return 0; } int menuNumberCheck (void){ int check = 1; char c; int number = 0; int loopcount = 0; while ((c = getchar()) != '\n'){ if (isdigit(c) && check == 1){ //check multpiplication overflow: //se verdadeiro é que vai ocorrer overflow e retornar erro. //multiplica o dígito pode 10 para encontrar a posição (unidade, dezena e etc); if (__builtin_smul_overflow(number, 10, &number)) { puts("Overflow"); check = 0; //check sum overflow //soma o digito encontrado na unidade //se verdadeido é que vai ocorrer overflow e retornar erro. // c-48 para encontrar o número na tabela ANSCI-I } else if (__builtin_sadd_overflow(number, c-48, &number)) { puts("Overflow"); check = 0; } else loopcount++; } else check = 0;//falso se encontrar algum caracter não numérico. } if (check == 0 || loopcount == 0){ return -1; } else return number; }
×
×
  • Criar Novo...