Wprowadzenie danych z lini poleceń systemu - funkcja main
Ostatnio zmodyfikowano 2015-11-09 15:26
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 |
|
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: 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() |
|
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? |
|
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ł: if( argc == 0 ) { } else if( argc == 3 ) { } else { }
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: |
|
« 1 » |