Te CTRL F9 i F10 kojarzą mi się z code:blocks czy jakimś innym IDE. Jeżeli faktycznie używasz go, to otwiera się terminal, ale tylko do wprowadzania danych - ten terminal jest pod całkowitą kontrolą IDE i nie możesz tu zrobić [w nim zrobić] przekierowania.
Aby w windowsie mieć dostęp do terminala "systemowego" musisz uruchomić go komendą "cmd" [cmd.exe]. Dopiero w nim, jak znajdziesz się w odpowiednim katalogu możesz właśnie to zrobić. W IDE też pewnie gdzieś w konfiguracji możesz sobie takie przekierowania też wpisać na stałe, lub każdorazowo modyfikować..
Jeżeli używasz menadżera plików np totalcommander to całą taką linijkę polecenia + przekierowania możesz wpisać w lini poleceń total commandera czy jakiegokolwiek innego menadżera, jeżeli ma taką możliwość.
niby tak, po prostu przyzwyczaiłem się, że zadania nawet kończące się EOF dało się kończyć pustym Strigiem
a ready() znam, ale z jakiegoś powodu nie korzystam. mam wrażenie(obiecuję sobie w końcu doczytać implementację), że jak zostaną znaki kontrolne w buforze to stream jest ready, co o ile pamiętam kilka razy dało mi WA.
dobra, jeszcze kilka łatwych i czas ruszyć do średnich. tak czy inaczej bez urazy, po prostu mało śpię a to zadanie dawało mi rozstrój żołądka, chociaż rozwiązanie było banalne(a samych wersji algorytmu napisałem ze 4 szukając błędu w obsłudze wejścia)
Raczej estetyka, np ja użyłbym tylko typu int, [iwszędzie zamiast %hd, %d, a w poniższy sposób można deklarować zmienne [także short]:
int stack[11], // tu dodatkowy 1 element
stack_pointer = 0, // też int
operation; // też int
getchar_unlocked() - jeżeli bardzo Ci zależy na i/o ale przecież używaśz wolnego scanf i printf, więc tu raczej użyłbym samego getchar()
scanf("%d\n", &stack[stack_pointer**++**]); // lub %hd "\n"dodatkowo konsumuje enter i nie muszę póżniej "zjadać" go getcharem()
Jeżeli jednak chcesz koniecznie użyć short int to wystarczy jeden wyraz short [kompilatror domyśli się, że chodzi o short int].
Czyli w sumie same takie tam drobiazgi.
PS
Wiadomo, że każdy program, można napisać na 1000 sposobów, więc jeszcze taki mój inny sposób [pomijamy-niepotrzebny skanf z gwiazdką, zawsze gdzieś wczytujemy.]
W gałęzi else [+], można najpierw wczytać: scanf("%hd", &stack[stack_pointer]); bez ++ [i po to był mi potrzebny 11 element], a potem dopiero zastanawiać się co zrobić. Jeżeli 11 to tylko wypisujemy ;( i nic więcej, jeżeli nie to incrementujemy wskaźnik i drukujemy [bo wczytaliśmy już wcześniej, na samiutkim początku pętli]
Chciałbym jeszcze dopisać małe uzupełnienie. W twoim [pierwotnym] kodzie jest jeszcze mała, niewidoczna wada. Ale najpierw jeszcze jeden pomysł na AC tamtym twoim kodem.
Wystarczy tylko dodać dwie magiczne ukośne kreseczki "//" w odpowiednim miejscu, czyli zakomentować, lub wprost usunąć jedną linijkę. Oczywiście domyślasz się, że chodzi o:
// scanf("%hd");
Jednak taki kod ma tą samą wadę co pierwotny, ale jeszcze bardziej "rozbuchaną" i w jeszcze większym stopniu [jeżeli jest to możliwe]. Dodatkowo, dla specyficznych testów, specjalnie-wrednie przygotowanych, być może, może nawet dawać błędne wyniki.
Dlaczego stosujesz konstrukcję:
if (operation == '-') .....
else if (operation == '+') ...
zamiast:
if (operation == '-') .....
else { ........
Dlatego, że zmienna operation, może od czasu do czasu zawierać także "śmieci" [czyli ta zmienna powinna się tak naprawdę nazywać operationORgarbage ]
Czy da się to jakoś naprawić/poprawić? Oczywiście, że można. Np.: Należy wczytywać operację jako string [o długości jednego znaku], czyli nie getchar[_unlocked]. A takie wredne testy to np:
+
-1
+
+2
itd
PS
Jeżeli ktoś uczy się C++ + OOP, może napisać mały template klasy stos dla wartości różnych typów [char, int, long long, string itd] i dwie metody - operatory + - działające w tej klasie.
Mam błąd kompilacji, i nic dziwnego bo zmienna s pojawia się w switch(s), mimo że wcześniej jej nawet nie deklarowałeś (można zresztą kliknąć na błąd kompilacji i przeczytać komunikat błędu). Ale mimo tego daje ci złą odpowiedź, bo próbujesz wczytać t którego w tym zadaniu niema, masz wczytywać póki coś się będzie na wejściu pojawiać. (więc na przykładowych danych nie mógł zadziałać), więc zamień pętlę for (int i...) na while (cin >> znak) i usuń wczytywanie z wnętrza pętli.
Popoprawiaj to i usuń kod z forum bo ci zaliczy.
ps Do tego funkcje które nic nie zwracają masz zadeklarowane jako zwracające inta.
Hej, mój kod w Code Bloksie działa zgodnie z wymogami zadania, ale w Spoju wyskakuje błąd kompilacji - dotyczy to biblioteki conio.h i funkcji getch (). Czym mogę zamienić funkcję getch(), tak aby po wpisaniu liczby także nie pokazywała się ona na ekranie??
include
include
using namespace std;
char dane[10];
int rozmiar=0;
void push()
{
if (rozmiar>=10)
{
dane[rozmiar]=getch();
cout<<":("<<endl;
}
else
{dane[rozmiar]=getch();
rozmiar++;
cout<<":)"<<endl;}
}
void pop()
{
if(rozmiar>0)
{rozmiar--;
cout<<dane[rozmiar]<<endl;}
else cout <<":("<<endl;
}
int main()
{
char wybor;
while(true)
{
wybor=getch();
if (wybor == '-') pop ();
else if (wybor == '+') push();
else cout<<":("<<endl;
}
return 0;
}
Witam , mógłby ktoś zerknąć na ten kod oraz wskazać mi co jest nie tak z tym kodem ?
#include
using namespace std;
int rozmiar;
int dane;
double *tab = new double [dane];
void push()
{
cin >> tab[rozmiar];
rozmiar = rozmiar +1;
cout<<":)"<<endl;
}
void pop()
{ if(rozmiar>=1)
{
cout<<tab[rozmiar]<<endl;
rozmiar = rozmiar - 1;
}
else
{
cout<<":("<<endl;
}
}
int main()
{
char znak;
while(cin>>znak)
{
switch(znak)
{
case '+' : push(); break;
case '-' : pop (); break;
}
}
return 0;
}
po pierwsze nie kompiluje się, zapewne na skutek złego wklejenia kodu - wskazane jest przekazywanie kodu poprzez link do ideone.com15 z jednoczesnym wstawieniem tam danych przykładowych
po drugie (po doprowadzeniu do kompilacji) i wstawieniu danych przykładowych nie daje poprawnego wyniku (dziwne, że w ogóle daje jakiś wynik)
a generalnie, to program nie realizuje tego, co podano w zadaniu - przeczytaj uważnie treść zadania
#include <iostream>
using namespace std;
int main()
{
int stos[10], ile=0,w=1;
string znak;
while(cin>>znak)
{
if(znak=="+")
{
if(w!=2)
{
if(w==3)ile++;
w=4;
cin>>stos[ile];
cout<<":)"<<endl;
ile++;
}
else cout<<":("<<endl;
if(ile>9)
{
w=2;
ile--;
}
}
else
{
if(znak=="-")
{
if(w!=1)
{
if(w==4)ile--;
w=3;
cout<<stos[ile]<<endl;
stos[ile]=NULL;
ile--;
}
else
{
cout<<":("<<endl;
}
if(ile<0)
{
w=1;
ile++;
}
}
else
{
cout<<":("<<endl;
}
}
}
return 0;
}
Witam
Mam pewien problem z zadaniem STOS. Po pewnych modyfikacjach przed ktorymi mialem problem z przekroczonym limitem czasu wyskoczyl mi komunikat o blednym programie.Natomiast szczerze mowiac analizujac go kilka razy nie moge za bardzo znalezc bledu.Liczylbym na jakas wskazowke.Nie szukam gotowego rozwiazania ale podpowiedzi
Mam nadzieje ze dobrze wrzucilem kod