Array mit unbestimmter Größe erstellen
-
LordJaxom schrieb:
Damit ist dieser Teil schonmal hinfällig:
char input = {"123456"};
Ein char ist ein Zeichen, eins eins eins ;). Richtig wäre:
char input[] = "123456";
habe mich da vertippt. Ich meinte auch input [].
LordJaxom schrieb:
BTW: Wieso nutzt Du immer [ cs]-Tags? C-Quellcode mit C++-Dateiendung und C#-Syntaxhighlighting?
Ist das nicht eine schöne Kombination?
Ich hab erste jetzt gesehen das es auch [ cpp] tags gibt. War eher Unwissenheit.
So ich muss jetzt mal weg, mal sehen was ich heute Abend schaffe.
Apley
-
Apley schrieb:
CStoll schrieb:
Und wenn in der Aufgabe steht, daß die Funktion den Prototyp
float w123456(const char* matrikelnummer);
haben soll, ist die obige Deklaration auch falsch (die Array-Version in der .CPP kann man noch durchgehen lassen, die ist semantisch äquivalent zu der geforderten Pointer-Version).Wie würde es dann denn richtig heißen oder aussehen?
So wie es in der Aufgabenstellung steht. (die Variablen kannst du IN der Funktion deklarieren)
Was kommt dann noch in die header datei denn rein? Einfach nur eine Weiterleitung zur richtigen Funktion? Über Headerdateien habe ich leider nicht viele Infos gefunden, so dass ich mich eher an das Skript gehalten hab.
In die Headerdatei schreibst du nur die Deklarationen, die vom Hauptprogramm benötigt werden, also letztlich nur den Prototyp der Funktion w123456().
-
Wie kann ich denn jetzt den String input an die Funktion übergeben?
char input[]={(1,2,3)}
habe erst mal folgendes definiert
char input[]={(1,2,3)} // und dann so integriert if(w123456(input) == 0.0) //Hier meldet er mir immer noch fehler richtigeMartikelnr(); // ----------- so sieht der Funktionsname aus float w123456 (const char *Martikelnr)
Der Fehler lautet: cannot convert parameter 1 from 'char [256]' to 'char'
also wir kann ich das input array an die funktion ohne Fehler übergeben. Ich bekomm das nicht hin. Wüsste jetzt auch nicht woran es liegt, denn nach meiner Auffassung habe ich alles richtig geschrieben.
Apley
-
Apley schrieb:
char input[]={(1,2,3)}
das ist ein array mit nur einem element (der 3). lass die inneren klammern wech.
Apley schrieb:
Der Fehler lautet: cannot convert parameter 1 from 'char [256]' to 'char'
die funktion will offensichtlich nur ein einzelnes zeichen haben (char).
wenn sie eine zeichenkette verarbeiten soll, muss du sie 'f(char* s)' oder 'f(char s[])' nennen.btw: guck' dir nochmal ein c-tutorial an, z.b. das: http://gd.tuwien.ac.at/languages/c/programming-bbrown/
-
ten schrieb:
die funktion will offensichtlich nur ein einzelnes zeichen haben (char).
wenn sie eine zeichenkette verarbeiten soll, muss du sie 'f(char* s)' oder 'f(char s[])' nennen.Das hat jetzt super funktioniert. Nur wegen einem verrutschtem Sternchen tz tz
Nach dem Kompilieren bekomm ich keinen Fehler, jedoch wenn ich ausführen möchte bekomme ich folgende Fehlermeldung:
error LNK2019: unresolved external symbol "float __cdecl z497628(char *)" (?z497628@@YAMPAD@Z) referenced in function _main
C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\Prüfziffernberechnung\Debug\Prüfziffernberechnung.exe : fatal error LNK1120: 1 unresolved externals
Kann jemand damit was anfangen?
EDIT: Hat sich erledigt. Habs rausgefunden. Das Programm läuft jetzt fast einwandfrei. YUHU
Danke an alle die so viel Geduld mit mir aufgebracht haben, besonders ten und DEvent, und mich sehr tatkräftig unterstützt haben. Ohne euch hätte ich es bestimmt nie so schnell geschafft.
Apley
-
Du musst das Sourcefile in dem die z497628 zusammen mit dem Hauptprogramm linken, sprich das File ins Projekt aufnehmen.
-
EDIT: Hat sich erledigt. Habs rausgefunden. Das Programm läuft jetzt fast einwandfrei. YUHU
War ja eine schwere Geburt. Fast alle Fehler hättest du vermeiden können, wenn du dich mit der Sprache C beschäftigt hättest. Der Prof ist auch nicht der hellste in Sachen C, oder? .cpp Dateien für C-Sprache, char* für eine Matrikelnummer, obwohl eine Matrikelnummer eine Nummer, also eine Zahl ist.
Sagmal, ist matrikelnummer, der du der Funktion
float w123456(const char* matrikelnummer);
übergibst, überhaupt Null-Terminiert? Sonst funktioniert nämlich strlen() nicht! Denn wie soll man den feststellen, wann die Zahlenfolge in matrikelnummer endet?Das hat früher funktioniert, weil matrikelnummer ein Array war und der Compiler es automatisch abspeichert, wieviel Elemente ein Array hat. Das kann der Compiler bei Pointern nicht machen!
-
der Funktion
float w123456(const char* matrikelnummer);übergebe ich den Eingabe-String input. also da sollte soweit alles gut gehen. Wenn wir schon dabei sind, es meldet mir trotzdem noch Warnungen.
const char EigeneMartikelnr[]= { "123456" }; float w123456 (const char* Martikelnr) { int r, n; char d = '9'; char e = '0'; n = strlen(Martikelnr); // WARNUNG: warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data for (r = 0; r < n; r++) // prüfen der Martikelnr auf Fehleingabe { if(strcmp(EigeneMartikelnr,Martikelnr)==0) return 0; // Richtige Martikelnummer else if (Martikelnr[r] > d || Martikelnr[r] < e) // es wird getestet ob das Zeichen nach ASCII über 9 oder unter 0 liegen return 2; else if (Martikelnr[r] != EigeneMartikelnr[r]) return 1; // Falsche Martikelnummer } }
und die zweite: warning C4715: 'w123456' : not all control paths return a value
Wieso durchläuft er meine schleife nicht durch? Irgendwo ist der wurm drin.
PS: Also ich bin auch nicht gerade begeistert vom Prof., aber was will man machen, es gibt überall Leute die man nicht mag und trotzdem mit denen auskommen muss. Früher soll ja ganz in Ordnung gewesen sein.
Schon an der Aufgabe bin ich fast gescheitert. Sie war mir fast zu kompliziert gestellt. Alles was ich an der Aufgabe nicht verstanden hab, habe ich ausgelassen. Bei Interesse kann man es sich mal durchlesen. Ist irgendwo auf den letzten Seiten.:)Apley
-
das 'strcmp' gehört vor die schleife und damit entfällt auch der zeichenweise test auf ungleich am ende der schleife.
und die zweite: warning C4715: 'w123456' : not all control paths return a value
was passiert, wenn in der schleife kein test positiv ausfällt?
btw: nimm's mir bitte nicht übel, aber du solltest dir dringend nochmal die C grundlagen aneignen, ohne diese elementaren kenntnisse ist so ein (relativ einfaches) programm 3 nummern zu gross für dich...
-
// Überprüfen ob Martikelnr nur Zahlen enthält for ( int i = 0; i < n; i++ ) { if ( isdigit(Martikelnr[i]) == 0 ) return 1; // Enthält nicht nur Zahlen } // Überprüfen ob EigeneMartikelnr, Martikelnr gleich sind if ( strcmp(EigeneMartikelnr, Martikelnr) == 0 ) return 0; // EigeneMartikelnr, Martikelnr sind ungleich return 1;
-
Endlich läuft mein Programm einwandfrei. YEAH.... ich bin der größte
(duck und weg)
@ten
werde deinen Rat befolgen, und etwas intensiver die ganzen Grundlagen lesen. Gib ja auch zu das ich es teilweise nur überflogen hab.Wollt mich hier noch einmal an DEvent für seine unermüdliche Hilfe bedanken. Ich weiß das ich teilweise blöde fragen gestellt habe, aber was soll ein Anfänger denn sonst für Fragen stellen
Gute Nacht
Apley