Strona 1 z 1

Aplikacja do zamykania systemu w c++

: 23 gru 2008, 00:46
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

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

: 23 gru 2008, 01:39
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

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

: 23 gru 2008, 10:04
autor: grymek3
w ' ' daje się znak a nie łańcuch.
Spróbuj
system("pause");

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

: 23 gru 2008, 10:11
autor: panjandrum
Polecenie:
system("pause");
uruchamia polecenie systemowe pause (Windows), a na linuksie i tak takiego nie ma.

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

: 23 gru 2008, 18:39
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:

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

: 23 gru 2008, 20:07
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ąć.

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

: 23 gru 2008, 23:25
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?

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

: 24 gru 2008, 12:28
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 ;-)

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

: 26 gru 2008, 02:31
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

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

: 26 gru 2008, 03:00
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.

Odp: Aplikacja do zamykania systemu w c++

: 26 gru 2008, 11:41
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.

Odp: Aplikacja do zamykania systemu w c++

: 26 gru 2008, 11:59
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

Odp: Aplikacja do zamykania systemu w c++

: 29 gru 2008, 00:04
autor: Hauleth
Po co na końcu tak długo?? Nie lepiej od razu dać:

Kod: Zaznacz cały

system( str.c_char() );
??

Odp: Aplikacja do zamykania systemu w c++

: 29 gru 2008, 00:09
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ą

Odp: Aplikacja do zamykania systemu w c++

: 29 gru 2008, 11:54
autor: mikolajs
Zamiast stdlib.h warto używać cstdlib, pomoże to unikać konfliktów nazw.

Odp: Aplikacja do zamykania systemu w c++

: 29 gru 2008, 17:49
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.

Odp: Aplikacja do zamykania systemu w c++

: 29 gru 2008, 19:19
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());