conio.h och getch();

Tråden skapades och har fått 18 svar. Det senaste inlägget skrevs .
1

på skolan använde de getch men de fungerar inte på min mac. komplierar i terminalen med gcc men får felmeddelande att den inte hittar conio.h

Språk? C C++?

  • Medlem
  • Uppsala
  • 2005-01-20 19:52

conio.h är traditionellt en H fil för DOS.
vill du använda getch i OS X, ska du inkludera filen curses.h som är ett textbaserat bibliotek för "grafiska" gränssnitt i terminal miljö.

får felet om jag skriver getch(); ld: Undefined symbols:
_stdscr
_wgetch

hur är det med clrsrceen(); vet inte om jag skrivit rätt
???

  • Medlem
  • Uppsala
  • 2005-01-20 20:35

du måste även länka mot curses biblioteket..
kompilerar du via terminalen ska det vara -lcurses parameter
den kan även sättas i xcode som en compiler parameter i C/C++ inställningarna för det aktuella projektet.
clrscreen har jag för mig ingår i curses likväl.
du bör göra en sökning på curses tutorials och dokumentation, som kan ge bättre tips på hur du använder curses på bästa sätt.
tänk också på att curses inte fungerar exakt som motsvarande i windows.. curses är mer komplett och har mer funktioner.

skriver
gcc -lcurses mac.c
./a.out

har en printf och getch med men den skriver inte ut något varför??

  • Medlem
  • Uppsala
  • 2005-01-20 22:33
Ursprungligen av freemanen:

skriver
gcc -lcurses mac.c
./a.out

har en printf och getch med men den skriver inte ut något varför??

troligtvis för att terminalen normalt sett är buffrad i unix system och du inte har med nyrad i din printf sats. det kan du lösa på två sätt, antingen lägger du till \n för att få med nyrad i din printf sats. Alternativt använder du funktionen fflush med parametern stdout, detta tvingar standard output att tömma sin buffer och skriva ut det du har på skärmen. Som nybörjare rekommenderar jag att inte använda fflush utan istället se till att avsluta dina strängar med nyrad.

  • Oregistrerad
  • 2005-01-20 21:19

Kan man använda XCode för C++ och kan man skriva samma program till PC som till Mac går Programmering A oc har precis börjat skull uppskatta svar eller ifall man kan använda någonting annat

Mvh Adam

  • Medlem
  • Uppsala
  • 2005-01-20 22:37
Ursprungligen av adamsen87:

Kan man använda XCode för C++ och kan man skriva samma program till PC som till Mac går Programmering A oc har precis börjat skull uppskatta svar eller ifall man kan använda någonting annat

Mvh Adam

självklart kan du använda XCode för att skriva program i C++ som fungerar på PC och Mac, det du däremot måste tänka på är att Grafiska gränssnitt som skapas i XCode med Interface Builder programmet inte kan användas på PC, men eftersom du läser en A kurs på högskola eller universitet så kommer ni till en början att använda text läge och då kan du använda XCode.

Sedan om det är pedagogiskt korrekt att börja med ett IDE som XCode än att använda en enklare textredigerare och gcc är svårare att avgöra. Om ni använder något liknande XCode på skolan som Visual Studio, Borland C++ Builder elller liknande tycker jag du kan använda XCode hemma.
Om ni däremot använder Emacs eller liknande textredigerare tycker jag du ska leta upp en motsvarande för OS X som passar dina behov, för att på detta vis minska skillnaderna när du jobbar hemma mot när du sitter i skolan.
hoppas det är bra svar nog, kom gärna med mer specifika frågor så är det lättare att ge bättre svar

  • Medlem
  • Härnösand
  • 2005-01-21 18:45
Ursprungligen av nubbe:

Sedan om det är pedagogiskt korrekt att börja med ett IDE som XCode än att använda en enklare textredigerare och gcc är svårare att avgöra.

Det är enklare att trycka på en knapp för kompilering och länkning än att skriva textkommandon.

Vad är det som ska läras ut? Programmering eller unixkommandon?

Jag gillar XCode starkt. Visual Studio .Net är en förbättring med avseende på Visual Studio 6 men faller inte mig riktigt i smaken.

  • Medlem
  • Uppsala
  • 2005-01-22 00:07
Ursprungligen av henil:

Det är enklare att trycka på en knapp för kompilering och länkning än att skriva textkommandon.

Vad är det som ska läras ut? Programmering eller unixkommandon?

Jag gillar XCode starkt. Visual Studio .Net är en förbättring med avseende på Visual Studio 6 men faller inte mig riktigt i smaken.

Visserligen är det lättare att kompilera med en knapptryckning i XCode eller Visual Studio mot att skriva det i kommando raden. Jag anser däremot att om man inte har så stor vana och skriver relativt små program som omfattas av en fil.
är det nästan lika lätt att skriva gcc <minfil.c> -o <minfil>
som att skapa ett nytt projekt i xcode och där lägga till c filen och sedan kompilera.
XCode är ett mycket bra ide, dock kan man som ovan användare lätt förirra sig i alla menyer och val.
Men som alltid när det gäller programmering så är det alltid många valmöjligheter när det gäller utvecklingsmiljöer och svårt att säga vilken som är "rätt" för alla.

  • Medlem
  • Härnösand
  • 2005-01-21 08:41

Om det är C++, kör med:

#include <iostream.h>

och cin.get() istället.

  • Oregistrerad
  • 2005-01-21 12:04

nubbe tack för ditt trevliga svar:D

Men jag har ett litet problem. Vi använder Microsoft Visual Studio .Net så det passar att använda XCode. Men varför funkar inte cout i XCode måste man lägga till någonting annat eller än på en PC

Mvh Adam

  • Medlem
  • Uppsala
  • 2005-01-21 12:57

nej, om du inkluderar iostream i din källkod och din källkodsfil heter något med .cpp
så kommer xcode tolka den som en C++ fil och kompilera den på "rätt" sätt.
cout är enbart för C++ och xcode är lite mer strikt än visual när det gäller sånt så om inte filen slutar på .cpp så kommer xcode inte göra rätt.

  • Oregistrerad
  • 2005-01-21 13:19

Men det är en *.cpp fil som jag har skapat det är det som är konstigt men får återkomma när jag är hemma och kan säga mer exakt vad det är.

Mvh Adam

  • Medlem
  • Härnösand
  • 2005-01-21 18:40

skriver man:
#include <iostream>
så skriver man:
using namespace std;
då kan man skriva:
cout << "Hej";

skriver man:
#include <iostream>
och utelämnar using namespace std;
så måste man skriva:
std::cout << "Hej";

skriver man:
#include <iostream.h>
så kan man utelämna:
using namespace std;
och skriver då:
cout << "Hej";

  • Medlem
  • Härnösand
  • 2005-01-23 00:34

Men om det blir fel i koden då. Hur tolka felmeddelandet?

Jag testade nyss ett program som tar inmatade flyttal och lägger in i ett fält och med hjälp av en rekursiv funktion visar det största talet.

Koden kompilerar utan anmärkning i XCode. Med gcc fick jag fel som jag inte förstår ett dugg av.

Henriks-G4a:~/testning henriknilsson$ gcc main.cpp -o main
ld: Undefined symbols:
std::basic_ios<char, std::char_traits<char> >::operator void*() const
std::basic_istream<char, std::char_traits<char> >::operator>>(double&)
std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
std::basic_ostream<char, std::char_traits<char> >::operator<<(double)
std::ios_base::Init::Init()
std::ios_base::Init::~Init()
std::cin
std::cout
std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
___gxx_personality_v0

Vad betyder ovanstående? Det finns inte med i filen main.cpp.
Filen börjar med:

#include <iostream>
using namespace std;

Men kör jag g++ så funkar det. Både g++ och gcc ska ju ändå känna av om det är C++.

  • Medlem
  • Uppsala
  • 2005-01-23 00:42

att gcc ska känna av C++ är en sanning med modifikation. gcc är C kompilatorn och g++ är C++ kompilatorn.
har för mig att om man skickar med parametern /cxx till gcc så tolkar den C++ kod rätt.
Det där med att tolka gcc/g++ felmeddelanden är inte alltid lätt, och på många sätt så är XCode bättre. Enda fördelarna med att ha kunskap kring kommandorads kompilering via gcc/g++ är om man har små korta program och inte vill skapa en bunt mappar, precompiled headers osv som XCode och andra IDE:n ger.

  • Medlem
  • Härnösand
  • 2005-01-23 19:09

Läser du man gcc så står det att filändelsen bestämmer, .cpp, .cp etc är C++, .c är C.
Utdrag från gcc man-page:

Citat:

file.i
C source code which should not be preprocessed.

file.ii
C++ source code which should not be preprocessed.

file.m
Objective-C source code. Note that you must link with the library
libobjc.a to make an Objective-C program work.

file.mi
Objective-C source code which should not be preprocessed.

file.h
C or C++ header file to be turned into a precompiled header.

file.cc
file.cp
file.cxx
file.cpp
file.c++
file.C
C++ source code which must be preprocessed. Note that in .cxx, the
last two letters must both be literally x. Likewise, .C refers to
a literal capital C.

file.mm
file.M
Objective-C++ source code which must be preprocessed. (APPLE ONLY)

file.mii
Objective-C++ source code which should not be preprocessed. (APPLE
ONLY)

file.hh
file.H
C++ header file to be turned into a precompiled header.

file.f
file.for
file.FOR
Fortran source code which should not be preprocessed.

file.F
file.fpp
file.FPP
Fortran source code which must be preprocessed (with the tradi-
tional preprocessor).

file.r
Fortran source code which must be preprocessed with a RATFOR pre-
processor (not included with GCC).

<...snip...>

You can specify the input language explicitly with the -x option:

-x language
Specify explicitly the language for the following input files
(rather than letting the compiler choose a default based on the
file name suffix). This option applies to all following input
files until the next -x option. Possible values for language are:

c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objc-cpp-output
objective-c++ (APPLE ONLY) objective-c++-header (APPLE ONLY)
assembler assembler-with-cpp
ada
f77 f77-cpp-input ratfor
java
treelang

-x none
Turn off any specification of a language, so that subsequent files
are handled according to their file name suffixes (as they are if
-x has not been used at all).

<...snip...>

Compiling C++ Programs

C++ source files conventionally use one of the suffixes .C, .cc, .cpp,
.CPP, .c++, .cp, or .cxx; C++ header files often use .hh or .H; prepro-
cessed C++ files use the suffix .ii. GCC recognizes files with these
names and compiles them as C++ programs even if you call the compiler
the same way as for compiling C programs (usually with the name gcc).

However, C++ programs often require class libraries as well as a com-
piler that understands the C++ language---and under some circumstances,
you might want to compile programs or header files from standard input,
or otherwise without a suffix that flags them as C++ programs. You
might also like to precompile a C header file with a .h extension to be
used in C++ compilations. g++ is a program that calls GCC with the
default language set to C++, and automatically specifies linking
against the C++ library. On many systems, g++ is also installed with
the name c++.

When you compile C++ programs, you may specify many of the same com-
mand-line options that you use for compiling programs in any language;
or command-line options meaningful for C and related languages; or
options that are meaningful only for C++ programs.

d.v.s. gcc ska kunna se om det är C++, men kan också "tvingas" köra C++.

1
Bevaka tråden