Forum MOJA PASJA - PROGRAMOWANIE Strona Główna
http://www.programuj.com
  WikiWiki  FAQFAQ    SzukajSzukaj    UżytkownicyUżytkownicy    GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 




Funkcja operująca na tablicy dwuwymiarowej w c


 
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> C i C++
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Złoty Pomidor



Dołączył: 09 Cze 2016
Posty: 3

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Mam do napisania taki program w C "Dane są 2 teksty. Napisz funkcję znajdującą ostatnie wystąpienie dowolnego ze znaków tekstu drugiego w tekście pierwszym.". Póki co myślałam, że ogarnęłam jak wpisać tekst z pliku do tablicy, ale po wypisywaniu jej na ekran dostaję jakieś śmieci niezwiązane z plikiem. Ktoś wie co jest źle i może mnie pokierować dalej?

c++:
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 256
#define MAX_LINES 200
//Dane są 2 teksty. Napisz funkcję znajdującą ostatnie wystąpienie dowolnego ze znaków tekstu drugiego w tekście pierwszym.
 
 
FILE *fd, *ff;
 
int main()
{
 
    int i,len;
    char *tekst1[MAX_LINES],bufor[MAX_LINE],*tekst2[MAX_LINES];
 
    if(!(fd=fopen("DANE1.txt","r")))
  {
    printf("Blad otwarcia zbioru\n");
    exit(2);
  }
  if(!(ff=fopen("DANE2.txt","r")))
  {
    printf("Blad otwarcia zbioru\n");
    exit(2);
  }
 
  while(i<MAX_LINES && fgets(bufor,MAX_LINE,fd))
  {
    len=strlen(bufor);
    bufor[len-1]='\0';
    if(!(tekst1[i]=(char*)malloc((unsigned)len)))
    {
      printf("Brak pamieci\n");
      exit(3);
    }
    strcpy(tekst1[i],bufor);
    i++;
  }
 
  while(i<MAX_LINES && fgets(bufor,MAX_LINE,ff))
  {
    len=strlen(bufor);
    bufor[len-1]='\0';
    if(!(tekst2[i]=(char*)malloc((unsigned)len)))
    {
      printf("Brak pamieci\n");
      exit(3);
    }
    strcpy(tekst2[i],bufor);
    i++;
  }
 
  for(i=0;i<MAX_LINES;i++)
  {
      printf("%c\n",tekst1[i]);
  }
 
fclose(fd);
fclose(ff);
 
}
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Albert Rosenfield
programista


Dołączył: 26 Kwi 2007
Posty: 2418
Skąd: olsztyn

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Cytat:
c++:
int i, len;
...
 
while(i < MAX_LINES && fgets(bufor,MAX_LINE, fd)
{
    ... 
    i++;
}

while(i < MAX_LINES && fgets(bufor,MAX_LINE, ff)) { ... }

Jaka jest początkowa wartość i dla obu pętli?
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Złoty Pomidor



Dołączył: 09 Cze 2016
Posty: 3

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Zmieniłam na i=0 i dalej to samo - śmieci
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Albert Rosenfield
programista


Dołączył: 26 Kwi 2007
Posty: 2418
Skąd: olsztyn

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Gdzie to i = 0 wstawiłaś?

Druga sprawa jest taka, że wypisujesz MAX_LINES linii z tablicy tekst1, a powinnaś wypisać tylko tyle, ile przeczytałaś z pliku.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Złoty Pomidor



Dołączył: 09 Cze 2016
Posty: 3

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
c++:
int main()
{

        int i,len;
        char *tekst1[MAX_LINES],bufor[MAX_LINE],*tekst2[MAX_LINES];
       
        if(!(fd=fopen("DANE1.txt","r")))
  {
    printf("Blad otwarcia zbioru\n");
    exit(2);
  }
  if(!(ff=fopen("DANE2.txt","r")))
  {
    printf("Blad otwarcia zbioru\n");
    exit(2);
  }
  i=0;
 
  while(i<MAX_LINES && fgets(bufor,MAX_LINE,fd))
  {
    len=strlen(bufor);
    bufor[len-1]='\0';
    if(!(tekst1[i]=(char*)malloc((unsigned)len)))
    {
      printf("Brak pamieci\n");
      exit(3);
    }
    strcpy(tekst1[i],bufor);
    i++;
  }


Jak wypisać tylko tyle ile przeczytałam z pliku?
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Albert Rosenfield
programista


Dołączył: 26 Kwi 2007
Posty: 2418
Skąd: olsztyn

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
A druga pętla od jakiej wartości i się zaczyna?

Cytat:
Jak wypisać tylko tyle ile przeczytałam z pliku?

Żeby wypisać tyle, ile się przeczytało, trzeba wpierw gdzieś zapamiętać ilość dodanych linii do tablicy. Można to zrobić tak:
c++:
unsigned n_tekst1 = 0;
 
while(n_tekst1 < MAX_LINES && fgets(bufor, MAX_LINE, fd))
{
        len = strlen(bufor);
        bufor[ len - 1] = '\0';
       
        if( !(tekst1[n_tekst1] = (char*)malloc((unsigned)len)) )
        {
                printf("Brak pamieci\n");
                exit(3);
        }
       
        strcpy(tekst1[n_tekst1], bufor);
        ++n_tekst1;
}

n_tekst1 zawiera liczbę dodanych linii do tekst1. Reszty, mam nadzieję, domyślisz się.
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> C i C++ Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


hosting sponsorowany przez hosted.pl
Powered by phpBB © 2001, 2002 phpBB Group