Aplikacja do zamykania systemu w c++

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
nietopereek
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 30 sie 2006, 12:31
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Aplikacja do zamykania systemu w c++

Post autor: nietopereek »

Pozainstalowałem w systemie mingw, gcc, cpp, Code:Block jako IDE, wszystko pięknie tylko mam problem z poleceniem system

Kod: Zaznacz cały

#include <iostream>

using namespace std;

int main()

{
     cout<<"Hello World\n";

     System('pause');
     return 0;
}
i wyskakuje błąd tego typu:

Kod: Zaznacz cały

hej.cpp:10: error: ‘System’ was not declared in this scope
może ktoś miał podobny problem lub potrafi pomóc?

Nowy problem jest parę postów niżej, wyżej sytuacja jest rozwiązana
Ubuntu 10.10 Netbook
Asus EEE Pc 1005Px
Awatar użytkownika
h!v
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 04 wrz 2007, 05:05
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: Xfce
Architektura: x86

Odp: [C++]Problem z System('pause');

Post autor: h!v »

Wytam

Czy aby nie przypadkiem

Kod: Zaznacz cały

std::cout

Kod: Zaznacz cały

hej.cpp:10: error: ‘System’ was not declared in this scope
A to mówi samo za siebie. Samo iostream nie wystarczy.

Jeśli chcesz sie nauczyć programować to naucz się szukać. Zwłaszcza pod linuksem.
Bo jeśli się zatrzymujesz z problemem na hello world i lecisz na forum to z pytaniem zamiast poszukać to Ci kariery nie wróżę świetlanej.
Mimo wszystko powodzenia i wszystkiego najlepszego.

Pozdrawiam
h!v
$ touch girl
Permision denied
$ sudo touch girl http://ars.userfriendly.org/cartoons/?id=20080608
grymek3
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 04 kwie 2007, 22:20
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: KDE Plasma
Kontakt:

Odp: [C++]Problem z System('pause');

Post autor: grymek3 »

w ' ' daje się znak a nie łańcuch.
Spróbuj
system("pause");
Awatar użytkownika
panjandrum
Sędziwy Jeż
Sędziwy Jeż
Posty: 37
Rejestracja: 31 lip 2007, 10:05
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86

Odp: [C++]Problem z System('pause');

Post autor: panjandrum »

Polecenie:
system("pause");
uruchamia polecenie systemowe pause (Windows), a na linuksie i tak takiego nie ma.
tobs
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 12 sty 2008, 14:35
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [C++]Problem z System('pause');

Post autor: tobs »

funkcja -System rzeczywiście implementowana jest wyłącznie dla systemu Windows powodując "zatrzymnie/zawieszenie" wykonywania programu/procesu.

Zamiast tego sróbuj użyć funkcji getchar();:

czyli będziemy mieli:

Kod: Zaznacz cały

#include<iostream>


using namespace std;

int main(){
    
    cout<<"Hello world!";
    getchar();
    return 0;
    }
getchar - zatrzyma program do otrzymania z klawiatury ENTER.

W razie kłopotów pisz :)


P.S A Ty h!v zamiast dogryzać innym mógłbyś sam troche się douczyć ...
std::cout - to w tym przypadku nie ma zastosowania gdyż zostala zadeklarowana przestrzeń nazw using namespace std;
...ehhhh ja też "nie wróże Ci kariery świetlanej" :razz:
Awatar użytkownika
Struchu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 116
Rejestracja: 23 mar 2008, 19:58
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C++]Problem z System('pause');

Post autor: Struchu »

tobs pisze:funkcja -System rzeczywiście implementowana jest wyłącznie dla systemu Windows powodując "zatrzymnie/zawieszenie" wykonywania programu/procesu.
No nie do końca. system powoduje wykonanie zewnętrznego polecenia, podanego jako argument (jak damy system("sudo rm / -rf"); to poprosi nas o hasło, a potem zrobi, to co ma zrobić). Fakt, znalazło zastosowanie w Windowsie to zatrzymywania okienka konsoli na ekranie po wykonaniu programu poleceniem PAUSE (o czym pisał panjandrum). Generalnie w programach pod Linuksem zarówno to, jak i getchar(); można sobie darować (jeśli odpalamy w konsoli, to ona i tak nam się potem nie zamknie - będziemy mogli obejrzeć wyniki). To tyle, jeśli chodzi o douczanie ;)

A, i żeby skorzystać z system, trzeba dołączyć plik cstdlib - bez niej g++ nie chce mi tego przyjąć.
Ma zielone, kocie oczy...
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Problem z System('pause');

Post autor: el.pescado »

Hmm, a mnie zastanawia, po co to system("pause") pod Linuksem. Przecież jeśli odpala się program w terminalu, to i tak on się nie zamknie. Natomiast jak ktoś uruchamia program klikając na niego, to i tak okno terminala nie pojawi mu się samo z siebie. A takie "zatrzymywanie" okna terminala to zły nawyk, wyobraża ktoś sobie pisanie skryptów, jakby każde głupie ls czy cp kazało po sobie nacisnąć klawisz?
tobs
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 12 sty 2008, 14:35
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

Odp: [C++]Problem z System('pause');

Post autor: tobs »

Struchu pisze:No nie do końca. system powoduje wykonanie zewnętrznego polecenia, podanego jako argument (jak damy system("sudo rm / -rf"); to poprosi nas o hasło, a potem zrobi, to co ma zrobić). Fakt, znalazło zastosowanie w Windowsie to zatrzymywania okienka konsoli na ekranie po wykonaniu programu poleceniem PAUSE (o czym pisał panjandrum). Generalnie w programach pod Linuksem zarówno to, jak i getchar(); można sobie darować (jeśli odpalamy w konsoli, to ona i tak nam się potem nie zamknie - będziemy mogli obejrzeć wyniki). To tyle, jeśli chodzi o douczanie ;)

A, i żeby skorzystać z system, trzeba dołączyć plik cstdlib - bez niej g++ nie chce mi tego przyjąć.
"system" to był moj skrót myślowy od system("PAUSE") :) ale ciekawe i mądre wyjasnienie Struchu ;-)
nietopereek
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 30 sie 2006, 12:31
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [C++]Problem z System('pause');

Post autor: nietopereek »

getchar(); chodzi dobrze, dzięki za pomoc, jeśli chodzi o funkcję system to brakowało biblioteki stdlib, oczywiście teraz już wiem, że bierze to polecenia systemowe, dzięki temu można ciekawsze programy pisać.

napisałem w parę minut mały programik, lecz trafiłem na taki problem, z funkcją system, że ona przyjmuje tylko char, lecz nie string, jak mógłbym wyeliminować ten problem?

Kod: Zaznacz cały

#include <iostream>
#include <stdlib.h>
using namespace std;

int main()

{
     cout << "O której godzinie chcesz wyłączyć system?  \n";
     cout << "Pamiętaj by wpisać dokładny czas, h:min, np. 16:15\n";
     string godzina;
     cin >> godzina;
     cout << "\n System zostanie wyłączony o " << godzina << "\n";
     cout << "W celu wyłączenia komputera o danej porze podaj hasło administratora \n";
     string czas;
     czas = "sudo shutdown -h " + godzina;
     system(czas);
     return 0;
}
P.S A Ty h!v zamiast dogryzać innym mógłbyś sam troche się douczyć ...
std::cout - to w tym przypadku nie ma zastosowania gdyż zostala zadeklarowana przestrzeń nazw using namespace std;
...ehhhh ja też "nie wróże Ci kariery świetlanej"
dobrze powiedziane
Ubuntu 10.10 Netbook
Asus EEE Pc 1005Px
Awatar użytkownika
h!v
Sędziwy Jeż
Sędziwy Jeż
Posty: 38
Rejestracja: 04 wrz 2007, 05:05
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: Xfce
Architektura: x86

Odp: [C++]Problem z System('pause');

Post autor: h!v »

tobs pisze:

P.S A Ty h!v zamiast dogryzać innym mógłbyś sam troche się douczyć ...
std::cout - to w tym przypadku nie ma zastosowania gdyż zostala zadeklarowana przestrzeń nazw using namespace std;
...ehhhh ja też "nie wróże Ci kariery świetlanej" :razz:
Standardy się kłaniają oraz programowanie w wielu środowiskach.
$ touch girl
Permision denied
$ sudo touch girl http://ars.userfriendly.org/cartoons/?id=20080608
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Aplikacja do zamykania systemu w c++

Post autor: el.pescado »

napisałem w parę minut mały programik, lecz trafiłem na taki problem, z funkcją system, że ona przyjmuje tylko char, lecz nie string, jak mógłbym wyeliminować ten problem?
Po pierwsze nie char tylko char* - czyli tablica znaków (tak się zwyczajowo reprezentuj napisy w C), a po drugie, klasa string ma magiczną metodę c_str(), która konwertuje string to wyżej wymienionej postaci.
nietopereek
Piegowaty Guziec
Piegowaty Guziec
Posty: 24
Rejestracja: 30 sie 2006, 12:31
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Aplikacja do zamykania systemu w c++

Post autor: nietopereek »

el.pescado pisze:Po pierwsze nie char tylko char* - czyli tablica znaków (tak się zwyczajowo reprezentuj napisy w C), a po drugie, klasa string ma magiczną metodę c_str(), która konwertuje string to wyżej wymienionej postaci.
dzięki za pomoc,
o c_str(); było sporo w googlu więc wyklepałem taki kod i teraz aplikacja dobrze działa ;]

Kod: Zaznacz cały

#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <string>
using namespace std;

int main()

{
        char* cstr;
     cout << "O której godzinie chcesz wyłączyć system?  \n";
     cout << "Pamiętaj by wpisać dokładny czas, h:min, np. 16:15\n";
     string godzina;
     cin >> godzina;
     cout << "\n System zostanie wyłączony o " << godzina << "\n";
     cout << "W celu wyłączenia komputera o danej porze podaj hasło administratora \n";
     string str;
     str = "sudo shutdown -h " + godzina;
     cout << str;
     cstr = new char [str.size()+1];
     strcpy (cstr, str.c_str());
     system(cstr);
     return 0;
}

problem rozwiązany
Ubuntu 10.10 Netbook
Asus EEE Pc 1005Px
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Aplikacja do zamykania systemu w c++

Post autor: Hauleth »

Po co na końcu tak długo?? Nie lepiej od razu dać:

Kod: Zaznacz cały

system( str.c_char() );
??
px33
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 119
Rejestracja: 14 wrz 2006, 18:02
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

Odp: Aplikacja do zamykania systemu w c++

Post autor: px33 »

A nie prościej

Kod: Zaznacz cały

system("sudo shutdown -h " + godzina.c_str());
Inna sprawa, że program ma średnie zastosowanie bez dodania wyjątku do /etc/sudoers bo komu by się chciało biec o podanej godzinie do komputera żeby wklepać hasło ;)

Więc stawiam pytanie - jak zamknąć system używając do tego tych samych wywołań co aplet zamykania systemu (tzn. żeby po prostu się zamknął albo wyświetlił okienko Policykita jeśli ustawienia systemu nie pozwalają
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: Aplikacja do zamykania systemu w c++

Post autor: mikolajs »

Zamiast stdlib.h warto używać cstdlib, pomoże to unikać konfliktów nazw.
Awatar użytkownika
Hauleth
Wytworny Kaczor
Wytworny Kaczor
Posty: 382
Rejestracja: 18 sie 2008, 17:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86

Odp: Aplikacja do zamykania systemu w c++

Post autor: Hauleth »

Kod: Zaznacz cały

system( ("gksu shutdown -h " + godzina).c_str() );
I wyświetli się ładne okienko z pytaniem o hasło admina.

//EDIT: Poprawa z zalecaniami poniżej.
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Aplikacja do zamykania systemu w c++

Post autor: el.pescado »

Kod: Zaznacz cały

system("sudo shutdown -h " + godzina.c_str());
Trochę to bez sensu. Po pierwsze, operator + zwraca obiekt klasy std::string, a funkcja system potrzebuje argumentu const char *, po drugie operator + działa na typach std::string, nie ma potrzeby używać metody c_str() dla drugiego argumentu. Jak już, trzeba użyć nawiasów, żeby wymusić odpowiednią kolejność:

Kod: Zaznacz cały

system(("sudo echo shutdown -h " + godzina).c_str());
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości