C Unterschiede Win <-> Mac

naja ich studiere jetzt seit knapp 2 wochen, ich weis nicht was da noch alles kommt^^, von nachbauen weis ich auch net viel :D

aber unter virtual pc hab ich win laufen, nur ich kauf mir doch keinen mac damit ich im endeffekt auch nur unter win arbeite...
 
also das ist das programm unter windows..nur ein ganz einfaches für den einstieg in c...nachdem die daten wieder ausgegeben werden soll das programm mittels des getch() angehalten werden, damit man alles lesen kann bevor das dos fenster zu geht...diese problematik besteht zwar mac nicht, aber trotzdem sollte es auf diesem wege funktionieren...

Code:
#include <stdio.h>
#include <conio.h>

/***************** Addressen 1******************
* Eingabe der Adressdaten und des Alters 		*
* einfache Eingabe von Strings mit scanf		*
**********************************************/

int main(void) {
	// Variablen
	char vorname[21],name[21],strasse[21],plz[21],stadt[21];
	int alter;

	// Eingabe
	printf("Vorname : ");scanf("%s",&vorname);
	printf("Name    : ");scanf("%s",&name);
	printf("Strasse : ");scanf("%s",&strasse);
	printf("PLZ     : ");scanf("%s",&plz);
	printf("Stadt   : ");scanf("%s",&stadt);
	printf("Ihr Alter   : ");scanf("%i",&alter);


	// Leerzeile
	printf("\n");

	// Ausgabe
	printf("Vorname : %s\n",vorname);
	printf("Name    : %s\n",name);
	printf("Strasse : %s\n",strasse);
	printf("PLZ     : %s\n",plz);
	printf("Stadt   : %s\n",stadt);
	printf("Sie sind %i Jahre alt\n",alter);
	getch();

}

Lösche ich das #include <conio.h> und ersetze das getch() durch getchar() kommt beim kompilieren zwar kein fehler mehr, aber das programm wird nach der ausgabe sofort beendet...selbst mit #include <ncruses.h> besteht dieses problem weiterhin....


btw: ich danke euch vielmals für die hilfe :)
 
Hallo,

ich würde gerne weiterhelfen, brauche aber insgesamt die Hilfe des Forums. Das ganze ist ja ein häufiges und grundlegendes Problem.

Ich habe mal folgendes Beispiel aufgesetzt, das leider nicht ganz funktiloniert:
Code:
#ifndef _WIN32
#import <curses.h>
#else
#import <conio.h>
#endif

int main (int argc, const char ** argv)
{
	int c;
#ifndef _WIN32
	initscr ();
#endif
	printf ("Press the any key to continue\n");
	c = getch();
	return 0;
}

Wenn man es mit
gcc -Wall -lcurses test.c
übersetzt, dann sehe ich nur einen schwarzen Bildschirm, das printf wird nicht ausgegeben. getch scheint allerdings zu funktionieren. Ohne initscr sehe ich die Ausgabe, aber getch funktioniert nicht.

Wenn da mal jemand den Fehler finden könnte wäre toll.
 
@below
Unter Windows XP funktioniert dein Code d.h. es wird Press the any key… ausgegeben
 
Zuletzt bearbeitet:
Hallo,

ich würde gerne weiterhelfen, brauche aber insgesamt die Hilfe des Forums. Das ganze ist ja ein häufiges und grundlegendes Problem.

Ich habe mal folgendes Beispiel aufgesetzt, das leider nicht ganz funktiloniert:
Code:
#ifndef _WIN32
#import <curses.h>
#else
#import <conio.h>
#endif

int main (int argc, const char ** argv)
{
	int c;
#ifndef _WIN32
	initscr ();
#endif
	printf ("Press the any key to continue\n");
	c = getch();
	return 0;
}

Wenn man es mit
gcc -Wall -lcurses test.c
übersetzt, dann sehe ich nur einen schwarzen Bildschirm, das printf wird nicht ausgegeben. getch scheint allerdings zu funktionieren. Ohne initscr sehe ich die Ausgabe, aber getch funktioniert nicht.

Wenn da mal jemand den Fehler finden könnte wäre toll.

Du musst das initscr(); mit endwin(); schließen

//edit:

Ansonsten googeln und einfach mal in diversen C/C++ Foren rumgucken:

int getch() {
static int ch = -1, fd = 0;
struct termios neu, alt;
fd = fileno(stdin);
tcgetattr(fd, &alt);
neu = alt;
neu.c_lflag &= ~(ICANON|ECHO);
tcsetattr(fd, TCSANOW, &neu);
ch = getchar();
tcsetattr(fd, TCSANOW, &alt);
return ch;
}
 
das initscr() zerschiesst irgendwas mit der terminal emulation...
die bash zeigt keine eingaben mehr nach dem ausführen...
und wenn du es mal raus nimmst, dann sieht man das press any, aber auch den bus error den es gibt...
 
das initscr() zerschiesst irgendwas mit der terminal emulation...
die bash zeigt keine eingaben mehr nach dem ausführen...
und wenn du es mal raus nimmst, dann sieht man das press any, aber auch den bus error den es gibt...

Richtig, das war auch mein Stand :(

Alex
 
Gibt es denn die curses.h auch für Windows? Wenn nicht ist der Ansatz dann die bedingte Kompilierung?

Entspricht der Code denn so ANSI C89/C89 ?
Code:
#include <stdio.h>


/***************** Addressen 1******************
* Eingabe der Adressdaten und des Alters 		*
* einfache Eingabe von Strings mit scanf		*
**********************************************/

int main(void) {
	// Variablen
	char vorname[21],name[21],strasse[21],plz[21],stadt[21];
	int alter;

	// Eingabe
	printf("Vorname : ");scanf("%s",&vorname);
	printf("Name    : ");scanf("%s",&name);
	printf("Strasse : ");scanf("%s",&strasse);
	printf("PLZ     : ");scanf("%s",&plz);
	printf("Stadt   : ");scanf("%s",&stadt);
	printf("Ihr Alter   : ");scanf("%i",&alter);


	// Leerzeile
	printf("\n");

	// Ausgabe
	printf("Vorname : %s\n",vorname);
	printf("Name    : %s\n",name);
	printf("Strasse : %s\n",strasse);
	printf("PLZ     : %s\n",plz);
	printf("Stadt   : %s\n",stadt);
	printf("Sie sind %i Jahre alt\n",alter);
        fflush(stdin); // funktioniert nicht unter Linux/OS X wird aber auch nicht benötigt
	getchar();

}
 
Zurück
Oben Unten