Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wprowadzenie danych z lini poleceń systemu - funkcja main

Ostatnio zmodyfikowano 2015-11-09 15:26
Autor Wiadomość
zabsontoziomal
Temat założony przez niniejszego użytkownika
Wprowadzenie danych z lini poleceń systemu - funkcja main
» 2015-11-09 13:50:13
Mam taką uwagę w zadaniu: "dane d i g wprowadzać do programu z linii poleceń systemu operacyjnego (jako parametry funkcji main)"

I z tego co wyczytałem to chodzi o to, że odpalając program przez konsolę mam zrobić tak, żeby po podaniu jego nazwy i przedziału d,g pojawiało się rozwiązanie, zamiast odpalania normalnie programu i przechodzenia przez jego kolejnego kroki - podanie parametrów po wyświetleniu tekstu czyli powinno to wyglądać tak w konsoli: "plik 1 100" i wyświetla się rozwiązanie tak? Jak mam do tego dojść, albowiem gdy mam napisaną funkcję własną, to do funkcji main mam dać:
main (int argc, char*[]) tak? Mógłby mi to ktoś pokazać na moim programie, albo wytłumaczyć?

http://pastebin.com/FKdkgEQ1
P-139845
michal11
» 2015-11-09 14:16:41
Dokładnie tak jak piszesz, zamień
int main()
 na
int main( int argc, char *[] argv )
 Wtedy argc będzie liczbą oznaczającą ile danych zostało podanych w linii poleceń a argv to te dane w postaci tekstu, ważna uwaga argv[0] to nazwa programu a dopiero późniejsze el. tablicy to parametry, czyli takie odpalenie programu:
plik 1 100
 da ci taką tablice:
C/C++
argv[ 0 ] = "plik";
argv[ 1 ] = "1";
argv[ 2 ] = "100";
i teraz jeżeli potrzebujesz tych liczb jako intów wystarczy użyć funkcji do konwersji np. atoi()
P-139848
zabsontoziomal
Temat założony przez niniejszego użytkownika
» 2015-11-09 14:24:11
Dzięki, zrobiłem właśnie coś takiego http://pastebin.com/XPRFu1Sf , i po wpisaniu do konsoli ./main 1 100 podaje od razu prawidłowy wynik. Jeszcze jakbyś, mógł proszę odpowiedzieć:
1. Co myślisz o tym kodzie, wszystko w porządku zaimplementowałem?
2. Da się tak zrobić, że po wpisaniu w terminalu ./main ( tutaj bez niczego, żadnego przedziału) program odpalał się normalnie i wyskakiwały cout proszące o podanie przedziału?
P-139850
michal11
» 2015-11-09 15:26:00
Przede wszystkim kod wstawiaj na forum w znaczniki a nie na pastebinie.

1. W jakiś dziwny sposób konstruujesz pętle for, niepotrzebne jest to
else continue
 bo to de facto nic nie robi (w tym przypadku). Moim zdaniem nie powinieneś w pętli for jako warunku kończącego dawać wywołania funkcji sqrt() większość kompilatorów i tak to pewnie zoptymalizuje ale lepiej najpierw wynik zapisać do zmiennej i w pętli porównywać tylko zmienną, szczególnie, że ten pierwiastek nie zmienia się w trakcie działania tej pętli. No i sposób zwracania wartości z funkcji liczbapierwsza() mógłby być bardziej "sprytny"
return( licznik1 == 1 );
.

2. Oczywiście, że można i widzę, że praktycznie to zrobiłeś, ja bym to jedynie trochę zmodyfikował:
C/C++
if( argc == 0 )
{
    //wpisywanie z klawiatury
}
else if( argc == 3 )
{
    //wartości z linii wywołania, nie zapomnij o sprawdzeniu czy rzeczywiście wczytano liczby a nie na przykład jakieś słowa
}
else
{
    //błąd za mało lub za dużo danych
}

tego ostatniego elsa możesz pominąć jeżeli założysz, że danych w linii wywołań może być więcej niż 3 ale bierzesz tylko pierwsze 2, czyli:
C/C++
else if( argc >= 3 )
{
    //wartości z linii wywołania, nie zapomnij o sprawdzeniu czy rzeczywiście wczytano liczby a nie na przykład jakieś słowa
}
P-139855
« 1 »
  Strona 1 z 1