Ir para o conteúdo
NMLZ

leitura de várias linhas

Mensagens Recomendadas

NMLZ    0
NMLZ

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
NMLZ    0
NMLZ

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
shumy    17
shumy

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;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
NMLZ    0
NMLZ

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warrior    68
Warrior

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,&:);

      }

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade