Programa considerar apenas o primeiro caracter

1. Programa considerar apenas o primeiro caracter

Murilo Góes de Almeida
murilogoes

(usa Linux Mint)

Enviado em 03/11/2015 - 19:32h

Boa noite pessoal, gostaria de saber se há alguma possibilidade do sistema considerar apenas o primeiro caractere digitado e descartar o resto. Por exemplo, olhem esse código que eu estou postando abaixo. Se eu digitar na primeira entrada um texto grande, tipo "teste", o programa ja vai atribuir os 5 caracteres nas proximas posições dos vetores. Teria como ele considerar somente o primeiro caractere e eliminar o resto que foi digitado acidentalmente?

#include <iostream>

using namespace std;


int main()
{
char teste[4];

for (int k=0; k!=5; k++)
{
cin >> teste[k];
}

for (int k1=0; k1!=5; k1++)
{
cout << endl << teste[k1] << endl;
}
return 0;
}


  


2. Re: Programa considerar apenas o primeiro caracter

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 03/11/2015 - 20:41h


Se declarar apenas como char e não um array de char, ele considera apenas a primeira letra digitada:

char teste;


3. Re: Programa considerar apenas o primeiro caracter

Murilo Góes de Almeida
murilogoes

(usa Linux Mint)

Enviado em 04/11/2015 - 00:22h

luisrcs escreveu:


Se declarar apenas como char e não um array de char, ele considera apenas a primeira letra digitada:

char teste;


Mas eu preciso do array, estou montando um questionario de 10 perguntas com 4 alternativas (a,b,c,d) cada. Acontece que se na primeira resposta eu digitar aaaaaaaaaa ele já atribui como resposta a todas as perguntas!




4. Re: Programa considerar apenas o primeiro caracter

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/11/2015 - 00:41h

Leia sobre std::istream::ignore() (por exemplo, em http://www.cplusplus.com/reference/).


5. Re: Programa considerar apenas o primeiro caracter

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 04/11/2015 - 22:27h

char letra = teste[0];

Atribui o primeiro caracter à variável letra.


6. Re: Programa considerar apenas o primeiro caracter

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/11/2015 - 13:42h

Luis,

Acho que o ponto dele não é como ler apenas um caráter, pois isso já está funcionado. A questão era como fazer para desconsiderar coisas extras na entrada, sem as acumular para uma próxima leitura.


7. Re: Programa considerar apenas o primeiro caracter

Murilo Góes de Almeida
murilogoes

(usa Linux Mint)

Enviado em 05/11/2015 - 17:07h

Eu usei o fflush para limpar o buffer do teclado e funcionou. Sei que não é o recomendado, mas resolveu o problema por enquanto

Obrigado!


8. Re: Programa considerar apenas o primeiro caracter

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/11/2015 - 18:16h

Realmente fflush() não é recomendado. Além de não ter garantia alguma de que vá funcionar, você ainda mistura I/O em C++ com I/O em C (o que não chega a ser um erro, mas é feio).

Você poderia ter dado atenção a minha sugestão de ler sobre std::istream::ignore(). A seguinte solução é correta, elegante, e você nunca terá dúvidas de se vai funcionar ou não.

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 


Se você achar que isso dá muito trabalho de digitar, pode sempre criar uma função inline ou macro para envelopá-la.

// Definição
inline istream &kill_eol(istream &is){ return is.ignore(numeric_limits<streamsize>::max(), '\n'); }


// Uso
kill_eol(cin);



9. Re: Programa considerar apenas o primeiro caracter

Murilo Góes de Almeida
murilogoes

(usa Linux Mint)

Enviado em 06/11/2015 - 19:56h

paulo1205 escreveu:

Realmente fflush() não é recomendado. Além de não ter garantia alguma de que vá funcionar, você ainda mistura I/O em C++ com I/O em C (o que não chega a ser um erro, mas é feio).

Você poderia ter dado atenção a minha sugestão de ler sobre std::istream::ignore(). A seguinte solução é correta, elegante, e você nunca terá dúvidas de se vai funcionar ou não.

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 


Se você achar que isso dá muito trabalho de digitar, pode sempre criar uma função inline ou macro para envelopá-la.

// Definição
inline istream &kill_eol(istream &is){ return is.ignore(numeric_limits<streamsize>::max(), '\n'); }


// Uso
kill_eol(cin);




Então Paulo, eu até tentei usar o cin.ignore, mas não deu certo. Se eu deixo sem argumentos ele ignora apenas 1 caractere. Se eu coloco um valor tipo 256, não consigo dar entrada no próximo valor do vetor :|


10. Re: Programa considerar apenas o primeiro caracter

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/11/2015 - 01:16h

Você não está usando com um argumento só, está? Note que nos exemplos, eu mostrei com dois argumentos, como deve ser no seu caso.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts