1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

ajuda em programaçao C ate as 12 horas

Discussão em 'Programação' iniciada por manvix, 11 de Junho de 2008. (Respostas: 15; Visualizações: 1017)

  1. ola estou a fazer um programa em "C" ke le num ficheiro e grava as palavras encontradas num outro ficheiro. Mas no meu codigo ele nao chega a gravar em condiçoes. Alguem poderia me ajudar ate as 12:00 de 11/06/08.


    O codigo esta assim.

    Código:
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdafx.h>[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdio.h>[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<string.h>[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdlib.h>[/COLOR][/SIZE]
    [SIZE=2][COLOR=#008000]//#define MALLOC(x) ((x *) malloc (sizeof(x)))[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=white]contador,opcao,i;[/COLOR][/SIZE]
    [SIZE=2]FILE *ficheiro,*fx;[/SIZE]
    [SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][COLOR=white] temp[80],nome[1],ch,gravar[20];[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]cp[]=[/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=white]" "[/COLOR][/SIZE][SIZE=2][COLOR=white];/* declaraçao a espaço em branco*/[/COLOR][/SIZE]
    [SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] main()[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2][COLOR=#0000ff]do[/COLOR][/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Menu de Opcoes \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 1-Sumario de estatistica \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 2-estatistica por palavra \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 3-guardar Informacao \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Insira a opcao que deseja \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]scanf ([/SIZE][SIZE=2][COLOR=#a31515]" %d"[/COLOR][/SIZE][SIZE=2],&opcao);[/SIZE]
     
    [SIZE=2]}[/SIZE]
    [SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](opcao<=0 || opcao>3);[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](opcao == 1){[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]scanf([/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],&nome);[/SIZE]
    [SIZE=2]ficheiro = fopen(nome,[/SIZE][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((ficheiro) == NULL)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]}[/SIZE]
     
    [SIZE=2]fx = fopen([/SIZE][SIZE=2][COLOR=#a31515]"gravar.txt"[/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#a31515]"w+"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((fx) == NULL)[/SIZE]
    [SIZE=2]{[/SIZE]
    [SIZE=2]printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);[/SIZE]
    [SIZE=2]}[/SIZE]
     
    [SIZE=2]ch=getc(ficheiro);[/SIZE]
    [SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2][COLOR=white](ch!=EOF)[/COLOR][/SIZE]
    [SIZE=2][COLOR=white]{[/COLOR][/SIZE]
    [SIZE=2]i=0;[/SIZE]
    [SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](ch!=cp[0] && ch!=EOF && ch!=[/SIZE][SIZE=2][COLOR=#a31515]'\n'[/COLOR][/SIZE][SIZE=2])[/SIZE]
    [SIZE=2]{[/SIZE]
     
    [SIZE=2]temp[i]=ch; [/SIZE]
    [SIZE=2]ch=getc(ficheiro);[/SIZE]
    [SIZE=2]i++;[/SIZE]
    [SIZE=2]printf([/SIZE][SIZE=2][COLOR=#a31515]"%c"[/COLOR][/SIZE][SIZE=2],ch);[/SIZE]
     
    [SIZE=2]}[/SIZE]
     
    [SIZE=2]temp[i]=[/SIZE][SIZE=2][COLOR=#a31515]'\0'[/COLOR][/SIZE][SIZE=2];[/SIZE]
    [SIZE=2]ch=getc(ficheiro);[/SIZE]
     
    [SIZE=2]fprintf(fx,[/SIZE][SIZE=2][COLOR=#a31515]"%c"[/COLOR][/SIZE][SIZE=2],ch);[/SIZE]
     
    [SIZE=2]}[/SIZE]
    [SIZE=2]}
    [/SIZE]
     
    Última edição pelo moderador: 11 de Junho de 2008
  2. nao entendi o ke kiseste dizer. :confused:
     
  3. Baderous

    Baderous Banido

    Estás a querer ler um caracter dum ficheiro. Isso faz-se com a função fgetc e não com a getc.
     
  4. fiz as modificaçoes e o codigo le os cararacteres e so imprime no ficheiro de escrita a primeira letra de cada palavra.

    Código:
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdafx.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdio.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<string.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdlib.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#008000]//#define MALLOC(x) ((x *) malloc (sizeof(x)))
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=white]contador,opcao,i;[/COLOR]
    [COLOR=white]FILE *ficheiro,*fx;[/COLOR]
    [/SIZE][SIZE=2][COLOR=cyan]char[/COLOR][/SIZE][SIZE=2][COLOR=white]temp[80],nome[1],ch,gravar[20];[/COLOR]
    [/SIZE][SIZE=2][COLOR=royalblue]char[/COLOR][/SIZE][COLOR=white][SIZE=2]cp[]=[/SIZE][SIZE=2]" "[/SIZE][/COLOR][SIZE=2][COLOR=white];[/COLOR]
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] main()
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]do
    [/COLOR][/SIZE][SIZE=2]{
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Menu de Opcoes \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 1-Sumario de estatistica \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 2-estatistica por palavra \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 3-guardar Informacao \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Insira a opcao que deseja \n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf ([/SIZE][SIZE=2][COLOR=#a31515]" %d"[/COLOR][/SIZE][SIZE=2],&opcao);
    
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](opcao<=0 || opcao>3);
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](opcao == 1){
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf([/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],&nome);
    ficheiro = fopen(nome,[/SIZE][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((ficheiro) == NULL)
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);
    }
    fx = fopen([/SIZE][SIZE=2][COLOR=#a31515]"gravar.txt"[/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#a31515]"w+"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((fx) == NULL)
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);
    }
     
    ch=getc(ficheiro);
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2][COLOR=white](ch!=EOF){[/COLOR]
    [/SIZE][SIZE=2][COLOR=#008000]//printf("\n inicio while \n");
    [/COLOR][/SIZE][SIZE=2]i=0;
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](ch!=cp[0] && ch!=EOF && ch!=[/SIZE][SIZE=2][COLOR=#a31515]'\n'[/COLOR][/SIZE][SIZE=2])
    {[/SIZE][SIZE=2][COLOR=#008000]// printf("2");
    [/COLOR][/SIZE][SIZE=2]
    temp[i]=ch; 
    ch=fgetc(ficheiro);
    i++;
    printf([/SIZE][SIZE=2][COLOR=#a31515]"%c"[/COLOR][/SIZE][SIZE=2],ch);
    }
    temp[i]=[/SIZE][SIZE=2][COLOR=#a31515]'\0'[/COLOR][/SIZE][SIZE=2];
    ch=fgetc(ficheiro); 
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (ch ==cp[0] && ch == EOF && ch ==[/SIZE][SIZE=2][COLOR=#a31515]'\n'[/COLOR][/SIZE][SIZE=2])
    contador=0;
    {
    fprintf(fx,[/SIZE][SIZE=2][COLOR=#a31515]"%c"[/COLOR][/SIZE][SIZE=2],ch);
    contador++;
    }
    }
    }
    [/SIZE]
     
    Última edição pelo moderador: 11 de Junho de 2008
  5. greven

    greven Folding Artist

    Isso é porque estás a fazer fgetc - char e não fgets -string. Isso deve resolver, mas só testando. Assim de olho não há certezas. :) Nada como testar.

    Já agora recomendava-te a aprenderes a trabalhar com um gdb (o DDD se preferires é mais user friendly).
     
  6. Baderous

    Baderous Banido

    Podes-me dizer como é que o ficheiro do qual lês as palavras está estruturado? Se tens apenas 1 palavra por linha, ou se há várias palavras numa linhas e estão separadas, etc.
     
  7. o ficheiro tem varias palavras e varias linhas como um texto normal separados nao por pontos mas sim por espaço. O problema nao esta no printf da palavras mas sim na gravaçao para outro ficheiro greven, ele so grava a primeira letra de cada palavra.

    e o ch=fgets(ch,200,ficheiro); ke pediste pra por esta a dar um erro asim "
    error C2664: 'fgets' : cannot convert parameter 1 from 'char' to 'char *'
    "
     
  8. MadOnion

    MadOnion Folding Member

    Dentro do fgets agora já nao é ch, será gravar:
    Código:
    fgets(gravar, 200, ficheiro);
    
     
  9. Baderous

    Baderous Banido

    Este código está a fazer a cópia das palavras do ficheiro origem para o ficheiro destino, ficando exactamente igual:

    Código:
    #include <stdio.h>
    
    #define MAX 300
    
    int main() {
        FILE *fp1, *fp2;
        char aux[MAX],temp[MAX];
        int i,j,k;
        fp1 = fopen("teste.txt","r");
        if (!fp1)
           return;
        fp2 = fopen("dest.txt","w");
        if (!fp2)
           return;
        while (fgets(aux,sizeof(aux),fp1)!=NULL) 
              for (i=0;i<strlen(aux);i=j+1) {
                  k=0;
                  for (j=i;j!=' ';j++) {
                      
                      temp[k++]=aux[j];
                      }
                  temp[k]='\0';
                  fprintf(fp2,"%s",temp);
                  }
        fclose(fp1);
        fclose(fp2);
        return 0;
    }
     
  10. obrigado pelo codigo baderous. Mas ele agora nao grava nem imprime o ficheiro. O meu problema e gravar num ficheiro o ke ele leu.

    Da uma olhada como ficou o codigo:

    Código:
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdafx.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdio.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<string.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdlib.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#define[/COLOR][/SIZE][SIZE=2][COLOR=#000000] MAX 300[/COLOR]
     
    [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=white]contador,opcao,i,j,k;;[/COLOR]
    FILE *leitura,*escrita;
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][COLOR=white]nome[1],ch,gravar[20];[/COLOR]
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][COLOR=white]aux[MAX],temp[MAX];[/COLOR]
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]cp[]=[/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=white]" "[/COLOR][/SIZE][SIZE=2][COLOR=white];[/COLOR]
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] main()
    {
    [/SIZE][SIZE=2][COLOR=#0000ff]do
    [/COLOR][/SIZE][SIZE=2]{
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Menu de Opcoes \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 1- guardar a informacao \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 2- estatistica por linhas e palavras \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n 3- guardar Informacao \n\n"[/COLOR][/SIZE][SIZE=2]);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Insira a opcao que deseja \n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf ([/SIZE][SIZE=2][COLOR=#a31515]" %d"[/COLOR][/SIZE][SIZE=2],&opcao);
    
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2](opcao<0 || opcao>3);
    
    {
    
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2](opcao == 1){
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf([/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],&nome);
    leitura = fopen(nome,[/SIZE][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((leitura) == NULL)
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);
    }
    escrita = fopen([/SIZE][SIZE=2][COLOR=#a31515]"gravar.txt"[/COLOR][/SIZE][SIZE=2],[/SIZE][SIZE=2][COLOR=#a31515]"w"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((escrita) == NULL)
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);
    } 
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (fgets(aux,[/SIZE][SIZE=2][COLOR=#0000ff]sizeof[/COLOR][/SIZE][SIZE=2](aux),leitura)!=NULL) 
    
    [/SIZE][SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2] (i=0;i<strlen(aux);i=j+1) {
    k=0;
    [/SIZE][SIZE=2][COLOR=#0000ff]for[/COLOR][/SIZE][SIZE=2] (j=i;j!=[/SIZE][SIZE=2][COLOR=#a31515]' '[/COLOR][/SIZE][SIZE=2];j++) {
    
    temp[k++]=aux[j];
    }
    temp[k]=[/SIZE][SIZE=2][COLOR=#a31515]'\0'[/COLOR][/SIZE][SIZE=2];
    fprintf(escrita,[/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],temp);
    }
    fclose(leitura);
    fclose(escrita);
    
    }

    assim como esta ele nao grava nada nem imprime.
    [/SIZE]
     
    Última edição pelo moderador: 12 de Junho de 2008
  11. Baderous

    Baderous Banido

    Olha os espaços e o ponto e vírgula extra que puseste no código: int contador,opcao,i,j,k;
    Convém também que tenhas uma instrução de saída da execução do programa quando a leitura==NULL ou escrita==NULL. Mete-lhe um return como eu fiz.
    Que nome estás a dar ao ficheiro de leitura?
     
  12. o meu ficheiro esta designado por "a.txt" o ke ele vai retornar caso for NULL se eu puser o return? e a intruçao da um erro nesse codigo " for (i=0;i<strlen(aux);i=j+1) " sera por nao ter declarado?




    E se eu kisesse contar as palavras existentes o ke eu trocaria aki:

    Código:
    [SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2][COLOR=white](opcao == 2)[/COLOR]
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf([/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],&nome);
    leitura = fopen(nome,[/SIZE][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ((leitura) == NULL)
    {
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Impossivel abrir o ficheiro \n\n"[/COLOR][/SIZE][SIZE=2]);
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]do[/COLOR][/SIZE][SIZE=2] {
    ch=getc(leitura);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (ch == [/SIZE][SIZE=2][COLOR=#a31515]'\n'[/COLOR][/SIZE][SIZE=2])  [COLOR=lime]/* Ja tentei o i  if[SIZE=2] (ch == NULL[/SIZE][/COLOR][SIZE=2][COLOR=lime])  e o if[SIZE=2] (ch == [/SIZE][SIZE=2]'\0'[/SIZE][/COLOR][SIZE=2][COLOR=lime]) */[/COLOR] [/SIZE][/SIZE]
    contador++;
    } [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] (ch!= EOF);
    fclose (leitura);
    printf ([/SIZE][SIZE=2][COLOR=#a31515]"\n\n O ficheiro tem %d linhas.\n\n"[/COLOR][/SIZE][SIZE=2],contador);
    }
    
    }
    [/SIZE]
     
    Última edição pelo moderador: 12 de Junho de 2008
  13. Baderous

    Baderous Banido

    Eu quando olho para as tuas declarações de variáveis, vejo tudo junto, isto é, o tipo e o nome não têm espaços a separar, pode ser defeito de copy/paste. O erro nessa instrução de certeza que não tem a ver com essa, deve ser antes, diz lá o que é que aparece.
    Se quisesses contar as palavras, bastava declarares um inteiro, incializavas a 0 e, a seguir ao fprintf, incrementava-lo. (isto no código que eu postei). Se fosse no teu, mais uma vez estás a cometer o erro do getc aplicado a ficheiros. É fgetc (de file getc). E mesmo fazendo assim, tens de ter atenção que podes ter mais palavras do que espaços, depende de como o teu ficheiro está formatado.
     
    Última edição: 11 de Junho de 2008
  14. obrigado pela ajuda mas nao estou a ver o erro. Ja enviei o trabalho asiim mesmo. se tiveres ai um compilador de c ve o ke o programa faz.

    o programa deveria fazer o seguinte:
    contabilizar o numero de linhas, kuantas palavras tem e kuantas se repetem e gravar num ficheiro ou numa lista.

    e ficou assim:


    Código:
    #include <stdafx.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define MAX 300
    
    int contador,opcao,i,j,k;
    FILE *leitura,*escrita;
    char nome[1],ch,gravar[20];
    char aux[MAX],temp[MAX];
    char cp[]=" ";
       void main()
       {
             printf ("\n\n @@@@@@@@@@@@@@   Trabalho elaborado por: @@@@@@@@@@@@@ \n\n");
      printf ("\n\n @@@@@@@@@ Nome: Victor de Carvalho      @@@@@@@@@@@@@ \n\n");
      printf ("\n\n @@@@@@@@@ Nome: Mario dos Santos        @@@@@@@@@@@@@ \n\n");
      printf ("\n\n @@@@@@@@@ Nome: Jorge Cayanga           @@@@@@@@@@@@@\n\n");
      printf ("\n\n @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n");
     do
     {
      printf ("\n\n Menu de Opcoes \n\n");
            printf ("\n\n 1- guardar a informacao \n\n");
            printf ("\n\n 2- estatistica por linhas e palavras \n\n");
      printf ("\n\n Insira a opcao que deseja \n\n");
            scanf ("%d",&opcao);
      if (opcao>=3){
      printf("\n\n o numero ke escolheu para o menu nao existe\n\n");
      }
     }
        while(opcao<0 || opcao>2);
     
     {
     
      if(opcao == 1){/*leitura e gravacao do ficheiro de leitura em um ficheiro de escrita */
       printf ("\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n");
       scanf("%s",&nome);
       leitura = fopen(nome,"r");
       if ((leitura) == NULL)
       {
        printf ("\n\n Impossivel abrir o ficheiro \n\n");
              ch=getc(leitura);
       }
         escrita = fopen("gravar.txt","w");
       if ((escrita) == NULL)
                {
              printf ("\n\n Impossivel abrir o ficheiro \n\n");
       } 
            while (fgets(aux,sizeof(aux),leitura)!=NULL) 
     
         for (i=0;i<strlen(aux);i=j+1) {
                  k=0;
                  for (j=i;j!=' ';j++) {
                      
                      temp[k++]=aux[j];
                      }
                  temp[k]='\0';
                  fprintf(escrita,"%s",temp);
                  
         }
         
        fclose(leitura);
        fclose(escrita);
     
      }
      
     if (opcao == 2)/* Estatistica das linhas e das palavras */
      {
      printf ("\n\n Por favor introduza o nome do ficheiro com sua extensao \n\n");
      scanf("%s",&nome);
         leitura = fopen(nome,"r");
          if ((leitura) == NULL)
                {
              printf ("\n\n Impossivel abrir o ficheiro \n\n");
                }
         do {
         ch=getc(leitura);
          if (ch == '\n') 
        contador++;
        } while (ch!= EOF);
        fclose (leitura);
        printf ("\n\n O ficheiro tem %d linhas.\n\n",contador);
     }
      
     }
       }
    Obrigado mais uma vez.
     
    Última edição pelo moderador: 12 de Junho de 2008
  15. oi pessoal preciso ler de um ficheiro e gravar numa lista e nao sou muito bom em C e estou com dificuldades. o meu codigo esta assim:


    Código:
    [SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]"stdafx.h"
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdio.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<stdlib.h>
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]#include[/COLOR][/SIZE][SIZE=2][COLOR=#a31515]<string.h>
     
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]typedef[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]struct[/COLOR][/SIZE][SIZE=2] estrutura { [/SIZE][SIZE=2][COLOR=#008000]// estrutura q vai guarda todas as palavras do texto
    [/COLOR][/SIZE][SIZE=2]
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2] atual[20]; [/SIZE][SIZE=2][COLOR=#008000]// vai receber a palavra atual
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] num; [/SIZE][SIZE=2][COLOR=#008000]// posicao da palavra atual 
    [/COLOR][/SIZE][SIZE=2]} estrutura;
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2] nome[1];
    [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=white]ficheiro;[/COLOR]
    estrutura palavra[500]; 
    [/SIZE][SIZE=2][COLOR=#008000]// vai guardar todas as palavras do testo, supondo q sao 500
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]posicao = 0;[/COLOR] [/COLOR][/SIZE][SIZE=2][COLOR=#008000]// posicao no vetor
    [/COLOR][/SIZE][SIZE=2]FILE *leitura; [/SIZE][SIZE=2][COLOR=#008000]// ponteiro para arquivo
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]lerArquivo ([/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000][COLOR=white]) {[/COLOR] [/COLOR][/SIZE][SIZE=2][COLOR=#008000]// funcao q vai abrir o arquivo
    [/COLOR][/SIZE][SIZE=2]printf([/SIZE][SIZE=2][COLOR=#a31515]"\n\n Inserir o nome ou caminho do ficheiro com a respectiva extensao\n\n"[/COLOR][/SIZE][SIZE=2]);
    scanf([/SIZE][SIZE=2][COLOR=#a31515]"%s"[/COLOR][/SIZE][SIZE=2],&nome);
    leitura = fopen(nome,[/SIZE][SIZE=2][COLOR=#a31515]"r"[/COLOR][/SIZE][SIZE=2]);
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (leitura == NULL) {
    printf([/SIZE][SIZE=2][COLOR=#a31515]"Erro ao ler arquivo.\nSaindo do programa.\n"[/COLOR][/SIZE][SIZE=2]);
    exit(0); 
    }
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]buscarPalavra([/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000][COLOR=white])[/COLOR] [/COLOR][COLOR=white]{[/COLOR]
    
    [/SIZE][SIZE=2][COLOR=#0000ff]char[/COLOR][/SIZE][SIZE=2] ch = ' '[/SIZE][SIZE=2]; [/SIZE][SIZE=2][COLOR=#008000]// inicializa ch com caractere invalido
    [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] pos = 0;
    [/SIZE][SIZE=2][COLOR=#0000ff]while[/COLOR][/SIZE][SIZE=2] ((ch = getc(leitura)) != EOF) { 
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] (ch == ' '[/SIZE][SIZE=2]) { 
    palavra[posicao].atual[pos] = [/SIZE][SIZE=2][COLOR=#a31515]'\0'[/COLOR][/SIZE][SIZE=2]; [/SIZE][SIZE=2][COLOR=#008000]// termina a string 
    [/COLOR][/SIZE][SIZE=2]posicao++; [/SIZE][SIZE=2][COLOR=#008000]// proxima palavra
    [/COLOR][/SIZE][SIZE=2]pos = 0; 
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]else[/COLOR][/SIZE][SIZE=2] {
    [/SIZE][SIZE=2][COLOR=#008000]// ler caractere do arquivo e concatena em atual 
    [/COLOR][/SIZE][SIZE=2]palavra[posicao].atual[pos] = ch; 
    pos++; 
    }
    
    }
    }
    [/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=#000000] [COLOR=white]main([/COLOR][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2][COLOR=white]) {[/COLOR]
    lerArquivo();
    buscarPalavra();
    
    
    }[/SIZE]


    ele compila sem erro mas nao abre o ficheiro nem faz akilo ke eu kero. kem poseria me ajudar
     
    Última edição pelo moderador: 16 de Junho de 2008

Partilhar esta Página