Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tsumaster

Problema simples com vetores e string

Recommended Posts

Olá pessoas.

Iniciei meus estudos em C há pouco tempo e não estou conseguindo fazer esse codigo funcionar:

#include<stdio.h>
char *str;

int main()
{
    //VARIAVEIS
    char chara;
    int cont;
    str = (char*)malloc(500);
    for(cont = 0; cont < 500; cont++)
    {
        str[cont] = '\0';
    }
    for(cont = 0; cont < 4; cont++)
    {
        scanf("%c", &chara);
        if (chara != '\n')
        {
            str[cont] = chara;
            //printf("%c", str[cont]);
        }
    }
    printf("%s", str);
}

O objetivo é inserir um numero n de caracteres no vetor str(no caso, 3 caracteres) e imprimir no final o vetor completo.

Estou usando como entrada os valores: 2, 5. No meio deles acaba entrando um '\n' que seria o enter que eu aperto para ativar o scanf.

 

Entretanto, o vetor resultante é apenas um "5". Alguém tem alguma ideia?

Estou usando DevC++ 5.8.2 Portable.

 

EDIT:

 

Desculpem, gastei a tarde toda pensando nesse codigo e, assim que postei aqui, olhei para ele e adicionei cont-- no if.... funcionou. Mas... Agora o erro está em começar sem caractere nenhum. Exemplo de entrada:

\n

5

2

3

 

Retorna um único caractere

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá!

O meu entendimento foi: Escreva uma função que escreva num array uma quantidade n de elementos e exiba o array após apertar enter!

 

Então, conclusão:

Primeiramente, essa parte do seu código é desnecessária!

for(cont = 0; cont < 500; cont++)
{
str[cont] = '\0';
}

pois isso você está "Simulando uma limpeza de array, vou te mostrar no futuro algo mais prático!".

 

 

Sua declaração, como você está aprendendo ainda, não pense em usar coisas complexas, substitua:

str = (char*)malloc(500);

por:

char str[500];

Essa sua função está quase correta:

for(cont = 0; cont < 4; cont++)
    {
        scanf("%c", &chara);
        if (chara != '\n')
        {
            str[cont] = chara;
        }
        else{
         str[cont] = '\0';
         break;
        }
    }

seu código funcionando certinho:

int main()
{
    //VARIAVEIS
    char chara;
    int cont;
    char str[500];
    for(cont = 0; cont < 4; cont++)
    {
        scanf("%c", &chara);
        if (chara != '\n')
        {
            str[cont] = chara;
        }
        else{
         str[cont] = '\0';
         break;
        }
    }
    printf("%s", str);
}

 

 

A limpeza do seu array, uma casa após a sua utilização, você coloca '\0';

 

você usou o array até a posição 2, na posição 3 do array você coloca um '\0';

 

exemplo:

 

    for(cont = 0; cont < 4; cont++)
    {
        scanf("%c", &chara);
        if (chara != '\n')
        {
            str[cont] = chara;
        }
        else{
         str[cont] = '\0';
         break;
        }
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.