CalistoW
(usa Debian)
Enviado em 14/09/2019 - 18:46h
Não entendi muito bem seu enigma, mas..
pelo que vc fez, me pareceu que quer receber 5 vetores
aloca-los dentro de um vetor **
depois pesquisar esse vetor em busca de espaços ( acho que seria mais legal, deixar o usuario escolher o char )
quando achar os espaços preencher ele trocando com o char
da opcao selecionada
assim como você, vou apenas disponinbilizar o codigo e você ira buscar entende-lo
Fiz algumas mudanças no seu codigo, que ao meu ver foi basico para rodar ele.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char** m;
char**
ler()
{
int i;
m = malloc(100);
for (int i = 0; i < 5; i++) {
m[i] = malloc(20);
}
for (i = 0; i < 5; i++) {
printf("entrada pos %i: ", i);
fgets(m[i], 20, stdin);
}
return m;
}
char**
printar(char** m)
{
int i;
printf("\n");
for (i = 0; i < 5; ++i) {
for (int j = 0; j < strlen(m[i]); ++j) {
printf(" %c", m[i][j]);
}
printf("\n");
}
return m;
}
int* achar(char** m, int* a)
{ //achei espaC'o
for (int i = 0; i < 5; i++) {
for (int j = 0; j < sizeof(m[i]); j++) {
if (m[i][j] == ' ') {
a[0] = i;
a[1] = j;
printf("\n\nPosicao encontrada %i %i\n", i, j);
return a;
}
}
}
printf("\n\nNão encontrei nenhum espaço\n");
}
void trocar(int comando, char** m, int* a)
{
char change;
if (comando == 'A') { //cima
m[a[0]][a[1]] = m[a[0]][a[1]];
change = m[a[0] - 1][a[1]];
m[a[0]][a[1]] = change;
}
else if (comando == 'R') { //direita
change = m[a[0]][a[1] + 1];
m[a[0]][a[1]] = m[a[0]][a[1]];
m[a[0]][a[1]] = change;
}
else if (comando == 'B') { //baixo
change = m[a[0] + 1][a[1]];
m[a[0] + 1][a[1]] = m[a[0]][a[1]];
m[a[0]][a[1]] = change;
}
else if (comando == 'L') { //esquerda
change = m[a[0]][a[0] - 1];
m[a[0]][a[1]] = m[a[0]][a[1]];
m[a[0]][a[1]] = change;
}
}
void comandos(char** m)
{
char op[] = "";
int a[2];
printf("opcao:");
fgets(op, 2, stdin);
achar(m, a);
printf("\nposicoes [a][b]: %i %i\n\n", a[0], a[1]);
trocar(op[0], m, a);
}
int main()
{
char** m = ler();
comandos(m);
printar(m);
for (int i = 0; i < 5; i++) {
free(m[i]);
}
free(m);
return 0;
}
Ainda tem o que arrumar, mas está funcional.