Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

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

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

Postado

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

 

 

Postado

@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;
}

 

Postado

@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] :

 

 

Postado

@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! :)

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!