Witam, mam problem. Chce zrobić program, który będzie pobierał ilość sekund do zamknięcia komputera od użytkownika, a potem wykonywał polecenie “shutdown -s -t [tutaj_zmienna_int_od_usera]”
Napisałem coś takiego:
#include
#include
using namespace std;
int main()
{
cout<<"Podaj czas do wylaczenia: ";
int czas;
cin>>czas;
system("shutdown -s -t "+czas);
getch();
return(0);
}
Lecz po użyciu wyświetla się, że nazwa katalogu lub składnia etykiety woluminium jest nie poprawna, choć jak piszę dokładnie to samo w konsoli to działa.
Dodam jeszcze, że gdy wpiszę ręcznie czas, a program nie będzie pobierał danych, tylko wyświetlał komunikat, to cały czas komunikat sie wyświetla i nic się nie dzieje.
Proszę o pomoc, co robię źle.
Chciałbym jeszcze zaznaczyć, że w C++ “programuje” 2 dzień = jestem początkujący.
#edit1
Zauważyłem teraz, że gdy wpisze na przykład “90”, to pisze: “Dysk nie został odnaleziony”, a gdy inne cyfry, to np. “Polecenie “suopr” nie zostało odnalezione[…]”. Czy to chodzi o typ zmiennej? Wydaje mi się, że int to doby typ, bo za pomocą cout wyświetla dobrą cyfre, a nie zamienia na inne znaki.
Czemu początkujący, nie zaczną od poczytania kursu, napisania jakiegoś kalkulatora, nauczą się operować stringami, tablicami a dopiero potem biorą się za programy które wymagają już jakiejś wiedzy ?
Użyj stringów, jednemu nadaj wartość "shutdown -s -t " i dodaj potem tą zmienną int, być może będzie potrzebny stringstream ale powinien wystarczyć operator “>>”.
Nie mogę sobie poradzić z tym, a zależy mi na szybkim rozwiązaniu problemu. Próbowałem “>>” i “stringstream”, ale nie moge coś zrobić. Mógł byś mnie troche pokierować?
To nie działa, program już pobiera wszystko i jest dobrze i zawsze jak jest dobrze wyświetla ostatni tekst, który był podany wyżej w cout. Może są jakieś inne polecenia, oprocz system?
Btw. KaMiLLOoO ta funkcja, którą ty podałeś to jest to samo co samo system, przynajmniej to wnioskuje po błędnym użyciu funkcji system, która jaką błąd zwróciła, że musze użyc char.
O! Próbowałem wcześniej podobnie, inne nazwy zmiennych i nadal nie działa. W tym kodzie jak wpisze, np. 60 to zchodzi linijke nizej i dalej moge pisac co wy chodzi na to, że zawsze wywołuje się funkcja getline. Nie rozumie co tu nie działa
kalin93 ma całkowitą rację, Tobie brakuje PODSTAW! W każdym porządnym tutorialu/książce jest napisane, że cudzysłów tworzy C-string, czyli const char *, a jak powinieneś wiedzieć(choć wątpię w to) jeśli doda się do niego operatorem jakiś typ, to tylko przesuwany WSKAŹNIK o tyle bajtów ile było podane w tym incie.
Obrazowo:
const char* tmp = reinterpret_cast(0); //Ustawiamy wskaźnik na 0(NULL).
std::cout << reinterpret_cast(tmp); //Wypisze 0 jako iż wskaźnik wskazuje na ten bajt.
int offset = 10; //Przykładowy offset.
tmp = tmp + offset; //Do WSKAŹNIKA dodajemy offset.
std::cout << reinterpret_cast(tmp); //Wypisze 10 jako iż przesunęliśmy WSKAŹNIK o 10 bajtów.
Tak przedstawia się Twój błąd. Rozwiązanie jakie podał kalin93 jest jak najbardziej poprawne.
Przykro mi, ale bardziej zagmatwałeś kod. Po co zaprzęgać do tego funkcje do operacji na c-stringach, jeśli można użyć zgrabnej klasy std::string. Jest mniej kodu i dzięki temu jest on czytelniejszy. Do tego mieszamy funkcje z C ze strumieniami C++ co uważam(w tym wypadku) za głupotę.
@ fiftygrosh : i tym sposobem pokazałeś, że nie znasz operatorów C++
Operator << to przesunięcie bitowe w lewo, czyli wychodzi na to, że przesuwasz ADRES WSKAŹNIKA o czas bitów w lewo To nie jest przeładowany operator strumieni, to zwykły operator arytmetyczny.