Last active
August 3, 2024 00:30
-
-
Save MarcusXavierr/10b7f59a111734b6036d63b266378c3a to your computer and use it in GitHub Desktop.
Criei uma função pra converter strings para inteiro. Tambem fiz uma função main pra ler o input do stdin e multiplicar por 10, caso seja um numero.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <string.h> | |
#include <errno.h> | |
#include <stdlib.h> | |
#include <math.h> | |
// Eu poderia ter simplesmente feito str[i] < '0', mas com ZERO_CHAR é mais cool 😎 | |
#define ZERO_CHAR 48 | |
#define NINE_CHAR 57 | |
int str_to_num(char *str) { | |
// Roda de trás pra frente | |
int result = 0; | |
for (int i = strlen(str) - 1, decimal = 0; i >= 0; --i, decimal++) { | |
// Se começa com '-', faço ser negativo | |
if (str[i] == '-' && i == 0) { | |
result *= -1; | |
break; | |
} | |
// Se não é um char numérico, cai fora e bota um erro ainda | |
if (str[i] < ZERO_CHAR || str[i] > NINE_CHAR) { | |
errno = EINVAL; | |
return -1; | |
} | |
int digit = str[i] - ZERO_CHAR; | |
// Aqui a formula é simples 3 * 10^x. Se for a primeira casa (unidade), o x é 0, então fica 3 * 1 | |
// Se for a terceira casa (centenas), fica 3 * 10^2 = 3 * 100 = 300. Daí eu vou somando no meu número | |
result += digit * pow(10, decimal); | |
} | |
return result; | |
} | |
int main(int argc, char *argv[argc + 1]) { | |
if (argc != 2) { | |
fprintf(stderr, "Preciso de um maldito número, pra multiplicar por 10. É assim que usa\n%s 123\n", argv[0]); | |
return EXIT_FAILURE; | |
} | |
errno = 0; | |
int x = str_to_num(argv[1]); | |
if (errno != 0) { | |
perror("Fudeu"); | |
return EXIT_FAILURE; | |
} | |
printf("%d\n", x * 10); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment