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

NMLZ

leitura de várias linhas

15 mensagens neste tópico

Boas! Estou com uma pequena duvida. Queria ler várias linhas, mas para um inteiro, com o formato:

1 2 3 4 5

6 7 8 9 0

e acabava quando não digitasse nenhum número. Estou a usar um vector para guardar cada elemento de cada linha, e um vector de vectores para guardar cada linha:

while (????)
{
while (cont < 9) {
	cin >> n;
	vec.push_back(n);
	cont++;
}
princ.push_back(vec);
}

já tentei o !cin.eof, mas não resulta. Alguem tem alguma ideia ? Abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta while (n!=NULL)

Se calhar não vai dar, não estou muito a par da definição de NULL.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez o melhor seja ler uma string, e depois passar a string para inteiros. Assim quando a string de uma linha não contiver números, sais do ciclo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De qualquer das formas vais ter que colocar um "enter" extra. O programa tem que ter uma forma de saber que acabou, senão pede sempre um número/string/whatever.

o eof funciona mas para isso tens que simular o eof, se nao me engano em windows é ctrl+z

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenta while (n!=NULL)

Se calhar não vai dar, não estou muito a par da definição de NULL.

Importa esclarecer que em C/C++, NULL é simplesmente o valor 0.

Voltando à pergunta, podes fazer while (!cin.fail()). Depois basta inserires um caracter que não seja um algarismo para saíres do ciclo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se está à espera de 9 dígitos nem precisa disso... Já sabe quando termina.....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mesmo que saiba à partida quantos algarismos vão estar em cada vector, não sabe quantos vectores vai receber.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exactamente TheDark, são n linhas com 9 digitos.

Neste caso TEM mesmo que ser com um enter, tendo em conta que o programa é avaliado pelo input e output, e não pelo codigo (UVa). Tamos 2 à procura de resposta, quando souber posto aqui. abraço

ps: tks pelas respostas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro que tudo acho melhor que todo o código seja colocado, porque o que lá está não funciona certamente.

Não sei de que tipo é o n.

Não estou a ver cont = 0;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi, queres que quando deres um enter ele pare de receber algarismos? Assim sendo vou ali pela ideia do Rui, receber uma string e fazer parse... com sscanf era um instante.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

exactamente TheDark, são n linhas com 9 digitos.

Neste caso TEM mesmo que ser com um enter, tendo em conta que o programa é avaliado pelo input e output, e não pelo codigo (UVa). Tamos 2 à procura de resposta, quando souber posto aqui. abraço

ps: tks pelas respostas

Se é um corrector automático usa o cin.eof().

Costumo resolver problemas na UVA e é isso que faço. (ok, na prática uso o feof(stdin) de C, mas vai dar ao mesmo)

EDIT: Bem me parecia. Tinhas que ser da FEUP para usar a UVA. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro que tudo acho melhor que todo o código seja colocado, porque o que lá está não funciona certamente.

Não sei de que tipo é o n.

Não estou a ver cont = 0;

se ignorares o 1º while e o push_back para o princ ele lê 9 inteiros e guarda cada 1 num vector vec.

int n, cont = 0;

vector<vector<int> > princ;

vector<int>

a unica coisa que falta realmente e' quebrar o ciclo.

Warrior, tks, entao vou experimentar submeter com o !cin.eof, se der erro leio a string e separo/converto. abc

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Primeiro que tudo acho melhor que todo o código seja colocado, porque o que lá está não funciona certamente.

Não sei de que tipo é o n.

Não estou a ver cont = 0;

se ignorares o 1º while e o push_back para o princ ele lê 9 inteiros e guarda cada 1 num vector vec.

int n, cont = 0;

vector<vector<int> > princ;

vector<int>

a unica coisa que falta realmente e' quebrar o ciclo.

Warrior, tks, entao vou experimentar submeter com o !cin.eof, se der erro leio a string e separo/converto. abc

Tem que funcionar. Eu em C uso algo assim: (extraído de uma das soluções da UVA)

      scanf("%d %d",&a,&:);

      while (!feof(stdin)) {

          ......

          scanf("%d %d",&a,&:);

      }

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