Skip to content

Instantly share code, notes, and snippets.

@MarcusXavierr
Last active August 3, 2024 00:30
Show Gist options
  • Save MarcusXavierr/10b7f59a111734b6036d63b266378c3a to your computer and use it in GitHub Desktop.
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.
#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