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

 

 

Editado por isrnick
  • 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






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

×