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

[C++] Jak interpretować argumenty w programie?

Object Storage Arubacloud
0 głosów
840 wizyt
pytanie zadane 9 lutego 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam! Potrafię argumenty "odbierać" i wypisywać. Ale załóżmy, że chciałbym napisać program z przełącznikami "-c" i "-d" które nie byłyby obowiązkowe. I teraz nie wiem jak sprawdzić czy taki argument został użyty. Takie coś nie działa:

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){

    for(int i=0;i<argc;i++)cout<<argv[i]<<" - "<<i<<"\n";


    if(argv[1]=="-c")cout<<"It works!"; // Nie działa

    return 0;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 9 lutego 2018 przez dariusz Obywatel (1,800 p.)
wybrane 9 lutego 2018 przez Hiskiel
 
Najlepsza
//g++ -Wall -Wextra temp.cpp
#include <iostream>
#include <cstring>
 
using namespace std;
 
int main(int argc, char *argv[]) {
 
    for (int i=0;i<argc;i++) {
		cout<<argv[i]<<" - "<<i<<"\n";
	}
 

    if (argc > 1 && strcmp(argv[1],"-c") == 0) {
		cout<<"It works!\n";
	}

    return 0;
}

W Twoim kodzie porównałeś wskaźnik na tablicę charów z literałem. Do porównywania tablic znakowych w C i C++ używa się funkcji string compare strcmp(). Dokumentacja do funkcji.

Dobrym nawykiem jest też sprawdzenie czy liczba argumentów jest wystarczająca. Twój program uruchomiony bez argumentu wykrzaczy się. 

komentarz 9 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Ale przecież już uruchamiając program podajemy mu argument - nazwę programu
komentarz 9 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
Ale jest to tylko jeden argument, dlatego kolega sprawdza, czy ich liczba przekracza jedynkę.
komentarz 9 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Spq, spq xD
komentarz 9 lutego 2018 przez Hiskiel Pasjonat (22,830 p.)
Dzięki bardzo :D
+2 głosów
odpowiedź 9 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

Łańcuchów znaków nie porównuje się operatorem porównania. Od tego służy funkcja strcmp. Możesz też przerzucić całą tablicę parametrów do tablicy std::string i wtedy użyć ==, ale mija się to trochę z celem.

Podobne pytania

0 głosów
1 odpowiedź 414 wizyt
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 18 kwietnia 2019 w C i C++ przez plotrekpl Nowicjusz (190 p.)
–1 głos
1 odpowiedź 909 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez Pandzia156 Nowicjusz (120 p.)

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!

...