Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Cudni compiler error i warning

[es] :: C programiranje :: C za početnike :: Cudni compiler error i warning

[ Pregleda: 489 | Odgovora: 1 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

d3x
Sarajevo

Član broj: 39445
Poruke: 35
*.BH-CabelNET.GlobalNET.ba.



Profil

icon Cudni compiler error i warning30.12.2006. u 19:43

evo jednog programa koji sam napravio prije par minuta.
program uzima stringove iz datoteke i sortira ih abecedno i onda sortirane izbacuje u novu datoteku.
u main funkciji se racuna koliko ima linija unutar datoteke, tj koliko ima stringova.

ulazna datoteka je u formatu

aaaaaaaa
bbbsbsbbsb
cafaagafascca

ovi stringovi treba da se sortiraju po abecedi ebz obzira na velika i mala slova (stricmp).

Pogledajte code ja ne mogu da odgonetnem u cemu je problem sa ovim.
Code:

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

struct str { char linija[50]; };
void sortiraj(int, char*, char*);
int main()
{
    int i;
    char c, imeUlazna[20], imeIzlazna[20];
    printf("Unesite ime ulazne datoteke:");
    scanf("%s", &imeUlazna);
    printf("Unesite ime izlazne datoteke:");
    scanf("%s", &imeIzlazna);
    FILE* fpFile = fopen(imeUlazna, "r");
    if (fpFile == NULL)
    {
        printf("Greska pri otvaranju fajla %s.", imeUlazna);
        return 0;
    }
    while (c = fgetc(fpFile)!=EOF)
    {
        if (c == '\n')
            i++;
    }
    
    sortiraj(i, imeUlazna, imeIzlazna);
    getch();
return 0;
}

void sortiraj(int brojStringova, char* imeUlazna, char* imeIzlazna)
{
    int i, j;
    char cBuffer[50];
    
    struct str stringovi[brojStringova];
    for (i = 0; i<brojStringova; i++)
        for (j = 0; j<50; j++)
            stringovi[i].linija[j] = '\0';
    FILE* fpFile = fopen(imeUlazna, "r");
    if (fpFile == NULL)
    {
        printf("Greska pri otvaranju fajla %s.", imeUlazna);
        return;
    }
    i = 0;
    while (fscanf(fpFile, "%s", &cBuffer)!=EOF )
    {
        stringovi[i].linija = cBuffer;
        i++;
    }
    fclose(fpFile);

    for (i = 0; i<brojStringova; i++)
        for (j = 0; j<brojStringova-i-1; j++)
        {
            if (stricmp(stringovi[j+1].linija, stringovi[j].linija) < 0)
            {
                char temp[50] = stringovi[j+1].linija;
                stringovi[j+1].linija = stringovi[j].linija;
                stringovi[j].linija = temp;
            }
        }

    fpFile = fopen(imeIzlazna, "w");
    if (fpFile == NULL)
    {
        printf("Greska pri kreiranju fajla %s.", imeIzlazna);
        return;
    }
    for (i = 0; i<brojStringova; i++)
        fprintf(fpFile, "%s\n", stringovi[i].linija);
    
    fclose(fpFile);
    printf("\nStringovi su sortirani.");
return;
}




hvala unaprrijed
30.12.2006. u 19:43 

SuPeR_MaSteR
Mladen Krstic
Loznica

Član broj: 88590
Poruke: 114
86.58.20.*

Sajt: mladen.krsticc.net


Profil

icon Re: Cudni compiler error i warning31.12.2006. u 13:21
Nemam sad vremena ovo da sredjujem ali primetio sam odmah par gresaka:
Code:
scanf("%s", &imeUlazna);

Posto je string u pitanju, ne treba ti address-of (operator&).
Takodje i za imeIzlazni string..
Code:

printf("Unesite ime izlazne datoteke:");
....
FILE* fpFile = fopen(imeUlazna, "r");

U C-u varijable trebas deklarisati na pocetku bloka, znaci u tvom slucaju, na pocetku definisanja funkcije.
Code:
while (c = fgetc(fpFile)!=EOF)

Mozda je sigurnije da koristis feof() funkciju za odredjivanje kraja file-a.
Posle provere, zatvori fajl ili ga u funkciji sortiraj ne otvaraj ponovo.
Code:
void sortiraj(int brojStringova, char* imeUlazna, char* imeIzlazna)
{
   ....
    struct str stringovi[brojStringova];
   ...
}

Varijabla brojStringova bi morala biti konstanta.
Code:
char temp[50] = stringovi[j+1].linija;

Stringove ne mozes ovako dodeljivati, ili kroz ciklus, ili upotrebom funkcije strcpy() iz header-a string.h
Code:
return;

Ako ti je funkcija tipa void, onda ona nema povratnu vrednost, tj. nepravilno je koristiti naredbu return.
Ako ne mozes da pobedis, mozes poraz da prihvatis kao deo procesa dobijanja.
31.12.2006. u 13:21 

[es] :: C programiranje :: C za početnike :: Cudni compiler error i warning

[ Pregleda: 489 | Odgovora: 1 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.