PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit getch()



darxun
15-03-2008, 14:34
hiho,

ich habe folgenden Code in Visual Studio geschrieben:


#include <stdio.h>

#include <stdlib.h>

#include <math.h>



int main (void)

{

int AiArray[10], iZiffer=0, i=0;



for (i=0; i<10; i++)

AiArray[i]=0;



/*While-Schleife: Abbruch bei "Return" = ASCII 13*/

while(iZiffer!=13)

{

printf("\n\n***************************** ERGEBNISTABELLE *****************************\n\n\n");

for (i=0; i<10; i++)

printf("%i \t",i);

printf("\n-------------------------------------------------------------------------\n\n");

for (i=0; i<10; i++)

printf("%i \t", AiArray[i]);



printf("\n\nBitte geben Sie eine Ziffer ein.\nDruecken Sie die Returntaste um das Programm zu beenden.");



iZiffer=getch();



for(i=0; i<10; i++)

{

if (iZiffer-(48+i)==0)

AiArray[i]=++AiArray[i];

else;

}

system("cls");

}

return 0;

}

Wenn ich diesen Code nun in xCode (also aufm Mac) in "Builde" kommen folgende Warnungen:

Undefined symbols:
"_getch", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
"_getch", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Build failed (2 errors)

Was tun?

Noch eine generelle Frage (ich kenn mich nicht sonderlich gut mit Programmieren aus, muss es aber fürs Studium machen): Wenn ich einen C-Code habe, wieso kann ich den dann nicht mit jedem x-beliebigen Compiler kompilieren?

Edit:
Ich hab gerade festgestellt dass dieser Code keine Probleme macht:


#include <stdio.h>

int main(){
printf("Hallo welt\n");
getchar();
return 0;
}

An getchar() liegts also doch nicht?

ContainerDriver
15-03-2008, 14:45
Hallo.



Noch eine generelle Frage (ich kenn mich nicht sonderlich gut mit Programmieren aus, muss es aber fürs Studium machen): Wenn ich einen C-Code habe, wieso kann ich den dann nicht mit jedem x-beliebigen Compiler kompilieren?

Wenn der C-Code nur Funktionen verwendet, die im C-Standard festgelegt sind, so kannst du den Code mit jedem Compiler übersetzen, der den C-Standard kennt und du die Standardbibliothek ( http://de.wikipedia.org/wiki/Standard_C_Library) hast. Für zusätzliche Funktionen (z.B. wenn du Fensterprogrammierung machen willst) benötigst du dann andere C-Funktionen und Bibliotheken, die nicht mehr im Standard festgelegt sind. Diese Bibliotheken sind dann meist vom Betriebssystem abhängig und müssen u.U. extra nachinstalliert werden.

Dein Code oben verwendet z.B. die Funktion getch, die wohl nicht im Standard definiert ist. In Windows gibt es eine Bibliothek, die die Funktion zur Verfügung stellt, unter MacOS nicht.

Wenn du den gleichen Code auf verschiedenen Betriebssystem verwenden willst, musst du entweder Standard C programmieren oder Bibliotheken verwenden, die auf jedem dieser Betriebssysteme vorhanden sind.

Gruß, Florian

ContainerDriver
15-03-2008, 14:49
Edit:
Ich hab gerade festgestellt dass dieser Code keine Probleme macht:


#include <stdio.h>

int main(){
printf("Hallo welt\n");
getchar();
return 0;
}

An getchar() liegts also doch nicht?

getchar() != getch()!

darxun
15-03-2008, 15:56
ok danke!
jetzt gehts, bis auf einen schönheitsfehler: in visual studio musste ich nicht immer nach den eingegebenen tasten (das geschriebene prg zählt die tastenanschläge der zifferntasten) auf enter drücken um das ergebnis zu sehen (deswegen der befehl system("cls")).

wieso passiert das in xcode nicht?