Znowu błędy... Nie wiem co zrobiłem źle

0

Po pierwsze.

  • Przepraszam że zakładam temat o mało znaczącej nazwie, po prostu nie wiedziałem jak go nazwać.

  • Nie zbesztajcie mnie za to, że nie umiem wielu rzeczy. W końcu to "newbie" (ale staram się zmieniać i uczyć!)

A więc tak. Postarałem się zrobić pierwszy krok w stronę zrobienia prostej gry tekstowej i w oparciu o moją ZNIKOMĄ wiedzę rozpocząłem budowanie dialogu. Wszystko tłumaczę w komentarzach w kodzie, więc możecie być spokojni, wszystko zrozumiecie.

// Przejście graniczne Słońsk-Przyborów, rozmowa kupca ze strażą

#include <string>
#include <iostream>
#include <conio.h>

const float OplataCelna = 4.49; // Cena w markach Przyborowskich za kilogram towaru kupieckiego
std::string strImieNazwisko, strPytanie1;
float fWaga, fZnizka;

float OplataCelna(float nWartosc1, float nWartosc2) // funkcja obliczająca koszt przejścia granicznego dla kupca
{
      std::cout << "Straz: Naleznosc za przekroczenie granicy wynosi " << (nWartosc1 * OplataCelna) - nWartosc2 << " marek przyborowskich." << std::endl;
}
int main() 
{                                       // odtąd zaczyna się rozmowa ze strażą
    std::cout << "Straz: Dzien dobry panu. Imie i nazwisko, wacpan... mogly podac?";
    std::cin >> strImieNazwisko; // podaje im swoje Imię i Nazwisko
    std::cout << "Straz: Witam, witam - panie " << strImie << ". Ma pan przy sobie dokumenty?";
    std::cin >> strPytanie1; // oraz wybiera z opcji 'ma dokumenty' i 'nie ma dokumentów'
    
    if (strPytanie1 != tak) std::cout << "Okej okej, swietnie." << std::endl; // instrukcje dla odpowiedzi 'tak'
    else std::cout << "Uuuu... niedobrze. Zastrzelic drania!" << std::endl; break; // instrukcje dla odpowiedzi 'nie' lub innej
    
    std::cout << "Przeprowadzimy teraz rewizje panskich towarow. Niech lepiej pan po dobroci powie" << std::endl;
    std::cout << "ile masz tam kilogramow towarow?" << std::endl;
    std::cin >> fWaga; // kupiec podaje wagę swych towarów
    std::cout << "Ile wynosi ulga panstwowa dla twojej dzialalnosci kupieckiej?";
    std::cin >> fZnizka; // i dowolną kwotę zniżki (liczba ta zostanie odjęta od wyniku opłaty celnej
    
    OplataCelna(fWaga, fZnizka); // wywołanie funkcji Opłaty Celnej (przedstawienie wyniku wpasowanego w tekst)
    std::cout << "Szerokiej drogi panie " << strImieNazwisko << "!"; // pożegnanie
    getch();
}

A błędy kompilacji są takie:
user image

0
const float OplataCelna = 4.49; // Cena w markach Przyborowskich za kilogram towaru kupieckiego
float OplataCelna(float nWartosc1, float nWartosc2) // funkcja obliczająca koszt przejścia granicznego dla kupca
{

No to OplataCelna to funkcja obliczająca czy cena w markach?
Przy okazji zachęcam do nazywania stałych dużymi literami, np. OPLATA_CELNA (taka jest konwencja). No i zdaje się, że deklaracja stałej powinna wyglądać tak:

#define const OPLATA_CELNA = 4.49

ale specem od c++ nie jestem.

1

@aurel to nie C, wiec spokojnie można używać consta tak jak było w wersji pierwotnej.
@autor:

  1. NIE nazywa się różnych rzeczy tymi samymi nazwami. Kompilator nie jest jasnowidzem zeby wiedzieć o którą ci w danej chwili chodzi.
  2. Co to znaczy wg ciebie:
strPytanie1 != tak

? Widzisz jak jest pokolorowane to 'tak'? Widzisz różnicę między tym a miejscami gdzie masz stringi? Wyciągnij wnioski.

A odpowiadajac na pytanie postawione w temacie: Jak nie znasz podstaw to pisz MAŁE I PROSTE programy, po 10-15 linijek aż sie tych podstaw nauczysz. Pisanie gry jak ktoś nie potrafi napisać porządnie if'a to jest idiotyzm.

0

Doprowadziłem do porządku kod, został tylko jeden błąd. Nie wiem czemu nie mogę użyć polecenia BREAK w linijce

    else
    {
        std::cout << "Uuuu... niedobrze. Zastrzelic drania!" << std::endl; break; // instrukcje dla odpowiedzi 'nie' lub innej
    }

A co do wypowiedzi Shalom'a:
"Widzisz jak jest pokolorowane to 'tak'? Widzisz różnicę między tym a miejscami gdzie masz stringi? Wyciągnij wnioski."
Czyli jak mam wpisać że "gdy strPytanie1 jest równe 'tak'"?

0
  1. To pytanie jasno wskazuje na to ze powinieneś się bawić plasteliną, a nie pisać programy, a tym bardziej gry. PO CO chcesz tam mieć break? Wiesz w ogóle co robi break? (Pytanie retoryczne, bo gdybyś wiedział to nie zadawałbyś tak głupiego pytania). Break powoduje przerwanie PĘTLI (no i switcha). Masz tam gdzieś pętlę? Nie (a pewnie powinieneś, no ale pewnie do tego miejsca w kursie jeszcze nie doszedłeś...). To co chcesz zapewne zrobić to zakończyć program, co czyni się za pomocą exit().
  2. Tak, masz tam wstawić "tak" ponieważ chcesz to porównań ZE STRINGIEM.
0

Uoł. Dobra. Dzięki za pomocne rady. Po prostu omawiałem ostatnio sobie pętle i była tam notka, że break powoduje przerwanie... no tak, pętli. Ech. Ok. Jakby co to napiszę.

---edit---
po skompilowaniu program zatrzymuje się tylko 2 razy (a powinien o wiele więcej) bym podał Imię i nazwisko, a potem czeka tylko na dowolny klawisz. Po prostu nie prosi mnie o nic więcej i do tego wykonuje instrukcje dla każdej z sytuacji (czyli posiadania i nie posiadania dokumentow)

0
  1. Nie znam się za bardzo na c++, ale czy kiedy używasz i tak tylko przestrzeni nazw std, nie lepiej dodać na początku programu linijkę 'using namespace std'?
 
    std::cout << "Straz: Dzien dobry panu. Imie i nazwisko, wacpan... mogly podac?";
    std::cin >> strImieNazwisko; // podaje im swoje Imię i Nazwisko // musisz to wczytać do dwóch stringów - strImie i strNazwisko. Nie możesz ot tak sobie tego wczytać za pomocą cina (cin wczytuje do spacji, jak chcesz za jednym razem pobrać i imię i nazwisko użyj getline, ale to tu imo bez sensu)
    std::cout << "Straz: Witam, witam - panie " << strImie << ". Ma pan przy sobie dokumenty?"; // gdzie masz jakikolwiek string strImie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1