Funktionen mit Strukturen
-
Hi, ich habe mich heute mit Funktionen und Strukturen befasst und ein Programm dazu geschrieben. Erst soll nur Monat übergeben und ausgegeben werden und danach die ganze Struktur datum übergeben und ausgegeben werden, nur irgendwie hats nicht ganz geklappt. Er zeigt 10 Fehler an und ich hab keine Ahnung wieso

#include <iostream> using namespace std; void ausgabeMonat(char *); void ausgabeAlles(datum); int main() { struct datum { int jahr; char monat[11]; int tag; }; datum heute; heute.jahr = 2006; heute.monat = "Februar"; heute.tag = 17; ausgabeMonat(heute.monat); ausgabeAlles(heute); fflush(stdin); cin.peek(); return 0; } void ausgabeMonat(char * m) { cout << "\n" << m; } void ausgabeAlles(datum abc) { cout << "\n\n" << abc.jahr; cout << "\n" << abc.monat; cout << "\n" << abc.jahr; }
-
Du musst die Struktur datum ganz am Anfang deklarieren, sonst weiß der Compiler ja nicht, was das datum im Funktionsprototyp von ausgabeAlles sein soll.
Außerdem funktioniert die Zuweisung heute.monat = "Februar"; so nicht. Nimm am besten std::strings statt char-Arrays, ansonsten man: strcpy bzw. man: strncpy.
Ach ja, noch was:
Wenn der Compiler Fehler angibt, diese bitte mitposten.
-
#include <iostream> using namespace std; //Strukturen struct datum { int jahr; char monat[11]; int tag; }; //Funktionsprototypen void ausgabeMonat(datum *ptr_heute); void ausgabeAlles(datum *abc); //Hauptfunktion int main() { //Lokale Variablen struct datum heute; heute.jahr = 2006; strcpy(heute.monat,"Februar");//kopiert Februar in heute.monat heute.tag = 17; ausgabeMonat(&heute); //Uebergabe der Adresse von Struct ausgabeAlles(&heute); //Uebergabe der Adresse von Struct fflush(stdin); cin.peek(); return 0; } void ausgabeMonat(datum *ptr_heute) { cout << "\n" << ptr_heute->monat; } void ausgabeAlles(datum *abc) { cout << "\n\n" << abc->jahr; cout << "\n" << abc->monat; cout << "\n" << abc->tag; }... so sollte es funktionieren.
Bin auch noch Anfänger

Gruss jamiro
-
@Jamiro: Bis auf cout und das fflush(stdin) ist das astreines ANSI-C :p
-
Danke...

Bin noch am lernen von C/C++... aber mit Übung wird es bestimmt noch besser...

gruss jamiro
-
fflush(stdin) sollte man unter allen Umständen vermeiden: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html
Ersetzen kann man das durch folgenden Code:
void my_fflush() { int c; while ( (c = getchar()) != EOF && c != '\n' ); };MfG
GPC
-
danbke schön an alle... hab das jetzt korrigiert und funtioniert einwandfrei

hier die korrigierte lösung:
#include <iostream> using namespace std; struct datum { int jahr; char monat[11]; int tag; }; void ausgabeMonat(char *); void ausgabeAlles(datum); int main() { datum heute; heute.jahr = 2006; strcpy(heute.monat, "Februar"); heute.tag = 17; ausgabeMonat(heute.monat); ausgabeAlles(heute); fflush(stdin); cin.peek(); return 0; } void ausgabeMonat(char * m) { cout << "\n" << m; } void ausgabeAlles(datum abc) { cout << "\n\n" << abc.jahr; cout << "\n" << abc.monat; cout << "\n" << abc.tag; }
-
cout<<"\n"; // 8[ cout<<endl; // =)
-
TravisG schrieb:
cout<<"\n"; // 8[ cout<<endl; // =)Und warum, wenn ich fragen darf?
-
ich glaub so ist es besser, weil der puffer dabei geleert wird, oder?
-
C Newbie schrieb:
TravisG schrieb:
cout<<"\n"; // 8[ cout<<endl; // =)Und warum, wenn ich fragen darf?
weil das obere schneller ist und das untere ein performance fresser
