ajuda em programaçao C ate as 12 horas

manvix

Membro
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:
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:
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).
 
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.
 
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 *'
"
 
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;
}
 
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:
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?
 
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:
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:
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:
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:
Back
Topo