Jump to content

LLuciano

Members
  • Posts

    3
  • Joined

  • Last visited

  • Days Won

    1

LLuciano last won the day on September 7 2023

LLuciano had the most liked content!

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

LLuciano's Achievements

3

Reputation

  1. Olha só que legal essa função que achei no livro C Primer Plus, funcionou muito bem. O único "erro" que achei é quando o usuário digita um número válido seguido de espaço e outra coisa (se for outro número o loop conta como várias escolhas). long get_long(void) { long input; char ch; while (scanf("%ld", &input) != 1) { while ((ch = getchar()) != '\n') putchar(ch); // dispose of bad input printf(" is not an integer.\nPlease enter an "); printf("integer value, such as 25, -178, or 3: "); } return input; }
  2. Nossa! Valeu! Era só ter estudado o scanf decentemente! Tinha que ser mais simples que eu estava fazendo.
  3. 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; }
×
×
  • Create New...