That's until you gave a little work to do, but you're here:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
/*Observacoes:
1, se a ordem nao e decrescente
-1, se a ordem nao e crescente
0, se nao ha ordem
99 se for constante*/
void separarInteiros(int *destino, int tamanho, char *entrada);
int verificaOrdem(int* v, int tamanho);
int main() {
int v[4];
char entrada[100];
fgets(entrada, 100, stdin);
separarInteiros(v, 4, entrada);
int rc = verificaOrdem(v, 4);
printf("\n Retorno da funcao verificaOrdem: %d \n", rc);
return 0;
}
void separarInteiros(int *destino, int tamanho, char *entrada) {
char *resto = entrada;
for (int contador = 0; contador < tamanho; contador++) {
int final = 0;
while (1) {
if (resto[final] == '#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
/*Observacoes:
1, se a ordem nao e decrescente
-1, se a ordem nao e crescente
0, se nao ha ordem
99 se for constante*/
void separarInteiros(int *destino, int tamanho, char *entrada);
int verificaOrdem(int* v, int tamanho);
int main() {
int v[4];
char entrada[100];
fgets(entrada, 100, stdin);
separarInteiros(v, 4, entrada);
int rc = verificaOrdem(v, 4);
printf("\n Retorno da funcao verificaOrdem: %d \n", rc);
return 0;
}
void separarInteiros(int *destino, int tamanho, char *entrada) {
char *resto = entrada;
for (int contador = 0; contador < tamanho; contador++) {
int final = 0;
while (1) {
if (resto[final] == '%pre%' && final == 0) return;
if (resto[final] == ' ' || resto[final] == '%pre%') {
resto[final] = '%pre%';
if (final != 0) destino[contador] = atoi(resto);
resto = &(resto[final + 1]);
if (final != 0) {
final = 0;
break;
}
} else {
final++;
}
}
}
}
int verificaOrdem(int* v, int tamanho) {
bool aumentando = false;
bool diminuindo = false;
for (int i = 0; i < tamanho - 1; ++i) {
if (v[i] > v[i + 1]) diminuindo = true;
if (v[i] < v[i + 1]) aumentando = true;
if (aumentando && diminuindo) return 0;
}
if (aumentando) return 1;
if (diminuindo) return -1;
return 99;
}
' && final == 0) return;
if (resto[final] == ' ' || resto[final] == '%pre%') {
resto[final] = '%pre%';
if (final != 0) destino[contador] = atoi(resto);
resto = &(resto[final + 1]);
if (final != 0) {
final = 0;
break;
}
} else {
final++;
}
}
}
}
int verificaOrdem(int* v, int tamanho) {
bool aumentando = false;
bool diminuindo = false;
for (int i = 0; i < tamanho - 1; ++i) {
if (v[i] > v[i + 1]) diminuindo = true;
if (v[i] < v[i + 1]) aumentando = true;
if (aumentando && diminuindo) return 0;
}
if (aumentando) return 1;
if (diminuindo) return -1;
return 99;
}
To read the entry, I used the fgets
function.
The separarInteiros
function is responsible for making the spell happen. The for
runs from 0 to 3, each iteration to assemble a number. The while
goes through the letters until it finds an empty space, substitutes it with atoi
, isolating a word from the rest of the entry. Then, the verificaOrdem
function is used to convert the word to a number and the analysis follows with the rest of the entry.
There was a bug in your tamanho - 1
function. It ran through items 0 through 3. This means that item 3 would be compared to item 4, which is already outside the array. The solution is to go from 0 to 3 (or in the case of the code I posted, from 0 to %code% ).