Gdzie jest błąd?

#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.

No to się zdecyduj :smiley: Chcesz się uczyć czy nie chesz. Chcesz być początkujący czy zaawansowany. Chcesz rozumieć, czy nie.

Bo póki co wygląda to tak, że zadajesz tuziny podstawowych pytań możłiwych do samodzielnego zgłębienia, bronisz się, że “to cię nie interesuje”, a potem pytasz o języki dla zaawansowanych.

Tak się nie da. Trzeba trochę włożyć wysiłku. Nie wystarczy wizualizować sukcesu. Ten C wcale nie czeka tylko, żebyś go skompilował pozytywnym myśleniem ^^

To konkretnie. Ten co ten kod pisał, to kiepsko się nauczył,
czy my tego nie ogarniamy? :grinning:

Kod jest w porządku, tylko ty nie zaczynasz nauki od podstaw, więc masz problemy ze zrozumieniem.

Weź jakąś książkę z podstawami. Może być nawet Python. Jak zrozumiesz na czym polega programowanie w jednym języku, to inne też nie będą stanowiły dla ciebie takiego problemu.

Książkę polecam dlatego, że kursy internetowe często są różnej jakości i rzadko pisane przez wykładowców, którzy przećwiczyli na uczniach, w jakiej kolejności uczyć, jakiego słownictwa czy metod używać, albo z czym mogą mieć problemy.

Dlaczego ktoś napisał kod (ucząc się od podstaw), który nie działa.
Czy mam się uczyć C++, aby, zrozumieć dlaczego ktoś taki niewypał napisał?
Program ma działać, a nie mam filozofować dlaczego to jest bubel?
Tu są fachowcy i też temu nie zaradzili, oprócz tej porady,
że mam się uczyć. to może będę lepszy od nich i ten kod poprawię , aby zadziałał. :grinning:

Jeśli kod jest dobry to musi być jakiś powód, że jest tak jak jest.