Ir ao conteúdo
  • Cadastre-se

Problema com manipulação de strings


Posts recomendados

Saudações amigos,

 

Mais uma vez me encontro batendo a cabeça contra a parede, neste dia o problema é com manipulação de strings. Eu preciso de um programa simples que faça um for, de 0 até p, onde p e leia uma palavra de 3 letras, em seguida imprima a primeira e a última letra. Indicando a vez em que ela foi impressa.

 

Meu código:

#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
	int p,i;
	char u,o,k[3]={0};



	scanf("%d",&p);

	for(i=0;i<p;i++){

		printf("%d:",i );
		scanf("%[^\n]s",k);
		setbuf(stdin, NULL);

		u = k[0];
		o = k[2];

		printf("%c %c\n",u,o);
		fflush(stdin);

	}

	return 0;
}

O problema: quando ele passa pelo for na primeira vez ele pula o scanf e só passa por ele na segunda vez. Porque isso acontece?

Link para o comentário
Compartilhar em outros sites

@vangodp Por exemplo, ele entra dentro do for() que conta de zero até P, se p==3 e as entradas:

0: ABC
1: D E
2: QWE

Então a saída deveria ser:

A C
D E
Q E

Porém ele pula a leitura do zero, lê o 1 e 2 corretamente. Não consegui perceber onde foi que errei no código que pega a entrada e grava.

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>

int main (){
    int p = 0;
    char *vet;
    int i;
    
    printf("Qual o tamanho de P?: ");
    scanf("%d%*c", &p);
    
    vet = (char*)malloc(sizeof(char)*p+1);
    
    for ( i = 0; i<p ; i++ ) {
        printf("%d Entre com %d letras: ", i, 3);
        scanf ("%3[^\n]%*c", vet);
        printf("%c %c\n\n", vet[0], vet[p-1] );
    }
    
    free(vet);
    getchar();
    return 0;
}

Não sei se é bem o que você quer mas....

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olá, eliumoraes.

 

A linha

setbuf(stdin, NULL);

basicamente desassocia a entrada padrão do seu programa. você não quer isso, tire essa linha do seu código. Agora falta trocar isso:

scanf("%[^\n]s",k);

por isso:

scanf(" %[^\n]s",k);

Não tenho certeza quanto a isso, mas acredito que colocando esse espaço adicional na string passada para scanf, você permite que haja espaço entre as entradas do usuário. Se você não acrescentar esse espaço, o programa não vai ler entrada do teclado após o usuário entrar o valor de p (verifique por conta própria).

 

Com essas mudanças, o programa deve funcionar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...