• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

The Loser

Dúvida de input

6 mensagens neste tópico

Bem, eu sinceramente já me estou a irritar um bocado de andar à volta disto. :D

Vamos supor que tenho a seguinte linha de código:

cin >> val1 >> val2 >> val3;

Desta forma seria possibilitado o input no formato "2 1 3" por exemplo.. Isto é, leitura com espaços.

Agora.. A minha dúvida é um bocado estúpida.. :P"

Vamos supor que eu insiro "2 1" só.. Se eu pressionar return, ele vai continuar incessantemente a pedir pelo 3º valor..

No entanto eu quero possibilitar o input de dados num formato "2 1" e "2 1 3"..

Como é que posso ler o 3º valor só no caso de uma condição se verificar? Isto é.. torna-lo algo como "opcional"..

É um bocado irritante ter tanto que fazer.. E ficar preso numa porcaria destas.. :P"

Obrigado desde já, :cheesygrin:

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes perguntar ao utilizador quantos valores quer ler? É a 1ª solução de que me lembrei, e talvez a mais simples...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em C (não sei C++) eu faria assim (não testado):

if (fgets(input, MAX_INPUT_SIZE, stdin)) {
  n = sscanf(input, "%d%d%d", &val[0], &val[1], &val[2]);
  switch (n) {
    case EOF: /* error */; break;
    case 1: /* error: val[0] ok; val[1], val[2] unchanged */; break;
    case 2: /* val[0], val[1] ok */; break;
    case 3: /* all values ok */; break;
    default: /* error */; break;
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

TheDark,

É normal essa sugestão ter surgido.. visto que não expliquei uma finalidade..

O val1, representa o tipo de dados que é lido, e as outras duas variaveis lêem dados diferentes dependente do valor inserido no primeiro.. No entanto eu quero ler isso numa linha só..

E há um tipo de dados que só leva 1 parâmetro.

pmg,

Eu tentei isso com C++ antes de criar este tópico, no entanto há sempre uma insistência em ler o 3º valor..

Basicamente.. Eu pretendia aplicar um valor default à variável, caso nenhum valor fosse lido..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Basicamente.. Eu pretendia aplicar um valor default à variável, caso nenhum valor fosse lido..

#define DEFAULT_VAL1 42
#define DEFAULT_VAL2 42000
/* ... */
if (fgets(input, MAX_INPUT_SIZE, stdin)) {
  n = sscanf(input, "%d%d%d", &val[0], &val[1], &val[2]);
  switch (n) {
    case EOF: /* error */; break;
    case 0: /* error */; break;
    case 1:
      /* val[0] ok */;
      val[1] = DEFAULT_VAL1;
      val[2] = DEFAULT_VAL2;
      break;
    case 2:
      /* val[0], val[1] ok */;
      val[2] = DEFAULT_VAL2;
      break;
    case 3: /* all values ok */; break;
    default: /* error */; break;
  }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gratzi pmg.

Eu tentei isso antes de criar este tópico, no entanto por alguma razão não dava.. Provavelmente alguma distracção no código. :thumbsup:

Salvaste-me os nervos.

:(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora