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

[C++] Dlaczego po tym ifie nic się nie wypisuje?

Mały hosting, OGROMNE możliwości
0 głosów
535 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
edycja 17 maja 2018 przez Hiskiel

Witam.

 

Mam takiego ifa:

    }else if(AP.ArgumentsCount==2 && AP[1]=="create"){
        if(AP[2]==AP.OutOfBound) {
            std::cout<<"\tSecond argument is empty!";
            return 5;
        }

        std::cout<<"asd";
    }

Po tym ifie (if(AP[2]==AP.OutOfBound)) nic się nie wykonuje. Cokolwiek bym wpisał to asd się nie wypisze. Nie wiem jaki jest problem. Tutaj kod ArgParsera:

ArgParser.cpp:

#include "ArgParser.h"

ArgP::ArgumentParser::ArgumentParser(int ArgCount, char* ArgVal[]){
	this->ArgsCount = ArgCount;
	this->ArgumentsCount = ArgCount;

	ArgValues.reserve(ArgsCount);

	for(int i=0; i<ArgsCount; ++i){
		ArgValues[i] = std::string(ArgVal[i]);
	}
}

std::string ArgP::ArgumentParser::operator[](int index){
	if(index>=ArgsCount){
		return OutOfBound;
	}
	return this->ArgValues[index];
}

ArgParser.h:

#ifndef ARG_P_ARGPARSER
#define ARG_P_ARGPARSER

#include <string>
#include <vector>
#include <iostream>

namespace ArgP{
	class ArgumentParser{
	public:
		explicit ArgumentParser(int ArgCount, char* ArgVal[]);
		~ArgumentParser() = default;
		std::string operator[](int index);
		int ArgumentsCount;
		std::string OutOfBound = "OutOfBound-ArgParser";
	private:
		int ArgsCount = 0;
		std::vector<std::string> ArgValues;
	};
}

#endif

 

Z góry dziękuję za pomoc.

 

Pzodrawiam.

1 odpowiedź

+1 głos
odpowiedź 17 maja 2018 przez adrian17 Mentor (354,880 p.)
wybrane 17 maja 2018 przez Hiskiel
 
Najlepsza

Bo warunek jest zawsze prawdziwy.

}else if(AP.ArgumentsCount==2 && AP[1]=="create"){
    if(AP[2]==AP.OutOfBound) {

Jeśli ArgumentsCount == 2, to AP[2] z definicji będzie OutOfBound.

(btw, po co masz dwie zmienne ArgsCount i ArgumentsCount robiące to samo?)

komentarz 17 maja 2018 przez Hiskiel Pasjonat (22,830 p.)
Z tymi zmiennymi to jakoś dziwnie wyszło, zaraz to poprawię.

Ale jeśli cały czas będzie OutOfBound, to powinien wypisać tekst, że drugi argument jest pusty i zakończyć program a tu nic.
komentarz 17 maja 2018 przez adrian17 Mentor (354,880 p.)

A, widzę... źle używasz vector.

    ArgValues.reserve(ArgsCount);
 
    for(int i=0; i<ArgsCount; ++i){
        ArgValues[i] = std::string(ArgVal[i]);
    }

Reserve() nie robi tego, co myślisz. Użyj push_back() lub resize().

komentarz 17 maja 2018 przez Hiskiel Pasjonat (22,830 p.)

Dobra, ale teraz to to w ogóle nie działa :/. Usunąłem ArgValues.reserve i w pętli dodawałem przez push_back, ale teraz nie dochodzi mi w ogóle do tego ifa:

if(AP.ArgsCount==2 && AP[1]=="help"){
        std::cout<<"Usage:\n"<<
          /////// w 3 kije tekstu /////////////
    }else if(AP.ArgsCount==3 && AP[1]=="create"){
        char buff[256];
        GetCurrentDirectory(256, buff);
        if(AP[2]==AP.OutOfBound) {
            std::cout<<"\tSecond argument is empty!";
            return 5;
        }

        std::cout<<"asd";
    }

Do tego ifa z create mi nie dochodzi :/

komentarz 17 maja 2018 przez adrian17 Mentor (354,880 p.)
Pokażesz cały kod?
komentarz 17 maja 2018 przez Hiskiel Pasjonat (22,830 p.)
Dobra. Już wiem o co chodzi.

Kiedy wpisuję np. a create, to są 2 argumenty.

Kiedy wpisuję a create something to są 3.

teraz wystarczy zmienić tego ifa na innego i po sprawie.

Dzięki wielkie za pomoc.

Podobne pytania

0 głosów
2 odpowiedzi 421 wizyt
pytanie zadane 5 czerwca 2022 w C i C++ przez wasiu Nowicjusz (140 p.)
0 głosów
3 odpowiedzi 2,414 wizyt
pytanie zadane 1 marca 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 16 marca 2017 w C# przez Magellan Nowicjusz (160 p.)

93,719 zapytań

142,632 odpowiedzi

323,264 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...