Sczytywanie wyrazów i cyfr z pliku .txt

0

Witam,

wiem, że mój program jest z mnóstwem błędów nie do przyjęcia w programowani w C, ale dopiero zaczynam i nie mam pojęcia jak go poprawić.

Założenie programu:

rozkodowywanie pliku .txt w którym zapisany jest łańcuch znaków składający się z liter i cyfr.
Program zlicza ile jest wyrazów, spacji, cyfr. Następnie tworzy tablice wpisując w niej powstałe wyrazy z cyfr i liczb.
Przykład:

  • Ala ma 5 kotow*
    wyr[1] wyr[2] cyf[1] wyr[3]

Za każdą pomoc serdecznie dziękuję.

 
#include <stdio.h>
#include <stdlib.h>

FILE *f;

void main()
{
	if ((f=fopen("liczby.txt","r"))==NULL)
	  {
		printf("nie moge otworzyc");
		exit(1);	
	  }  
	int wiersz = 0;
    char znak;
    while((znak = getc(f)) != EOF) 
       {
        if(znak == '\n')
          ++wiersz;
       }
   fclose(f);
   if ((f=fopen("liczby.txt","r"))==NULL)
      {
	    printf("nie moge otworzyc");
	    exit(1);	
      }

    int i=0, sp=0, words=1, s=0, digits=0;
    char line[100], temp=32;
	for (i=0;i<wiersz;i++)
   {
        fgets (line, 100, f);
        puts(line);
        printf("\n Liczba wierszy: %d",wiersz+1);
        char tab[i];
        int cyf[i];
	    
	 while(line[i]!='\0')                                          
        {
              {
                          if(isspace(line[i]))                                                                  
                          {
                                    sp++;
                                    if(isalpha(line[i]))    
                                             words++;
                                             line[i]=tab[i];
                          }
                         else
                        {
                                      if(isdigit(line[i]))                       
                                          {
										   digits++;
                                           line[i]=cyf[i];
										   } 
                                      else
                                           s++;
                        }
               }
                temp=line[i];
                i++;
        }
      	for (i=0;i<wiersz;i++)
      {
	  printf("\n Wyrazow = %d Spacji = %d Symboli = %d Cyfr = %d\n",words,sp,s,digits);
      printf("\n Wyrazy = %c \n",tab[i]);
      printf("\n Cyfry = %d \n",cyf[i]);
      }
   }
}

0

Zacznij od przeczytania jakiegoś kursu, nie mamy jak ci pomóc dopóki nie ogarniasz najbardziej podstawowych podstaw, na przykład faktu że tablicy w C/C++ oraz innych C-podobnych indeksuje się od zera.
Niepotrzebnie napiętrzyłeś warunków i pętli, wystarczy tyle:

#include <stdio.h>
#include <ctype.h>
 
#define MAXCOUNT 1000
#define MAXWORD 64
 
int main()
  {
   static char words[MAXCOUNT][MAXWORD];
   FILE *fd=fopen("liczby.txt","r");
   if(!fd) exit(fprintf(stderr,"nie moge otworzyc\n"));
   int alpha=0,digit=0,sign=0,space=0,word=0,letter=0,inword=0,ch;
   while((ch=fgetc(fd))!=EOF)
     {
      // tu należy sprawdzić czy word i letter mieszczą się w granicach
      if(!isspace(ch))
        {
         words[word][letter++]=ch;
         if(isdigit(ch)) ++digit;
         else if(isalpha(ch)) ++alpha;
         else ++sign;
        }
      else
        {
         if(ch==' ') ++space;
         if(inword)
           {
            words[word++][letter]=0;
            inword=letter=0;
           }
        }
     }
   printf("Wyrazow = %d Spacji = %d Symboli = %d Cyfr = %d\n",words,space,sign,digits);
   for(inword=0;inword<word;++inword)printf ("%d: %s\n",inword,words[inword]);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1