Herculano 0 Denunciar post Postado Abril 23, 2009 Galera to precisando pegar um string de um arquivo sequencial e separa em duas strings e converter para inteiro. A terceira linha em diante é um labirinto que será alocado em uma matriz. O arquivo é assim : --------------------------- ARQUIVO 3 10 31 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x x b x xp x p x x x x xxxx xxxxxx x x xx x x x x x x px x x x x x xpx x xxxx xxx p x xxxxxp x x xxx x xxxxx x xpx x x x x x x x xx x x x xxx x x xbx p x x x xxxx xb x x x x xxox x x x p xx x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --------------------------- O que eu preciso e pegar a linha 10 31 separa la ficando assim int row=10 int column=31 Segue abaixo como eu tentei fazer #include <string> #include<iostream> using namespace std; #include<stdio.h> #include "Robo.h" Labirinto* AlocaLabirinto(Labirinto *lab,FILE *arquivo) { char captura[11],auxRow,auxColumn; fgets(lab->nome,9,arquivo); fgets(captura,11,arquivo); int tam = strlen(captura); int j=tam; for(int i =0; i< tam;i++) { if ((captura[i]!=" ") && (i < j)) strcat(auxRow,captura[i]); else j=i; if(i > j) strcat(auxColumn,captura[i]); } lab->row= atoi(auxRow); lab->column=atoi(auxColumn); lab->EstruturaLab=(char**) malloc(lab->row * sizeof(char*)); //Aloca o vetores de ponteiros(linhas). for(int i=0;i < lab->row;i++) { lab->EstruturaLab[i]=(char*) malloc(lab->column* sizeof(char)); //Aloca em cada posicão do vetor um vetor de ponteiros.(colunas). } for(int i=0; i < lab->row;i++) { for(int j=0;j < lab->column;j++) { lab->EstruturaLab[i][j]=fgetc(arquivo); } } } Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Abril 23, 2009 Você pode usar o fscanf logo no início da leitura do arquivo para pegar os dois valores do início: fscanf(arquivo, "%d %d", ...); Compartilhar este post Link para o post Compartilhar em outros sites
Herculano 0 Denunciar post Postado Abril 24, 2009 Eu mudei o cógido e ficou assim a primeira linha do arquivo eu consegui pegar normal mas a segunda eu naum consigui. Eu compilo td certinho mais qd eu vou rodar ele fecha a aplicação e acusa um erro.Tentei imprimir a variavel onde eu estava alocando porém naum imprimiu nada. Gostaria de saber se o fscanf só captura string ? ou eu posso captrura inteiros também. Segue o código. #include <string> #include<iostream> using namespace std; #include<stdio.h> #include "Robo.h" Labirinto* AlocaLabirinto(Labirinto *lab,FILE *arquivo) { int auxRow,auxColumn; cout << "teste1" << endl; fgets(lab->nome,9,arquivo); //Armazena a primeira linha do arquivo TP3ROBO cout << lab->nome << endl; fscanf(arquivo,"%d %d",auxRow,auxColumn); // Armazena o número de linhas e colunas (segunda linha do arquivo) cout << auxRow << endl; lab->row=auxRow; lab->column=auxColumn; lab->EstruturaLab=(char**) malloc(lab->row * sizeof(char*)); //Aloca o vetores de ponteiros(linhas). for(int i=0;i < lab->row;i++) { lab->EstruturaLab[i]=(char*) malloc(lab->column* sizeof(char)); //Aloca em cada posicão do vetor um vetor de ponteiros.(colunas). } for(int i=0; i < lab->row;i++) // Anel para percorrer as linhas da matriz alocada { for(int j=0;j < lab->column;j++) //Anel para percorrer as colunas da matriz alocada { lab->EstruturaLab[i][j]=fgetc(arquivo); // Comando para armazenar caracter por caracter na matriz alocada. } } } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 24, 2009 do jeito q o josé mostrou ele captura inteiros Compartilhar este post Link para o post Compartilhar em outros sites
Herculano 0 Denunciar post Postado Abril 24, 2009 Consegui aki eu estava utilizando a função de forma errada. fscanf(arquivo,"%d %d",auxRow,AuxColumn); // modo como eu estava usando. fscanf(arquivo,"%d %d",&auxRow,&AuxColumn); // modo correto de usar a função Eu estava esquecendo da referencia. Valew galera vcs ajudaram muito. Compartilhar este post Link para o post Compartilhar em outros sites
Herculano 0 Denunciar post Postado Maio 3, 2009 galera to precisando de mais uma coisa. Preciso pegar o numero de linhas e o numero de colunas do arquivo. To pesando em fazer assim while(!feof(arquivo)) { if (fgetc(arquivo)=="\n") rowConfere++; else { position=fgetc(arquivo); columnConfere++; } } Resumindo eu tenho que conferir se o numero de linhas e colunas do arquivo é igual ao desejado para a manipulação do programa. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Maio 4, 2009 compilo do jeito q você disse? Compartilhar este post Link para o post Compartilhar em outros sites