( C ) - Programa (na descrição) não está funcionando como deveria! Onde está o erro?

2 respostas
Neviat

Esse programa deveria pegar uma string e imprimi-la de trás pra frente, mas quando eu digito a string depois de executa-lo no cmd, ele para de funcionar! =(

#include <stdio.h>
#include <stdlib.h>
int main() {
    char st[100];  // string antes
    char std[100];  // string depois
    int cont = 0, numb = 0;
    printf("Texto para converter: \n");
    gets(st);
    for (int a = 99; a >= 0; --a) {  // varrendo string do 99 ao 0
        if (st[a] == '\0') {  // quando encontrar o \0, ele muda o cont para 1
            cont = 1;
            a--; // e diminui mais 1 do a
        }
        if (cont == 1) {  // para que esse if funcione somente com os caracteres antes do \0
            std[numb] = st[a];  // atribui o valor de st a std
            numb++;
        }
    }
    std[numb] = '\0';  // por último atribui o valor \0 ao último espaço depois da ultima letra
    printf("\n\nTexto: %s", std); // imprime a string trocada
    system("pause");
    return(0);
}

Onde está o erro no código?
O programa para de funcionar durante a execução, logo após de eu atribuir um valor a st

2 Respostas

wagnerfrancisco

Tem algum tempo que eu não faço nada em C, mas a tua lógica parece estar correta.

Eu lembro que não gostava de usar esta função gets. Ela nem limita a entrada e normalmente ainda dava uns problemas com buffers de entrada. Eu costumava usar o scanf deste modo:

scanf(" %99[^\n\t], st);

Isto lê até encontrar uma quebra de linha ou um tab. Repare no espaço antes do %, ele é necessário pra limpar o buffer.

Veja se funciona… caso contrário tenta debugar dentro do for imprimindo as variáveis!

Neviat

Testei o código, ele funciona fora do programa, mas nele continua dando o mesmo problema que com gets… =/
vlw ^^

Criado 23 de julho de 2012
Ultima resposta 23 de jul. de 2012
Respostas 2
Participantes 2