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

Wywoływanie programu z parametrami

Object Storage Arubacloud
0 głosów
798 wizyt
pytanie zadane 16 maja 2016 w C i C++ przez krzakurts Obywatel (1,470 p.)

Witam! 

Wywołuje swój program, który rozwiązuje układy równań liniowych dla różnych typów przy pomocy argumentów. Jednym z nich jest "-e", który ma działać opcjonalnie. Jesli użytkownik poda go, to program wyświetli wektor błędów, natomiast jeśli tego nie zrobi, to po prostu tego wektora nie będzie. 

Jeśli wpisze normalnie "-e" to program działa poprawnie. Jeśli wpisze w miejsce "-e" jakiś inny znak, to program również działa poprawnie. Problem pojawia się wtedy, kiedy po prostu nie wpisuje nic w miejsce "-e". Jak to obejść?

 if(strcmp(argv[3],"-e")){

      cout << endl << "Bledne wywolanie programu." << endl;
      cout << "Poprawne wywolanie programu:" << endl;
      cout << " -t {d|z|f|i} [-e]"<<endl;
      return 3;
   }
/* ............ */ 
  if(strcmp(argv[3],"-e")==0)
    {
      Rzeczywiste.Rozw();
      cout<<Rzeczywiste;
Rzeczywiste.WyznaczWektBl();
    }
  if(strcmp(argv[3],NULL)==0)
    {
      Rzeczywiste.Rozw();
      cout<<Rzeczywiste;
    }
          }

Próbowałem skorzystać z NULL'a , jednak to nie sprawdza się. 

Z góry dziękuję za pomoc :) 

2 odpowiedzi

0 głosów
odpowiedź 16 maja 2016 przez maly Nałogowiec (37,190 p.)
wybrane 16 maja 2016 przez krzakurts
 
Najlepsza

Zrób sobie jakąś funkcje która przeiteruje po wszystkich argumentach i jeśl znajdzie odpowiednią opcję zwróci true a jeśli nie to false.

bool opcja_istnieje(char *nazwaopcji, int argc, char *argv[])
{
    // return true lub false;
}

int main(int argc, char *argv[])
{
	bool opcja_e = opcja_istnieje("-e", argc, argv);
	
	return 0;
}

 

+1 głos
odpowiedź 16 maja 2016 przez niezalogowany

Jest problem bo odwołujesz się do miejsca w pamięci do którego nie masz dostępu, sprawdź czy jest odpowiednia ilość argumentów (służy do tego argc)

if (argc != 4)
{
  print_usage(); // czy cokolwiek innego chcesz zrobić w tym momencie
  return 1;
}

 

komentarz 16 maja 2016 przez krzakurts Obywatel (1,470 p.)
Dodałem  if( argc > 2) , jednak błąd występuje nadal.
komentarz 16 maja 2016 przez niezalogowany

Bo u ciebie są 4 argumenty (ty odwołujesz się do 4: argc[3]), pierwszym argumentem (argc[0]) jest zawsze nazwa uruchomionego programu, później dopiero są parametry, zmień warunek na if (argc > 3)

Czyli twój program trzeba będzie uruchamiać następujące:

myprogram param1 param2 -e

 

komentarz 16 maja 2016 przez krzakurts Obywatel (1,470 p.)
Ok, a jak zrobić to, że jak wczytuje program bez "-e", żeby działało?
komentarz 16 maja 2016 przez niezalogowany

Sprawdzasz ile jest podanych parametrów i zależnie od tego wykonujesz jakieś akcje, nie wiem co dokładnie chcesz osiągnąć:

if (argc == 4) // podane 3 parametry, a więc pewnie i -e
{
  if (strcmp(argv[3], "-e")
  {
    ...
  }
}
else
{
 ...
}

 

Podobne pytania

0 głosów
0 odpowiedzi 437 wizyt
pytanie zadane 30 stycznia 2019 w Offtop przez Konrad Gałach Użytkownik (880 p.)
0 głosów
1 odpowiedź 239 wizyt
pytanie zadane 23 grudnia 2016 w Ruby przez Newperty Początkujący (280 p.)
0 głosów
1 odpowiedź 321 wizyt
pytanie zadane 15 marca 2016 w HTML i CSS przez Filip31411 Dyskutant (8,820 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...