• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szukanie wyrazu

Object Storage Arubacloud
0 głosów
283 wizyt
pytanie zadane 18 listopada 2017 w C i C++ przez Armando Obywatel (1,870 p.)

Cześć wszystkim! Dawno się tu nie odzywałem ;)

Mam problem z programem, który ma szukać występowania wyrazów w pliku tekstowym i zapisywać do oddzielnego pliku numer wiersza i kolumny takiego wyrazu. Po uruchomieniu program zawiesza się, ale nie mam pojęcia w jakim momencie. Pragnę dodać, że na początku napisałem identyczny program w C++ i działa bez zarzutu, lecz po napisaniu go w C coś w nim nie działa. Liczę na podpowiedź i z góry dziękuję za pomoc :)

Opis działania algorytmu działającego na łańcuchach:
- wczytanie linii z pliku
- wycinanie z niej poszczególnych wyrazów
- porównanie z wyrazem szukanym
- zapisanie wyniku do pliku


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

void zapisz(int wiersz, int kolumna, char slowo[], char output[])
{
    FILE *plik;
    if((plik=fopen(output, "w") == NULL))
       {
           printf("Nie mozna otworzyc pliku %s do zapisu!\n", output);
           exit(1);
       }
    else
        {
            fprintf(plik, "Slowo %s znajduje sie w wierszu nr %d, w kolumnie nr %d\n", slowo, wiersz, kolumna);
            fclose(plik);
        }
}

void wczytaj_szukaj(char input[], char output[], char slowo_szukane[])
{
    FILE *plik;
    char str[100], line[100];
    int wiersz=0, kolumna=1, dlugosc_wyrazu;
    int i;

    if((plik=fopen(input, "r") != NULL))
    {
        while(fgets(str, 20, stdin) != NULL)
        {
            kolumna = 1;
            wiersz++;
            dlugosc_wyrazu=0;

            for(i=0; i<=strlen(line); i++)
            {
                if(line[i] != ' ' && line[i] != '\n')
                    dlugosc_wyrazu++;
                else
                {
                    strcpy(str, strncpy(str, line, dlugosc_wyrazu));

                    if(strcmp(slowo_szukane, str))
                    {
                        zapisz(wiersz, kolumna, str, output);
                        continue;
                    }
                    else
                    {
                        dlugosc_wyrazu = 0;
                        kolumna++;
                    }
                }

            }

        }
    }
    else
        printf("Nie udalo sie otworzyc pliku");

}

int main(int argc, char **argv)
{
    char input[100] = "input.txt",
    output[100] = "output.txt",
    str[100] = "slowo";

    wczytaj_szukaj(input, output, str);

    return 0;
}

 

komentarz 18 listopada 2017 przez Emil Kob Bywalec (2,640 p.)
Uruchamiasz ten kod na komputerze? jeżeli tak, jaki sens ma przepisywanie go na C? Dodatkowo tak jak wspomniał @Szahid powinieneś użyć debugera do znalezienia przyczyny problemu.
komentarz 19 listopada 2017 przez Armando Obywatel (1,870 p.)
Przepisuję go do C dla czystej praktyki i nauki języka C, ponieważ zaczynałem od C++
komentarz 19 listopada 2017 przez Emil Kob Bywalec (2,640 p.)
Nie no spoko, jednak w programowaniu na PC dąży się do projektowania objektowego z wykorzystaniem gotowych bibliotek zgodne z myślą RAD.

1 odpowiedź

+1 głos
odpowiedź 18 listopada 2017 przez Szahid Pasjonat (20,930 p.)
Do zlokalizowania miejsca gdzie się wysypuje służą breakpointy. W większości środowisk wstawiasz je klikając prawym w miejsce gdzie chcesz żeby program się zatrzymał.

Podobne pytania

+1 głos
2 odpowiedzi 609 wizyt
pytanie zadane 2 stycznia 2021 w C i C++ przez Beginner555 Obywatel (1,760 p.)
0 głosów
1 odpowiedź 1,127 wizyt
pytanie zadane 29 października 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)
0 głosów
1 odpowiedź 284 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...