Ir ao conteúdo

Posts recomendados

Postado

Boa noite, sou um iniciante na programação e estou tendo um problema simples.

Eu consigo armazenar a primeira variável name1 corretamente, porém não consigo armazenar a name2 e a name3, meu programa le a quebra de linha como a variável de name2 e name 3. alguém por favor sabe como eu faço pra resolver esse problema?

 

código:

image.png.65d3fb701e177e97238c1792ab214215.png

Como o c interpreta:

image.png.f56666c7a4c285d3e0924a95a6d05a3b.png

 

 

  • Amei 1
Postado

@YMos     seria melhor postar seu código no Formate de texto , assim copia se com mais facilidades e já colar no editor do compilador para testar ,  e  parece que essa sua Função  " limpa_entrada "  esteja com problemas , pois o fgets já pega todos os caracteres do buffer e até o newLine assim não sobra nada  , e o getchar fica esperando digitar algo e teclar enter para continuar  ,  e sem essa função seu código funciona bem :

/// https://www.clubedohardware.com.br/forums/topic/1606349-sou-iniciante-meu-programa-em-c-n%C3%A3o-l%C3%AA-minha-vari%C3%A1vel-corretamente/
#include <stdio.h>
#include <string.h>
#define espacos printf("\n\n\n");
int limpar_eentrada();
int main()
{
  char nome1[50];
  char nome2[50];               /// vetor de caracteres com espaco para 49 
  char nome3[50];               /// caracteres e mais um espaCo para o finalizar de 
  printf("Nome1 ");             /// string's '\0'  ou simplesmente 0
  fgets(nome1 , 49, stdin );    /// por isso 49 e não 50
  /// nome1[strlen(nome1) - 1] = 0;  esse aqui remove o newLine
  strtok(nome1,"\n");            /// esse tamBem remove o newLine

  printf("Nome2 ");
  /// limpar_eentrada();         /// essa funcAo getchar pega o que esta nu buffer de entrada
  fgets(nome2 , 49, stdin );     /// e se não tiver naDa , fica esperando digitar algo e teclar enter
  /// nome2[strlen(nome2) - 1] = 0;  pois o fgets pega tudo que esta no buffer e não sobra nada
  strtok(nome2,"\n");

  printf("Nome3 ");
  /// limpar_eentrada();
  fgets(nome3 , 49, stdin );
  /// nome3[strlen(nome3) - 1] = 0;
  strtok(nome3,"\n");
  espacos
  printf("Bem Vindo %20s Um Grande Prazer Te ConhecEr . . . !\n",nome1);
  printf("Bem Vindo %20s Um Grande Prazer Te ConhecEr . . . !\n",nome2);
  printf("Bem Vindo %20s Um Grande Prazer Te ConhecEr . . . !\n",nome3);

  espacos
  return 0;
}
int limpar_eentrada()
{
  char c = ' ';
  while((c = getchar()) != '\n' && c != EOF ){}
}

641293506_comocinterpreta.thumb.jpg.625487480b8b05777e4cf27047d4940a.jpg

  • Curtir 1
  • Amei 1
Postado

@devair1010, muito obrigado meu amigo! 

você sabe dizer quando tem que usar essa função com getchar? Porque eu aprendi que ela serva pra limpar a entrada até apertar enter, por isso usei essa função. Porém, não funcionou dessa vez e isso me deixou com muita dúvida em relação a essa função.

  • Curtir 1
Postado

então a luta da linguagem C é fazer ela entender as letras do teclado. kkkkkkkkk

muito obrigado novamente amigo.

  • Obrigado 1
Postado
4 horas atrás, YMos disse:

então a luta da linguagem C é fazer ela entender as letras do teclado

 

Não. Não é.

 

Todas as linguagens tratam isso do mesmo modo, já que é o sistema que trata o teclado. Claro que como Windows e Unix/Linux/Android/MacOS foram todos escritos em C (com algo de C++ nos últimos anos) essa linguagem acaba envolvida 😄

 

Tudo o que vem do teclado vai para a entrada padrão. Se você usar um computador com vários teclados e digitar neles ao mesmo tempo vai misturar tudo em algo que é o tal buffer de teclado.

 

E daí vai para alguma janela algum dia. Ou pode acabar sumindo. 

 

No Windows por exemplo o S é de plural, janelas. O que você digita vai para a janela que tem o foco. Pode ser o seu programa, pode ser o Excel na outra janela, o navegador na outra. O sistema não sabe o que fazer com o que foi digitado e imagina que os programas vão consumir o que se digita

 

Se você digita 20 letras e um ENTER e seu programa lê 12 o sistema espera pra ver para quem vai entregar o resto. Pode ser que espere pelo ENTER, pode ser que leia mesmo 12, sem surpresas: vai depender do que seu programa faz e se a janela onde roda seu programa esta em foco. Se seu programa vai ler 12 mas o sistema mudou o foco para outra janela a outra vai receber tudo e seu programa nada....

 

 

  • Curtir 1

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!