Niepoprawne działanie funkcji strcmp w oparciu o dane z pliku

0

Witam ponownie, mam kolejny problem. Funkcja poniżej ma porównywać nick gracza z tym podanym przez użytkownika, i w razie powodzenia przekopiować wartości z pliku do obiektu gr. Problem polega na tym, że obecnie działa w sposób przypadkowy, np. wybierając trzeciego gracza zaczyna porównywać go z pierwszym, zwraca prawdę i zaczyna wykonywać instrukcje w oparciu o gracza pierwszego a nie trzeciego. W czym tkwi problem, czy to kwestia niepoprawnego użycia strcmp, czy może problem z ciągami znaków?

 	void szukajgracza(gracz gr){ //PRZEBUDOWA NA STRINGA?
		
		gracz *head=NULL, *wsk=NULL, tempbase;
		char searchnick[30];
		cout << "Podaj swoj nick\n";
		cin >> searchnick;
		fflush(stdin);
		ifstream list("gracze.txt");

		list>>tempbase;
		while(list){

			if(head==NULL){
				head=wsk=new gracz;
				*wsk=tempbase;
				if((strcmp(searchnick, tempbase.player.nick))!=0){
					cout << "Znaleziono gracza w bazie, powodzenia!\n\n";
					strcpy_s(gr.player.nick, tempbase.player.nick);
					gr.player.gry=tempbase.player.gry;
					gr.player.wins=tempbase.player.wins;
					break;
					}
			}
			else{
				wsk->nast=new gracz;
				wsk=wsk->nast;
				*wsk=tempbase;
				if((strcmp(searchnick, tempbase.player.nick))!=0){
					cout << "Znaleziono gracza w bazie, powodzenia!\n\n";
					strcpy_s(gr.player.nick, tempbase.player.nick);
					gr.player.gry=tempbase.player.gry;
					gr.player.wins=tempbase.player.wins;
					break;
					}
				wsk->nast=NULL;
				}
			list>>tempbase;
			}		
	}
1
std::vector<std::string> players;
std::string nick("jakis_tam_nick_do_znalezienia");
std::vector<std::string>::iterator it = std::find(players.begin(), players.end(), nick);

Prosze, ot cala filozofia. Po to ktos napisal te wszystkie ficzery, zeby z nich korzystac, czemu w assembly nie napiszesz funkcji porownujacej napisy? I tak by krocej wyszlo, niz to co tam namotales...

1

hejP
Nie ma co od razu rzucac sie na klase string:P

Z manuala Linuxa dla strcmp:

RETURN VALUE

   **The strcmp()** and strncmp() functions **return an integer** less than,
   **equal to**, or greater than **zero if s1** (or the first n bytes thereof)
   **is found**, respectively, to be less than, **to match**, or be greater than
   **s2**.

A u ciebie

                                if((strcmp(searchnick, tempbase.player.nick))!=0){
                                        cout << "Znaleziono gracza w bazie, powodzenia!\n\n";

Mam nadzieje ze jest jasne :P

0

No właśnie załapałem że właśnie powinno zwracać 0, jak zwykle wyłożyłem się na banałach. Ale wielkie dzięki za pomoc : >

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