iniciante Posted December 15, 2009 at 05:42 PM Report Share #300520 Posted December 15, 2009 at 05:42 PM Tenhu uma questao um pouco basica para fazer. Tenho um ficherio de texto com o nome ficheiro.txt que contem o seguinte conjunto de numeros: 1 20 2 30 como é que eu posso ler este ficheiro e guardar os valores numa lista deste tipo: typedef struct processo { struct processo *prox; /* Próximo elemento da lista*/ struct processo *ant; /* Elemento anterior da lista */ int numProc; int temProc; }lista; ou seja, eu quero ser o numero 1 e atribuir esse valor ao numProc da lista. depois quero ler o 20 e atribuir este valor ao temProc. e a seguir fazer o mesmo para a linha de baixo. Alguem me pode ajudar? 🙂 RC Link to comment Share on other sites More sharing options...
Baderous Posted December 15, 2009 at 07:20 PM Report Share #300547 Posted December 15, 2009 at 07:20 PM Abrir o ficheiro: fopen. Ler linha a linha: fgets Separar o conteúdo da linha e converter para o tipo de dados adequado: strtok + atoi. Fechar o ficheiro: fclose. A criação dos nodos da estrutura e etc presumo que saibas. Link to comment Share on other sites More sharing options...
iniciante Posted December 16, 2009 at 09:57 AM Author Report Share #300666 Posted December 16, 2009 at 09:57 AM sim eu isso eu sei...eu queria saber é como é que eu faço para ler primeiro so o numero 1 e guardalo e dps so o numero 20 e guardalo...=s Abrir o ficheiro: fopen. Ler linha a linha: fgets Separar o conteúdo da linha e converter para o tipo de dados adequado: strtok + atoi. Fechar o ficheiro: fclose. A criação dos nodos da estrutura e etc presumo que saibas. RC Link to comment Share on other sites More sharing options...
Baderous Posted December 16, 2009 at 11:34 AM Report Share #300690 Posted December 16, 2009 at 11:34 AM 3º parágrafo do meu post. Link to comment Share on other sites More sharing options...
iniciante Posted December 16, 2009 at 06:04 PM Author Report Share #300796 Posted December 16, 2009 at 06:04 PM pois eu ja li o 3º paragrafo o problema é que continuo sem perceber o que é isso, como se faz isso e como chegar ao resultado que queria ter 3º parágrafo do meu post. RC Link to comment Share on other sites More sharing options...
Baderous Posted December 16, 2009 at 06:23 PM Report Share #300806 Posted December 16, 2009 at 06:23 PM O strtok divide uma string em vários tokens de acordo com um separador. Indicando que o separador é o espaço, podes separar o conteúdo de cada linha. No teu caso, para cada linha, vais obter 2 strings contendo o 1º e o 2º número, respectivamente. Como são strings e tu queres armazenar em variáveis do tipo int, tens de fazer a conversão de tipos através da função atoi. Outra opção que não referi é a utilização do sscanf que permite evitar aquela treta toda de partir a string e converter os tipos. Link to comment Share on other sites More sharing options...
iniciante Posted December 16, 2009 at 06:37 PM Author Report Share #300810 Posted December 16, 2009 at 06:37 PM eu fiz algo deste tipo for(i=0;i<numproc;i++)/*percorrer linha a linha do FichProc.txt,ler o numero de processo e o tempo de execucao*/ { char test[6]; fgets(test, 6, ler); char *numero; char *tempo; char *espacoVazio = " "; numero=strtok(test,espacoVazio); // string1 tempo=strtok(NULL,espacoVazio); // string2 printf("numero %d \ntempo %d\n" ,atoi(numero),atoi(tempo)); system("pause"); } quando imprime a primeira vez imprime o numero 1 e o tempo 20..mas quando imprime a 2ª vez imprime 0 0 em vez de 2 30.. O strtok divide uma string em vários tokens de acordo com um separador. Indicando que o separador é o espaço, podes separar o conteúdo de cada linha. No teu caso, para cada linha, vais obter 2 strings contendo o 1º e o 2º número, respectivamente. Como são strings e tu queres armazenar em variáveis do tipo int, tens de fazer a conversão de tipos através da função atoi. Outra opção que não referi é a utilização do sscanf que permite evitar aquela treta toda de partir a string e converter os tipos. RC Link to comment Share on other sites More sharing options...
iniciante Posted December 16, 2009 at 06:54 PM Author Report Share #300818 Posted December 16, 2009 at 06:54 PM int main() { int numproc=numeroProcessos(); FILE * ler; ler=fopen("FichProc.txt","r"); char test[6]; int a ,b; int i; for(i=0;i<numproc;i++)/*percorrer linha a linha do FichProc.txt,ler o numero de processo e o tempo de execucao*/ { fgets(test, 6, ler); sscanf (test,"%d %d",&a,&😛 ; printf ("numero:%d\ntempo:%d\n",a,👍 ; } system("PAUSE"); return 0; } ok assim é mais facil d fazer e perceber..mas quando vou a imprimir a 2ª linha do ficheiro nao imprime bem... RC Link to comment Share on other sites More sharing options...
iniciante Posted December 16, 2009 at 06:56 PM Author Report Share #300819 Posted December 16, 2009 at 06:56 PM ok ja percebi o erro..era so aumentar o tamanho do char test... obrigado pela ajuda 😛 RC Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now