Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Xcode C++ problem z getch()


  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 Slidor

Slidor
  • 20 postów

Napisano 10 lipca 2016 - 14:23

Witam!

Przeszukałem praktycznie wszystkie linki, w jakie mogłem wejść, próbując rozwiązać mój problem. Polega on na tym: 

Zacząłem niedawno się uczyć programowania w C++ na Mac'u w Xcode (jestem początkujący, więc trochę wyrozumiałości proszę :D). Uczę się z kursu na YT Mirosława Zelenta, bo akurat wydawał mi się świetnie objaśniony, ale napotkałem się na pierwsze problemy, bo w filmikach używa on Windowsa, a ja pracuję na OS X. Przy pisaniu kalkulatora z użyciem instrukcji switch używa tam funkcji getch(), która nie występuje na unixowych systemach, o ile się nie mylę (brak conio.h) i ciężko o zamiennik. Ale chciałbym się bardzo dowiedzieć, jak zrobić tak, aby jak komputer czeka na wpisanie jakiejś wartości, to po wpisaniu od razu przechodził do następnej instrukcji, a nie czekał aż wcisnę ENTER po wpisaniu. Pomysły? Sorry za wydłużony opis.

 

Pozdrawiam

Slidor

 

P. S. Dołączyłem różne biblioteki, ale getch() za nic nie działa. W sensie wyskakują błędy w buildowaniu, pomimo że program rozpoznaje samą funkcję getch() przy wpisywaniu.



#2 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 11 lipca 2016 - 09:19

Jeżeli "dołączyłeś różne biblioteki" i "program rozpoznaje funkcję getch" to znaczy, że zwyczajnie dodałeś tylko  include / import ale nie dodałeś biblioteki do targetu i linker nie wie, że ma coś dołączyć do projektu.

 

BTW - dodawaj do takich pytań przykłady kodu i zzrzuty błędów, będzie łatwiej coś doradzić.

BTW2 - ncurses, ale getch to zuo :)


Moje programy:
iOS => Project Planner | Project Planner HD | Sub Edit HD | Snooker Scoreboard Pro | Expedition Planner | Subtitles Player
OSX => Project Planner OSX | Project Planner Viewer | Sub Edit | Mapper | Site Monitor

tvOS => Subtitles Player

Nie udzielam porad poprzez Prywatną Wiadomość. To uderza w charakter i sens istnienia forum, które daje każdemu prawo do zadania pytań i poznania odpowiedzi na nie..


#3 Slidor

Slidor
  • 20 postów

Napisano 11 lipca 2016 - 23:10

#include <iostream>
#include <stdio.h>
#include <ncurses.h>
#include <curses.h>
#include <termios.h>
#include <unistd.h>
#include <string.h>



using namespace std;

float x, y;
char wybor;

int main()
{
    
for (; //nieskończona pętla. Może być też while (true)
{
    
    cout << "Podaj 1 liczbę: ";
    cin >> x;
    cout << "Podaj 2 liczbę: ";
    cin >> y;
    
    cout << endl;
    cout << "MENU GŁÓWNE" << endl;
    cout << "-----------------" << endl;
    cout << "1. Dodawanie" << endl;
    cout << "2. Odejmowanie" << endl;
    cout << "3. Mnożenie" << endl;
    cout << "4. Dzielenie" << endl;
    cout << "5. Koniec programu" << endl;
    
    cout << endl;
    wybor=getch();    //o to ten cały zamęt...
    
    switch(wybor)
    {
        case '1':
        {
            cout << "Suma = " << x+y << endl;
        }
            break;
        
        case '2':
        {
            cout << "Różnica = " << x-y << endl;
        }
            break;
            
        case '3':
        {
            cout << "Iloczyn = " << x*y << endl;
        }
            break;
            
        case '4':
        {
            if (y==0) cout << "Pamiętaj cholero, nie dziel przez 0!" << endl;
            else cout << "Iloraz = " << x/y << endl;
        }
            break;
            
        case '5':
        {
            exit(0);
        }
            break;
            
        default: cout << "Nie ma takiej opcji w menu!" << endl;
    }
    getchar(); getchar();
    // tutaj była jeszcze komenda na system("clear"), ale też nie działa w xcode
    
    
}
    return 0;
}
 
Oto jest ten plik. A mógłbyś wyjaśnić bardziej? :( to samo #include nie wystarcza? Jaki linker? Sory, ale bardzo zielony jestem, a mnie to wciągnęło i nurtuje mnie teraz...


#4 smh

smh
  • 38 postów
  • SkądKraków, PL

Napisano 12 lipca 2016 - 23:30

może zacznij od podstaw :)

ja używam:

- https://atom.io

- https://code.visualstudio.com (z wtyczkami do cpp)

 

następnie:

- http://brew.sh

- z terminala: brew install gcc

 

kod kompilujesz:

c++ plik.cpp -o app (w terminalu)


Użytkownik smh edytował ten post 12 lipca 2016 - 23:32


#5 Slidor

Slidor
  • 20 postów

Napisano 12 lipca 2016 - 23:42

A z Xcode jest coś nie tak??



#6 smh

smh
  • 38 postów
  • SkądKraków, PL

Napisano 13 lipca 2016 - 00:09

co do xcode, to jest na dłuższą rozmowę ;)

a wracając do Twojego projektu - otwórz Terminal, przejdź do katalogu projektu i wpisz:

c++ projekt.cpp -lncurses -o app

jeżeli nie zobaczysz błędów (nie powinieneś), aplikacje odpalasz z terminala

./app

Użytkownik smh edytował ten post 13 lipca 2016 - 00:08


#7 Slidor

Slidor
  • 20 postów

Napisano 13 lipca 2016 - 00:14

A jak przejść do katalogu z projektem? :/ dotychczasowo jak chciałem odpalić napisany program, to go po prostu przeciągałem z Xcode Products do Terminala i tyle... I jak tu się uczyć porządnie z jednego źródła na OS X jak większość kursów jest pod inne systemy i prędzej czy później taki szajs jak conio.h się pojawi...



#8 smh

smh
  • 38 postów
  • SkądKraków, PL

Napisano 13 lipca 2016 - 00:33

myślę, że jeżeli poważnie myślisz o programowaniu w c++, dobrze by było gdybyś nauczył się pracy z terminalem

nie wiem gdzie zacząć... 

http://lifehacker.co...almost-anything

 

możesz też po prostu przenieść i upuścić katalog z kodem na okno terminala :)



#9 Slidor

Slidor
  • 20 postów

Napisano 13 lipca 2016 - 00:37

I widzisz nikt mi nie powiedział, żeby od tego zacząć. Żaden tutorial, a oglądałem ich wiele. Okej, skompilowałem plik, powstał wykonywalny czy jak to tam się nazywa. Odpaliłem go, otworzył się terminal i wszystko ładnie zaczyna: Podaj 1 liczbę, później drugą i koniec programu. Nie działa. Chciałem, żeby po wpisaniu liczby odpowiadającej danemu działaniu nie trzeba było klikać ENTER tylko jak sam by dalej przeszedł... Kod jest dobry, taki jak na filmie i nie działa... Jezu



#10 smh

smh
  • 38 postów
  • SkądKraków, PL

Napisano 13 lipca 2016 - 00:49

jeszcze raz (wersja light)

 

1. Otwórz terminal

2. wpisz: touch app.cpp [enter]

3. wpisz: open app.cpp [enter]

4. otworzy się xcode - wklej swój kod, CMD+S (zapisz)

5. wpisz: c++ app.cpp -lncurses -o app [enter]

6. wpisz: ./app [enter]


Użytkownik smh edytował ten post 13 lipca 2016 - 00:49


#11 Slidor

Slidor
  • 20 postów

Napisano 13 lipca 2016 - 00:54

Mówię Ci, zrobiłem to. Tylko nie tak wszystko komendami, jak mi to napisałeś, a przeciągałem np. ten projekt do terminala. Coś z kodem musi być nie tak, bo nie działa tak, jak bym chciał. Mam też drugi projekt quizu pięciopytaniowego i też nie wiadomo dlaczego nie działa - kod mam jak w tutorialu...



#12 smh

smh
  • 38 postów
  • SkądKraków, PL

Napisano 13 lipca 2016 - 01:10

prześledź czy dokładnie tak robisz :)
pierwszy raz gdy kompilator zwraca błąd - zmieniam 19 linijkę na
 
for (;;)

Załączone pliki

  • Załączony plik  adsads.png   149,32 KB   0 Ilość pobrań

Użytkownik smh edytował ten post 13 lipca 2016 - 01:10


#13 Slidor

Slidor
  • 20 postów

Napisano 13 lipca 2016 - 08:41

Tobie terminal zwrócił 4 błędy, a mi żadnego...






Użytkownicy przeglądający ten temat: 2

0 użytkowników, 2 gości, 0 anonimowych