Ir ao conteúdo
  • Cadastre-se

matrizes de string em c


Posts recomendados

Bom pessoal, eu estou tentando fazer um exercício de programação em c que pede para  ler 5 nomes do teclado com até 20 letras, armazenar esses nomes em uma matriz de strings e depois escrever na tela essa matriz. Vou postar o código aqui. Se alguma alma boa puder me dizer onde estou errando agradeço. :)

 

OBS: Gente postei o tópico no lugar errado mas como não achei opção para deleta-lo então acho que não tenho muito o que fazer, só peço desculpas ae pela falta de atenção.

 

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

int main(){

char nomes[5][21];
int i;

for(i=0;i<5;i++){
	fflush(stdin);
	fgets(nomes[i],21,stdin);
	nomes[i][strlen(nomes[i])-1]='\0';
}
printf(" %s\n ",nomes[i]);

	return 0;
}

 

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

  • 9 meses depois...
37 minutos atrás, Josesousa disse:

Uma pergunta, esta terceira linha do seu for estaria colocando o caracter '\0' para indicar que o nome terminou?

 

fgets captura o caractere '\n' que tem no fim do texto no stdin (o '\n' é inserido quando o usuário aperta Enter após digitar algo no terminal), a @Juliana Batista da Silva está eliminando esse '\n' substituindo-o por um '\0'.

 

Mas @Juliana Batista da Silva  note que se alguém digitar algo com mais de 20 caracteres no terminal o caractere '\n' não vai ser guardado no seu vetor, então seria melhor checar o tamanho da string ou checar se o caractere '\n' está na string, antes de substituir.

 

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

@Juliana Batista da Silva Eu faria assim o exercício:

 

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

int main() {

    char nomes[5][50], ch;
    int i;

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

        printf("Digite um nome: ");
        fgets(nomes[i], 50, stdin);
        strtok(nomes[i], "\n");
        if (strlen(nomes[i]) == 50 - 1) {
            while ((ch = getchar()) != '\n' && ch != EOF);
        }
    }

    for (i = 0; i < 5; i++)
        printf("\n%s", nomes[i]);

    printf("\n");

    return 0;
}

Obs: A biblioteca <stdlib.h> não está sendo usada no exercício

Essa é apenas uma sugestão!

Link para o comentário
Compartilhar em outros sites

@Josesousa Olá. Muito boa essa pergunta. Infelizmente vou ter que confessar q não tenho maturidade suficiente com relação ao C/C++ para poder responder essa pergunta de maneira adequada

Vamos esperar q algum colega aqui do fórum responda a essa pergunta, ok?

Pesquisei a respeito desse assunto mas o máximo onde cheguei a foi esse texto:

 

"Em C e C++, os arquivos de cabeçalho são adicionados ao programa por meio do comando #include do preprocessador (o verbo "adicionar", aliás, não foi usado por acaso: o efeito do comando é trazer todo o conteúdo do arquivo referenciado para que seja compilado como se fizesse parte do programa que o está incluindo)..."

 

Abraço!

Link para o comentário
Compartilhar em outros sites

  • De fato:
Em 23/06/2018 às 07:40, giu_d disse:

"Em C e C++, os arquivos de cabeçalho são adicionados ao programa por meio do comando #include do preprocessador (o verbo "adicionar", aliás, não foi usado por acaso: o efeito do comando é trazer todo o conteúdo do arquivo referenciado para que seja compilado como se fizesse parte do programa que o está incluindo)..."

 

 

 

Porém nem tudo é absoluto. Alguns bibliotecas herdam outras irmãs para realizar seus procedimentos. Vão indiferente de nossa vontade incluir funções das quais não temos a mínima ideia de suas inclusões. Do mesmo modo que o compilador e seus componentes vão examinar o código em busca de chamadas implícitas ¹, e automaticamente as respectivas bibliotecas. 

 

  • O Compilador que examina o código, é quem traz os devidos bits (arquivos-objetos) para complementar a chamada implícita, então quando você usa funções sem as declarações dos seus respectivos cabeçarios, o compilador faz a complementação. Do mesmo modo, se você declará uma inclusão, mas não usa nenhuma de suas funções, aquela declaração então será ignorada: 
Em 22/06/2018 às 23:26, Josesousa disse:

É porque eu uso funcoes das mesmas, mas nem sempre sei de onde estão vindo ¹

 

Em todo caso; é sempre bom policiar o código-fonte, e não passar uma impressão de programador displicente. E fiquem tranquilos que o maior impacto será mesmo no tempo de compilação, contudo, tão pequeno que não será apreciado.

 

 

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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