char Zeichenkette von Funktion nach main!
-
Hy.. probier schon einige Zeit rum, komm aber nicht drauf!
Hänge dabei aus meiner Zweiten Funktion (notebester) ein char Array vorname[] nachname[] in die main Funktion zurückzugeben!
Zuvor wird in einer for Schleife noch ein Vergleich bzgl. der besten Note durchgeführt.
Die Ermittlung der besten Note erfolt in meiner ersten Funktion.Beim übertragen der char symbole kommt aber lediglich immer nur der Fehler error C2440: '=': 'char [30]' kann nicht in 'char' konvertiert werden..
hat i-wer Rat??
#include <iostream> // cin, cout, printf(), scanf(), etc. #include <conio.h> // getch(), etc. #include <math.h> // Math. Funktionen: sin, cos, etc. using namespace std; const int MAX=10; const int zeichen=30; struct schuelerundnoten { char vorname[zeichen]; char nachname[zeichen]; int noteinfo; int mathe; int physik; }; int bestenote(schuelerundnoten[MAX], int); void besterschueler(schuelerundnoten[MAX], int, char[], char[]); void main() { char auswahl=0; schuelerundnoten arr[MAX]={0}; int ende=0; int durchlauf=0; for (int i=0; i<MAX; i++) { cout << "Vorname: "; cin >> arr[i].vorname; cout<<"Nachname: "; cin >> arr[i].nachname; cout<< "Informatik Note: "; cin>> arr[i].noteinfo; cout<< "Mathematik Note: "; cin>>arr[i].mathe; cout<<"Physik Note: "; cin>>arr[i].physik; cout<<"\n"; ende=i; cout << "Weiter? j/n"; cin >> auswahl; if (auswahl == 'n') break; } for (int a=0; a<=ende; a++) { cout << "Schueler "<<arr[a].nachname<< " " <<arr[a].vorname<< "\n"; cout <<" hat in Informatik "<<arr[a].noteinfo<< "\n"; cout <<" in Mathematik "<<arr[a].mathe<< "\n"; cout <<" in Physik "<<arr[a].physik<< "\n\n"; } cout << "Die Beste Note in Informatik ist \n"<<bestenote(arr, ende); char vorname[MAX]={0}; char nachname[MAX]={0}; besterschueler(arr, ende, nachname, vorname); cout << " und wurde erreicht von "<<nachname<< " "<<vorname; _getch(); } int bestenote(schuelerundnoten arr[], int ende) { int bester=0; int min=arr[0].noteinfo; for (int i=0; i<=ende; i++) { if (arr[i].noteinfo<=min) min=arr[i].noteinfo; } return min; } void besterschueler(schuelerundnoten arr[], int ende, char nachname[], char vorname[]) { int g=0; int u=0; for(int i=0; i<=ende; i++) { if (arr[i].noteinfo==bestenote(arr, ende)) nachname[g++]=arr[i].nachname; vorname[u++]=arr[i].vorname; } }
-
naja - da sind nen paar schnitzer drin^^
du kannst aber erst mal sagen, wieso du den char[]-weg gehst - ist dir std::string nicht bekannt oder willst/darfst du es nicht nutzen?bb
-
String ist mir bekannt - wir sollen das aber mit arrays und chars lösen.
Ist eine Schulaufgabe und der Lehrer besteht drauf!Habs zwar schon geschaft das zumindest ein zeichen zurückgegen wird, allerdings war dies keines aus dem array, sondern nur eines das ich zum probiern mal eingebaut habe.
-
besteschueler:
(...,char (&nachname)[zeichen]), char (&vorname)[zeichen]) { //... strcpy(arr[i].vorname, vorname); //... }sieht zwar extrem doof aus, aber so würde es gehen...
allerdings reicht hier eigtl auch nen zeiger (bzw. eine referenz auf einen zeiger, weil der zeiger sonst nur in der fkt geändert werden würde, der übergebene Zeiger bleibt aber so, wie er ist):(..., const char *&nachname, const char *&vorname) { //... vorname = arr[i].vorname; //... }bei der variante wäre darüber hinaus die main-fkt auch noch abzuändern:
const char* nachname; const char* vorname; //fkt-aufrufbtw: Bei Prototypen muss man zwar die bezeichner nicht mitschreiben, aber es ist ne äußerst doofe idee...
außerdem muss es
int main()heißen!
und#include <math.h>ist kein gültiger C++ Header(cmath wäre richtig)! Du brauchst ihn aber nicht einmal...bb
-
danke für deine tipps...!!
habs mal so ungeschrieben.. kommt aber der fehler:
error C2664: 'besterschueler': Konvertierung des Parameters 3 von 'const char *' in 'char (&)[30]' nicht möglichund zwar in dieser zeile:
besterschueler(arr, ende, nNachname, nVorname);bzgl. zeiger:
diese kapitel haben wir noch gar nicht durchgemacht, sagt mir also nichts
bzgl. header:
das is ein template was wir von unserem prof. bekommen habenwo soll ich
strcpy(arr[i].vorname, vorname);einbauen?
mfg
-
tommy0815 schrieb:
danke für deine tipps...!!
np^^
habs mal so ungeschrieben.. kommt aber der fehler:
error C2664: 'besterschueler': Konvertierung des Parameters 3 von 'const char *' in 'char (&)[30]' nicht möglichzeig doch mal paar zeilen quelltext - wie hast du es denn jz? (aufruf + variablen-deklaration + funktion)
und zwar in dieser zeile:
besterschueler(arr, ende, nNachname, nVorname);das ist wie gesagt ein bisschen wenig code...
bzgl. zeiger:
diese kapitel haben wir noch gar nicht durchgemacht, sagt mir also nichts
bzgl. header:
das is ein template was wir von unserem prof. bekommen habendann fass vorname und nachname in nem struct zusammen und gib das zurück!?
wo soll ich
strcpy(arr[i].vorname, vorname);einbauen?
eigtl in der fkt...
aber wenn du noch keine zeiger hattest, dann versuch mal nen struct TName oder so anzulegen, wo vor- und nachname drin sind und was deine fkt dann einfach zurückgeben kann - weist du, wie ich das meine?!bb
-
das mit dem abspeichern in der struktur usw. klingt gut, so sollten wir das auch machen...
wär super wenn wir diesen weg weiter verfolgen könnten.. das versteh ich dann auch eherhmm...vielleicht so?
struct tname { char vorname[zeichen]; char nachname[zeichen]; };nur wie baue ich das in die funktion ein, dass sie mir dann vorname und nachname auspuckt wenn arr[i].noteinfo==bestenote ist
-
const int max_strlen = 100; struct name { char vorname[max_strlen]; char nachname[max_strlen]; }; struct schuelerundnoten { name schueler; int info; int mathe; int physik; }; const name* beispiel_fkt(schuelerundnoten lhs, schuelerundnoten rhs) { if(lhs.info < rhs.info) { return &lhs.schueler; } }das ist allerdings alles ein wenig suboptimal, besser wäre nen kopier-konstruktur bereitzustellen und ne kopie zurückzugeben - aber wenn du nicht sagst, was du in etwa schon kannst, kann ich dir auch nicht sagen, wie du es am besten angehen könntestn...
das oben sollte allerdings erst mal als bsp. reichen, um zu verstehen, wie es gehen könnte...bb