Ir ao conteúdo
  • Cadastre-se
Estudante0123

C Obter texto e apresetna-lo

Recommended Posts

Olá, estou fazendo em partes um codigo. A primeira parte deverá receber, pelo teclado, um texto. Pensei em fazer dessa forma mais simples:

char texto;
 printf ("Insira seu texto: ");
 scanf ("%s", &texto);

printf ("%s", texto);

Mas só captura a primeira linha do texto, onde posso estar errando? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia, @Estudante0123

 

Tenta por

char texto[50];

Se você não usar o vetor no char você só vai capturar uma letra, há e pode mudar o 50 para o tamanho que você acha que a frase vai ter, sempre chutando para mais.

 

Espero ter ajudado :D 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda sim não vai. Pensei em fazer da seguinte forma 

char texto , caractere;
 int i = 0;

   do {
    caractere = getchar ();
    texto[i] = caractere;
    i++;
   } while ( caractere != 13) ;

 

Mas preciso fazer diferentes tipos de teste, com vetores de tamanhos diferentes, então não posso limitar ele. O que quero dizer é que tenho teste de texto [10], assim como text [100], e o programa deveria lidar bem com todos os teste

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>


 int main (){

 // Receber texto

 char texto , caractere;
 int i = 0;

   do {
    caractere = getchar ();
    texto = caractere;
    i++;
   } while ( caractere != "13") 
  
  //imprimir texto

   printf ("%s", texto);
  
  retur 0;
  }

O exercicio pede para que o programa suporte diferentes tipos de strings, com tamanhos diferentes. Modifiquei a principio e consegui chegar até ai. Contudo os casos de testes utilizam textos com varias linhas ( os testes são inseridos utilizando ctrl v), então não posso colocar um 

 

while ( caractere != '\n') ;

como limitador, mas também não sei como prosseguir

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Estudante0123 Strings são armazenadas em vetores de caracteres, não dá pra armazenar uma string em uma única variável char.

 

O vetor sempre precisa ser grande o suficiente para armazenar a string inteira (todos os caracteres não nulos da string mais o caractere nulo '\0' indicando o fim da string).

 

Então algo como:

char texto[100];

Pode armazenar uma string de até 99 caracteres (pois nesse caso extremo a 100ª posição do vetor deveria armazenar o caractere nulo '\0' que indica o fim da string).

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Estudante0123 Olá. É preciso a formatação adequada no scanf para ler um texto, só o %s não vai dar certo:

#include <stdio.h>
  
int main() {

    char texto[500];

    printf("Digite o texto: ");
    scanf("%[^\n]s", texto); // aqui o scanf está formatado p receber um texto

    printf("Texto: %s\n\n", texto);

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d  %[ é um especificador, e %s é outro especificador de tipo da função scanf(), embora ambos sejam especificadores de string. No caso o especificador %[ é um especificador de string com um conjunto específico de caracteres.

 

Logo, %[^\n] já está completo, não há necessidade de colocar o s no fim, pois esse s não tem função de captura, colocar esse s só dirá para o scanf esperar que após a string capturada deve existir um caractere 's', ou seja espera que seja uma string assim: "texto digitado e capturado pelo scanf\ns".

 

Então faça apenas:

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

 

Página com a lista completa de especificadores das funções da família da função scanf:

http://en.cppreference.com/w/c/io/fscanf

 

 

Explicação do %[^\n] :

 

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Eu já tava esperando algum comentário como esse! rs...

Mas nada contra não. Com isso vou aprendendo. Valeu novamente pela explicação dada!

Mas quanto a ler strings, devo confessar q prefiro o fgets, já com os comandos para limpar o stdin.

Logo, o código ficaria assim:

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

int main() {

    char texto[500];
    char ch;

    printf("Digite o texto: ");
    fgets(texto, 500, stdin);
    strtok(texto, "\n");
    if (strlen(texto) == 500 - 1) {
        while ((ch = getchar()) != '\n' && ch != EOF);
    }

    printf("Texto: %s\n\n", texto);

    return 0;
}

Se tiver algo novo para dizer com relação ao código acima pode falar! Estou aqui para aprender! :)

  • Curtir 2
  • Haha 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

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

×