Gdzie jest błąd?


klikam na wykonaj i nic się nie dzieje

To rozwiązanie nie będzie działało, bo pojawią się zaraz problemy przy pracy na łańcuchach. Na potrzeby nauki zrezygnuj z polskich znaków, programuj w cygwin, albo zainstaluj Linuksa :smiley:

CMD.exe nie chce chyba tego pokazać :grinning:

#include <iostream>
using namespace std;

int main() {
int i, n;
bool isPrime = true;

cout << "Wpisz liczbê naturaln±: ";
cin >> n;

// 0 and 1 are not prime numbers
if (n == 0 || n == 1) {
    isPrime = false;
}
else {
    for (i = 2; i <= n / 2; ++i) {
        if (n % i == 0) {
            isPrime = false;
            break;
        }
    }
}
if (isPrime)
    cout << n << " to jest liczba pierwsza";
else
    cout << n << " to nie jest liczba pierwsza";
return 0;

}

Po skompilowaniu… uruchamiam plik.exe


wpisuję 15 i naciskam return.
Zamiast odpowiedzi… okienko się zamyka.

Jak zatrzymać to okienko?

Przed return dodaj std::cin.get();. Powinno zadziałać, aby wyjść będziesz musiał wcisnąć jakiś przycisk po zakończeniu programu.


dalej tak samo się zamyka

To wszystko jest bardzo skomplikowaną metodą bronienia się przed zrozumieniem, jak to działa. Zamiast dodawać ciny, breaki itd, należy odpalać program bezpośrednio w CMD, a nie nakazywać mu rysować włąsne okno, które zniknie :smiley:
I to nie jest kwestia wygody/opinii. To po prostu działa inaczej.

A co do kodowania… Ten program nie stosuje żadnego kodowania. Stosuje jednobajtowe strumienie danych. To wyłącznie kwestia wyśwuetlania. Krótki kurs: https://www.dobreprogramy.pl/Nie-ma-czegos-takiego-jak-czysty-tekst-zawilosci-kodowania-znakow,Seria,524.html

Sądzę, że ten kod pisał ktoś, kto ma to ogarnięte.
A ja mam się uczyć, żeby tego gościa poprawić?
Toż to lata nauki i doświadczenia.

Dziwię się że w C++ nie ma (chyba), czegoś takiego
jak msgbox, który wyświetla informację

Nawet proste skrypty vbs to potrafią.

Zgadzam się, to co podałem to jest klasyczna ścieżka nauki - niestety. Podałem ją jako trop i bez problemu znajdzie na ten temat więcej informacji. Jest to nieco lepsze niż typowy “system pause”. Problem polega na tym, że nie mam za bardzo czasu tłumaczyć takich szczegółów. Wychodzę tez z założenia, że jeśli ktoś jest naprawdę zainteresowany to sam we własnym zakresie powinien drążyć takie tematy.

Nie rozumiesz. To ty odpalasz ten program nieprawidłowo. To ty masz zmienić sposób jego uruchamiania. Program w C, żaden!, nie ma zaimplementowanego sposobu wychodzenia z konsoli.

A VB, w wersji szóstej porzucony w 2002, a w obecnej - rok temu, jest ślepą uliczką rozwoju. Podczas gdy jego obsługa MsgBox wynika z tego, że sam implementuje metody rysowania po płótnie, wołania Win32 i GDI. C również to potrafi. Musisz zaincludować Windows SDK i utworzyć winmain().

Zwracam też uwagę na to, że output na konsolę jest zwsze lepszy do debugowania niż output do msgbox. Mniejszy upór pozwoliłby zrozumieć, dlaczego.

Klasyczna niestety na polskich uczelniach dekad ubiegłych, gdzie “mamo mamo jestem hakerem” oraz nieuczenie o Unicode były standardem, a system(“pause”) nie był rozumiany jako wpajanie tragicznych nawyków.

Na szczęście się to zmienia. Moja katedra uczyła inaczej, swoich studentów też uczyłem inaczej ^^

1 polubienie

Widzę, że ten C/C++ to zły wybór.
Jaki jest więc najbardziej przystępny język programowania?

Dla początkujących: Python
Dla roszczeniowych: LEGO Mindstorms

:wink:

2 polubienia

Tego co tutaj napisałeś kompletnie nie rozumiem. Wysyłając te jednobajtowe strumienie danych i chcąc przedstawić jakąś literę musi wybrać jedno z kodowań, aby liczbowo reprezentować owy znak. Następnie ta liczba trafia na terminal windowsa, który ją interpretuje odczytując znaki z jakiejś tablicy kodowania 852 i wychodzi kaszanka :stuck_out_tongue_winking_eye:

A dlaczego dla początkujących?
To jak się go nauczę to będę musiał ponownie się uczyć innego,
bo nie jestem już początkującym?

Masz rację, zacznij od Assemblera x86 z rozszerzeniami x64, wołanymi z obiektowego C# Core w wersji webowej. Nie będziesz się musiał uczyć niczego więcej. Wszak najwyraźniej nie uznajesz się za początkującego.

@anon741072 - kodowanie jest wybierane przez terminal, podczas wyświetlania. Jednobajtowe strumienie nie mają żadnego kodowania. Dopiero wielobajtowe mają zawsze jakieś “przymusowe” kodowanie, bez którego się nie wyświetlą ^^

Ja mam swój zawód i wiele czasu codziennie muszę poświęcać na nowinki
w swoim fachu (czytać biuletyny i publikacje naukowe), aby nie wypaść z fachu.
Praca też mi zajmuje część dnia. A życie osobiste?
Nie widzę tego, że będę wtajemniczał zawiłości programowania,
pozostawiam to programistom.
Jeśli coś chcę sam wykonać, to po poradę zwracam się do fachowców.

Zawsze musi być jakieś kodowanie, choćby jednobajtowe ascii :thinking: Jakoś nie przemawia do mnie twoje tłumaczenie :joy:

Chodzi mi o to, że ze stringa jednobajtowych ASCII nie wynika bezpośrednio, w jakiej stronie kodowej ma być wyświetlany. Jest to zewnętrzna informacja. Podczas, czy w przypadku UTF-8, UTF-16, UCS-2 i Unicode BOM LE/BE jest to metadana wynikająca z jego kształtu.