Jump to content
  • 0

pomoc chybné načítání nicku ze souboru


vladasavel

Dotaz

já už nevím co dělám špatně. v prikazu si zapisu jmeno..vse ok..ale kdyz to chci pouzit tak prostě ne..u jednoho to nfunguje pro všechny jmena a u druhýho pro nikoho..Help me :)
Edit: v souboru jsou jména zapsaný správně

 

 

//funguje pro všechn if(IsPlayerRedaktor(playerid)) return SendClientMessage(playerid,-1,"Nejsi redaktor");
//nefunguje pro nikoho if(!IsPlayerRedaktor(playerid)) return SendClientMessage(playerid,-1,"Nejsi redaktor");
stock IsPlayerRedaktor(playerid)
{
    new string[256], name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME+1);
    if(!fexist(Redaktors)) {new File:fhandle = fopen(Redaktors,io_write); fclose(fhandle);}
    new File:hfile = fopen("Redaktors.txt", io_read);
    while(fread(hfile, string))
    {
        if(!strcmp(string, name, false) && strlen(string))
        {
            return true;
        }
    }
    fclose(hfile);
    return false;
}

 

 

Edited by vladasavel
Link to comment
Share on other sites

12 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

Hmgf, zkus si radky vypsat, co se porovnava s cim a v tom vnorenym ifu jeste printf "povedlo se" a zkoumat co to dela. V kodu nevidim chybu.

 

Jenom Redaktors je nejakej makro?

Edited by HighPrint
Link to comment
Share on other sites

  • 0

Skús to takto:

 

Je to síce to isté, len opačne....a ak nie tak ako píše kolega nado mnou...vypíš si obsah strcmp

while(fread(hfile, string))
    {
        if(strcmp(string, name, false) && strlen(string))
        {
            return false;
        }
    }
    fclose(hfile);
    return true;
Edited by Mattsy
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
  • Globální moderátor

To podle me neni zrovna idealni reseni, prece jenom kdyz se neshoduje prvni nick tak hned vrati false a muze se nachazet treba az na konci

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0
  • Globální moderátor

No dovolím si trochu nesouhlasit... 

 

Když máš takovýhle seznam:

 

HighPrint

Mattsy

vladasavel

 

A teďka chce najít nick vladasavel, tak na prvním iteraci cyklu mu to rovnou vrátí FALSE, tzn strcmp("vladasavel","HighPrint") && strlen("HighPrint"); // 1/-1 && 1 --> to se vyhodnotí vždy (strcmp vrací -1/1 když předchází/nepředchází jednotlivé znaky), 0 vrací jen když najde shodu.

 

Kdežto to jeho vrátí TRUE jen v případě, že tu shodu najde (negace 0 && 1)

 

Jenom jsem si teďka uvědomil, že možná před tím returnem ten soubor uzavři. 

fclose(hfile);
return true;

Jinak už asi vím, proč ti to chybu dělá... fread bere totiž celý řádek, tzn je tam uložený i newline, proto bys je měl odparsovat (ve winu \r\n, linuxy \n). Takže tam přidej něco v tomto smyslu:

new pos; // nad cyklem samozřejmě 
pos = strfind(string, "\r\n", false); // případně jen \n
if (pos != -1) strdel(string, pos, pos+2);

Jsi schopný člověk, tak snad to nemusím ani vysvětlovat co dělá ten kód nad tím :)

Edited by HighPrint
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

to odřádkování mám když zapisuji jeho jméno. Ty by mělo teoreticky stačit ne ?
jinak..printnul jsm si a vše co šlo do souboru jsem si zapsal víc jmen a pak jen prišel za jmeno který bylo uplrstřed. 
do funkce IsPlayerRedaktor jsem si nechal printnout jmeno a to jméno mi to vypsalo...vubec nechápu kde je problém.

Link to comment
Share on other sites

  • 0
  • Globální moderátor

Ty mě asi nechápeš... ty ty newliny tam máš a musíš je dát pryč jinak se porovnává řádek takto:

 

"jméno\r\n" s "jméno".

 

Shodné to nikdy nebude

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

Mne neďakuj...nepomohol som ti

 

 

HighPrint: Jááj takto....nejako mi to došlo....asi som sa do toho moc zamotal...ale zase je pravda že som si to na wikine nevyhľadal ale len strieľal...no na to s tými riadkami by som určite neprišiel...aspoň som o niečo múdrejší :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...