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

kikodog

Valores de array andam a enganar...

2 mensagens neste tópico

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>


using namespace std;
//////////// classe no ///////////////
class Node
{
  int x, y;
public:
  void valores (int,int);

   int area (void) {return (x,y);}
} no;

void Node::valores (int a, int b) {

       // cout << x << endl;
     x = a;
     y = b;


}
//////////// classe no ///////////////



int main()
{

Node no;

  char data[80];          // define um array de 80 caracteres.
  int a;
  for (a=0 ; a<80 ; a++)
  {data[a]=0; }
 ifstream infile;
 infile.open("rede.txt");      //abre o ficheiro na mesma pasta que está o executavel
 infile >> data;                 //colocamos os dados abertos no array
// cout << data << endl;     //imprime array com os nós
 infile.close();           //fexa a ligaçao ao ficheiro
 //______________________________________________________________________

// no.valores (data[0],data[2]);
 //cout << data[0] << " e " << data[2] << endl;
 //cout << "area: " << no.area() << endl;;


     char ligacoes[800];          // define um array de 80 caracteres.
 ifstream infilel;
 infilel.open("ligacoes.txt");      //abre o ficheiro na mesma pasta que está o executavel
 infilel >>ligacoes;                 //colocamos os dados abertos no array
//cout << ligacoes << endl;     //imprime array com os nós
 infilel.close();           //fexa a ligaçao ao ficheiro
 //______________________________________________________________________

  int noinicio[10];
  int nofinal[10];

//cout << data[0] ;

 for (int i=0; i<15; i++)                       {
 // cout << data[i] ;
 for (int n=0; n<80; n++) {
                          data[n]= atoi (&data[n]);
  //cout << n;
                           if (data[n]==1 || data[n]==2 || data[n]==3 || data[n]==4|| data[n]==5 || data[n]==6 || data[n]==7 || data[n]==8 || data[n]==9)
                           {
                                          //    cout << &data[n] ;
                                          //       int bablda = (data[n]);
                                          // noinicio[i]=(data[n]);
                                            cout << n << ":";

                                          //  cout << data[0];

                                          //     int babla = (data[n+2]);
                                          //  nofinal[i]=(data[n+2]);         

                                          // cout << data[n] ;
                                          //   cout << babla ;

                            }
                                                }

 for (int i=0; i<10; i++){
 // cout << noinicio[i] << "-";
 // cout << nofinal[i] << endl ;

}
}

 system ("PAUSE");       //para o programa.
 return 0;

}

O objectivo é retirar apenas os inteiros do ficheiro, que estao separados por virgulas e dois pontos.

if (data[n]==1 || data[n]==2 || data[n]==3 || data[n]==4|| data[n]==5 || data[n]==6 || data[n]==7 || data[n]==8 || data[n]==9)

e imprimo o n

da-me 0 2 4 6 8 10

isto ja que o ficheiro tem

9:2,2:3,3:4

o que bate certo pelas posiçoes mas quando quero tirar o valor do array dá smilies e corações resumindo algo estranho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenta

if (data[n]=='1' || data[n]=='2' || data[n]=='3' || data[n]=='4' || data[n]=='5' || data[n]=='6'' || data[n]=='7' || data[n]=='8' || data[n]=='9')

ou melhor:

if (data[n]>='1' &&  data[n]<='9')

Porque 1 em ASCII é o mesmo que teres um "Start of Header"

O número '1' equivale a 49.

Logo neste caso tens de usar o número entre apostrofes.

Podes consultar a tabela em http://enteos2.area.trieste.it/russo/IntroInfo2001-2002/CorsoRetiGomezel/ASCII-EBIC_files/ascii_table.jpg

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