Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
eliumoraes

Problema com manipulação de strings

Recommended Posts

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, eliumoraes disse:

...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.

 

what! Na parte mais critica você enrolou para dizer o que quer, não entendi nada.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @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.

    Compartilhar este post


    Link para o post
    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

    Compartilhar este post


    Link para o post
    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.

    Editado por danieltm64
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×