Array mit unbestimmter Größe erstellen
-
TactX schrieb:
ten schrieb:
// alles ok, dann hinten das '\n' löschen p[strlen(p)] = 0;
Best NOP ever
hab's ausgebessert...
-
@ ten
hey das du so eine Geduld mit mir mitbringst ..respekt!Desweiteren habe ich mir mal so Gedanken gemacht über die ganze Aufgabe. eigentlich kommt nur in einer Textpassage vor das die "unabhängige Länge des Strings" gefordert wird. Dieses jedoch im späterem Programmablauf. Anbei dazu mal die Textpassage.
http://img124.imageshack.us/img124/6336/stringwl8.th.jpg
Versteh ich das jetzt richtig, das mein Eingabestring nicht unendlich sein muss, sondern nur diese geforderte Prüfziffer muss unendlich viele Strings verarbeiten könne? Denn das wäre ja schon erledigt.
Obwohl es dann irgendwie kein Sinn macht sowas zu fordern. (Ja ich weiß, ich will es mir jetzt einfach machen :), weil ich den unendlichen String einfach nicht in den Griff bekomme.)
In der Aufgabe davor wird einfach nur ein eingabe-String verlangt und diesen soll man dann analysieren und dann etnscheiden ob er der richtige oder falsche ist. Und dann halt diese Prüfziffergeschichte drüberlaufen lassen. Und eben auch aus diesem Grund habe ich gedacht das der Eingabestring auch unendlich sein muss.Denn sonst würde ich das jetzt einfach so lösen
char Anzahl[100]; printf("Anzahl eingeben: "); scanf("%s", anzahl);
Gruß
Apley
-
Apley schrieb:
Desweiteren habe ich mir mal so Gedanken gemacht über die ganze Aufgabe.
An Deiner Stelle würde ich damit nicht zu schnell wieder aufhören...
-
@Würd_gern_C_können
Also so schnell gib ich generel nicht auf, jedoch läuft mir die Zeit davon. Muss die Aufgabe schon am Montag abgeben. Also du siehst bei mir ist es kurz vor 12Jaja, ich weiß etwas spät angefangen
Danke für dein Beispiel, jedoch soll alles in Strings eingelesen werden, und daran bin ich verzweifelt. Int wären ja noch relativ einfach, aber stringsDesweiteren ist die Aufgabe sehr unklar gestellt.
Als Bsp. wird da eine Prüfzifferberechnung gefordert wenn der Funktion einen gültigen Zeigerwert (!=0) übergeben wird.Zeigerwert wovon? Also das kann verstehen wer will, ich habs inzwischen aufgegeben.
Ich hab jetzt meine Aufgabe fast fertig gelöst. Hab es mir teilweise auch etwas leichter gemacht.
Es gibt insgesamt 3 Dateien. Eine header mit angehörigem cpp und meine main.cpp. Bevor jemand meckertes wird alles in cpp verlangt.
Leider funktioniert jetzt ein Funktionsaufruf nicht.
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "123456.h" void Pruefzifferberechnung(void); void richtigezahl(void); float 123456(char); //Prototyp int main(void) printf("Bitte geben Sie die Ziffern ein: \n "); char pointer[100]; for(int i = 0; i < numbers; i++) scanf("%s", &pointer[i]); if(497628(pointer) == 0.0) // <<< Hier meldet er mir einen Fehler richtigezahl(); else if (497628(pointer) == 1.0) Pruefzifferberechnung (); else if (123456(pointer) == 2.0) void abort(void); //------------------------ float z497628 (const char Martikelnr[]) //....hier sollten dann die eingehenden Strings bearbeitet werden und am Ende // per Return als Float zurückgegeben werden Bsp: return = 2;
Naja, wie gesagt so war mein Plan, aber leider meldet er folgenden Fehler 3 x;
cannot convert parameter 1 from 'char [100]' to 'char'
bei if(123456(pointer) == 0.0))
Ich hoffe ihr könnt mir helfen. Oder hat jemand lust sich das ganze mal anzusehen? Das würde mir sehr viel helfen. Posten kann ich es nicht, höchstens am Sonntag abend oder montag früh, dann bräuchte ich aber eine ganz schnelle hilfe
So, gute Nacht
Apley
-
Bitte freunde Dich mit dem Gedanken an, das C und C++ zwei verschiedene Sprachen sind!
#include <stdio.h> // \ #include <string.h> // > gibt's in C++ alle 3 nicht #include <stdlib.h> // / #include "123456.h" // ...ein wahrlich selbstbeschreibender Dateiname :( void Pruefzifferberechnung( void ); // Das void in einer leeren Parameterliste ist überflüssig void richtigezahl( void ); // dito float 123456( char ); // Bezeichner müssen in C und C++ mit einem Buchstaben // oder einem Unterstrich beginnen. Unbenannte Parameter // in forward declarations sind sicher nicht best practice... int main( void ) // Hier ist das void nicht nur überflüssig sondern schon sehr an // der grenze der Legalität: Erlaubt sind 'int main( )' und // 'int main( char *argv[ ], int argc )', wobei die Parameternamen // in zweiter Variante frei wählbar sind. // Hier fehlt der Rumpf von main( )! // edit { // /edit printf("Bitte geben Sie die Ziffern ein: \n "); char pointer[100]; // Naja, eher ein Array. // Wieso benennst Du Variablen nicht einfach nach // ihrem Inhalt? zB. 'input' ? for(int i = 0; i < numbers; i++)// ist numbers definiert? Vielleicht in '123456.h' ? { // Klammern um Blöcke sind nie verkehrt... scanf( "%s", &pointer[ i ] ); } if(497628(pointer) == 0.0) // Die Funktion '497628' kann nicht aufgerufen werden, // weil Du die Regeln für Bezeichner in C und C++ mit // Füßen trittst... richtigezahl(); // ^ definiert? else if( 497628(pointer) == 1.0 ) Pruefzifferberechnung(); // ^ definiert? else if( 123456(pointer) == 2.0 ) void abort(void); // ^ Was Du hier machst ist grober Unfug! (Lokale Funktionsdefinition) // edit } // den Rumpf von main wieder schließen // /edit // ab hier hab ich keinen Plan mehr, was du wohl meinen magst...
greetz, Swordfish
-
scanf() kann doch auch Zahlen einlesen!
http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html
d Decimal integer: Number optionally preceeded with a + or - sign.
float 123456( char );
497628(pointer) == 0.0
Zwar hat es Swordfish schon gesagt, aber WTF?
-
ach verdammter Mist.... Ich hab mich ja öfters vertippt als mir lieb war. Ich hatte denn code etwas veralgemeinert, und das ist dann daraus geworden
Das man eine Funktion mit einem Buchstaben anfangen sollte wusste ich nicht.
In der Aufgabe fängt das mit einem Buchstaben. Nur ich hab es hier ohne Buchstabe geschrieben.
Es ist mir bewusst das C und C++ zwei Sprachen sind, jedoch wird das so in der Aufgabe gefordert.Am Anfang steht " Gefordert ist eine Ansi C implementierte Funktion, deren Form so auszusehen hat...." . Als abgabe wird dann eine header mit cpp und main.cpp verlangt. Was soll ich machen?! Hier mal einen Link zur Aufgabe
http://193.23.171.171/download/Inf1_Praktikum2006/Zusatzaufgabe0607.pdf@DEvent
Es werden Strings als Eingabe verlangt. Mit int wäre ich schon längst fertig.Ich verzweifle was Strings angeht. Diese umwandelei raubt mir den letzten Nerv
Auch wenn ich mich etwas blamiere, aber was heist WTF?
Ok, noch mal einen versuch. Diesmal ist es der Originalcode ohne viel verändert zu haben. Nicht schlagen weil er so lang ist.
#include <stdio.h> #include <stdlib.h> #include "w123456.h" void Pruefzifferberechnung(void); // Prüefziffer wird berechnet und am Bildschirm ausgegeben void richtigezahl(void); // Zahl = OK , wird also am Bildschirm ausgegeben float w123456(char); // Check was für einen Eingabe getätigt wurde int numbers; int eingabe[100]; void main() { char input[100]; int r; printf("Bitte geben Sie die Anzahl der Ziffern an: \n"); scanf("%i", &numbers); printf("Bitte geben Sie die Ziffern einzeln ein \n "); for(int i = 0; i < numbers; i++) // Schleife für die Aufnahme der Ziffern { scanf("%s", &input[i]); } for(int r = 0; r < numbers; r++) // Wandelt die eingegebenen char in int um - eingabe[] { if (48 == input[r]) eingabe[r] = 0; else if(49 =...) . . . // printf("eingabe %i = pointer %s \n", eingabe[r], input); } if(w123456(input) == 0.0) // Prüfen welche Ausgabe das Programm durchführen muss richtigezahl(); else if (w123456(input) == 1.0) Pruefzifferberechnung (); else if (w123456(input) == 2.0) void abort(void); } void richtigezahl(void) // Printausgabe richtige Martikelnummer { printf(" 123456 \n"); } void Pruefzifferberechnung(void) { int r; int summeeinzelprodukte = 0; for(i = 0; i < numbers; i++) // Schleife für Berechnung der Pruefziffer { if ((i % 2) == 0) { summeeinzelprodukte = summeeinzelprodukte + eingabe[i] + 3; // printf("Summe einzelprodukte = %i \n", summeeinzelprodukte); } else { summeeinzelprodukte = summeeinzelprodukte * eingabe[i]; // printf("Summe einzelprodukte = %i\n", summeeinzelprodukte); } } int modulo10 = summeeinzelprodukte % 10; // printf("Modulo10 = %i \n", modulo10); int pruefziffer = (10-modulo10)%10; switch (pruefziffer) // Printanweisung für die Prüfziffer { case 1: printf("1\n\n\n"); break; case 2: printf("2\n\n\n"); break; case 3: printf("3\n\n\n"); break; case 4: printf("4\n\n\n"); break; case 5: printf("5\n\n\n"); break; case 6: printf("6\n\n\n"); break; case 7: printf("7\n\n\n"); break; case 8: printf("8\n\n\n"); break; case 9: printf("9\n\n\n"); break; } }
dazu noch die header.cpp w123456
#include "w123456.h" float w123456 (const char Martikelnr[]) // Der Funktionname muss so aussehen. Darf nicht verändert werden { n = sizeof(Martikelnr) / sizeof(char); for (r = 0; r < n-1; r++) // prüfen der Martikelnr auf Fehleingabe { if(Martikelnr[r] > d || Martikelnr[r] < e) /* es wird getestet ob das Zeichen nach ASCII über 9 oder unter 0 liegen */ return rueckwert_an_main = 2; else if (Martikelnr[r] != EigeneMartikelnr[r]) return rueckwert_an_main = 1; /* Falsche Martikelnummer */ else return rueckwert_an_main = 0; /* Richtige Martikelnummer */ } }
[url]
-
DEvent schrieb:
float 123456( char );
497628(pointer) == 0.0
Zwar hat es Swordfish schon gesagt, aber WTF?
was mich mal echt geschockt hat, ist sowas:
char a[] = {1,2,3}; 3[a] = 10; // <-- kein syntax error!
ich weiss jetzt noch nicht mal in welcher sprache das ging, php glaub' ich...
-
Apley schrieb:
Am Anfang steht " Gefordert ist eine Ansi C implementierte Funktion, deren Form so auszusehen hat...." . Als abgabe wird dann eine header mit cpp und main.cpp verlangt. Was soll ich machen?!
Dem Prof sagen, dass er hierherkommen soll um C zu lernen.
ten schrieb:
was mich mal echt geschockt hat, ist sowas:
char a[] = {1,2,3}; 3[a] = 10; // <-- kein syntax error!
ich weiss jetzt noch nicht mal in welcher sprache das ging, php glaub' ich...
a[3]
*(a + 3)
*(3 + a)
3[a]Dass er dabei an nicht-reservierten Speicher schreibt ignorieren wir mal
-
Erstens: Du hast zwei verschiedene Funktionen mit dem Namen w123456() (die im Hauptrpogramm erwartet einen char, die in der w123456.cpp ein char-Array). Unter C++ wäre das womöglich legal (Überladung - könnte höchstens vom Linker moniert werden), in C definitiv nicht.
Zweitens: Diese sizeof-Konstruktion funktioniert nur recht eingeschränkt - und in deinem Fall liefert sie nicht das richtige Ergebnis. Nimm lieber strlen(), um die Länge des übergebenen Strings zu bestimmen.
Drittens: Wo hast du die lokalen Variablen der w123456() definiert?
Viertens: Der Ausdruck
void abort(void);
ist kein Funktionsaufruf - an der Stelle brauchst du einabort();
Fünftens @Swordfish: Dies ist das ANSI C Board, da bringt es nichts, C++ spezifische Faktoren zu diskutieren (C-Header, void-Paramterlisten, int main(void), etc. - btw sind die auch in C++ legal zu verwenden).
@ten: Das geht sogar in C
Der []-Operator
p[i]
ist eine Kurzform für*(p+i)
- und der ist witzigerweise kommutativ.
-
TactX schrieb:
Dass er dabei an nicht-reservierten Speicher schreibt ignorieren wir mal
du siehst einfach alles
CStoll schrieb:
...und der ist witzigerweise kommutativ.
ja, komisch, ne?
-
Apley schrieb:
Am Anfang steht " Gefordert ist eine Ansi C implementierte Funktion, deren Form so auszusehen hat...." . Als abgabe wird dann eine header mit cpp und main.cpp verlangt.
Man kann natürlich so großzügig sein zu sagen dass ein C-Programm auch die Endung .q haben könnte, aber normalerweise wäre diese Aussage ausreichend, den Herrn Prof. Dr. Thomas Zielke von der Hochschule zu verweisen.
Was ich auch sehr lustig finde: Ihr sollt die Aufgabe ausschließlich auf einer CD-ROM abgeben? Hat dort jeder Student sein eigenes Presswerk?
(Auch wenn klar sein dürfte, dass CD-R gemeint ist: Selbst zu verlangen, dass jeder Student Windows und einen Brenner haben muss, finde ich schon arg).
-
Es werden Strings als Eingabe verlangt. Mit int wäre ich schon längst fertig
Dann lies doch einen vollständigen String ein und wandele ihn in ein Int um. Es gibt auch dazu eine Funktion, weis nur den Namen nicht mehr. Google ist dein Freund
Aber das ist der Alptraum:
for(int i = 0; i < numbers; i++) // Schleife für die Aufnahme der Ziffern { scanf("%s", &input[i]); }
Soll das eine Matrikelnummer sein? Da muss ich ja 8 mal Enter drücken. Ausserdem ist dann scanf("%s", &input[i]); eh falsch. %s liest einen String ein, keinen Char! Ein String ist mindestens 2 Zeichen. Strings sind Null-Terminiert.
Das wäre richtiger:c Single character: Reads the next character. If a width different from 1 is specified, the function reads width characters and stores them in the successive locations of the array passed as argument. No null character is appended at the end. char *
Einen String kannst du so einlesen:
char buffer[256]; scanf("%s", &buffer);
Und dann den buffer in einen integer umwandeln mit der passenden Funktion. Hier müsstest du sie finden: http://www.cplusplus.com/reference/clibrary/
switch (pruefziffer) // Printanweisung für die Prüfziffer { case 1: printf("1\n\n\n"); break; case 2: printf("2\n\n\n"); break; case 3: printf("3\n\n\n"); break; case 4: printf("4\n\n\n"); break; case 5: printf("5\n\n\n"); break; case 6: printf("6\n\n\n"); break; case 7: printf("7\n\n\n"); break; case 8: printf("8\n\n\n"); break; case 9: printf("9\n\n\n"); break; } }
Was soll der Schrott? Kannst du nicht einfach printf("%d\n", pruefziffer); verwenden?
Schon genannt, aber hier nochmal:
float w123456 (const char Martikelnr[]) // Der Funktionname muss so aussehen. Darf nicht verändert werden { n = sizeof(Martikelnr) / sizeof(char); // ^ n ist nicht definiert for (r = 0; r < n-1; r++) // prüfen der Martikelnr auf // ^ r ist nicht definiert Fehleingabe { if(Martikelnr[r] > d || Martikelnr[r] < e) /* es wird // ^ ^ d und e ist nicht definiert getestet ob das Zeichen nach ASCII über 9 oder unter 0 liegen */ return rueckwert_an_main = 2; // WTF ist das?? ein return 2; reicht! else if (Martikelnr[r] != EigeneMartikelnr[r]) return rueckwert_an_main = 1; /* Falsche // WTF ist das?? ein return 1; reicht! Martikelnummer */ else return rueckwert_an_main = 0; /* Richtige // WTF ist das?? ein return 0; reicht! Martikelnummer */ } }
Was hast du für einen Compiler? Der müsste es dir doch sagen: r is used but not defined. Oder sowas ähnliches.
PS: WTF = What the f*u*c*k
// Der Funktionname muss so aussehen. Darf nicht verändert werden
btw, muss der Name der Funktion so heißen oder muss der Funktionsprototyp so aussehen?
-
DEvent schrieb:
Es werden Strings als Eingabe verlangt. Mit int wäre ich schon längst fertig
Dann lies doch einen vollständigen String ein und wandele ihn in ein Int um. Es gibt auch dazu eine Funktion, weis nur den Namen nicht mehr. Google ist dein Freund
Da gibt's einige - atoi(), strtol(), sscanf() - such dir was aus
(oder schau mal in die C++ FAQ unter "Einmal Zahl und zurück")
-
for(int i = 0; i < numbers; i++) // Schleife für die Aufnahme der Ziffern { scanf("%s", &input[i]); }
Es ist mir bewusst das hier ein String eingelesen wird und dann zwei Zeichen abgespeichert werden. Aber als ich diese Schleife getest habe und auch die Ausgabe als Prüfung ausgegeben habe war alles so wie ich es mir wünschte.
Obwohl deine Lösung ist ja fast das selbe. Werde es testen un bei Erfolg einsetzen. Nichts gegen deine Lösung aber du kennst meine Unfähigkeit nichtJungs, ihr zerlegt mich ja richtig. Komm mir ja richtig unfähig vor
Und dabei war ich ja schon ganz Stolz das ich nur noch eine Fehlermeldung herausbekommen habe.
Das soll im Programm dann später so ausshen. Es war jetzt nur einfachheitshalber mit 1,2,3 geschrieben
switch (pruefziffer) // Printanweisung für die Prüfziffer { case 0: printf(" 0000000 \n"); printf(" 0 0 \n"); printf(" 0 0 \n"); printf(" 0 0 \n"); printf(" 0000000 \n\n"); break;
Dann mal nächste Baustelle. Vorhin hatte ich vergessen die header Datei zu posten
/*w123456.h*/ const char EigeneMartikelnr[]= { "123456" }; int i, r, n; char d = '9'; char e = '0'; float w123456(char);
und die dazugehörige cpp
/*w123456*/ #include "w123456.h" float w123456 (const char Martikelnr[]) { n = sizeof(Martikelnr) / sizeof(char); for (r = 0; r < n-1; r++) // prüfen der Martikelnr auf Fehleingabe { 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 */ else return = 0; /* Richtige Martikelnummer */ } }
// Der Funktionname muss so aussehen. Darf nicht verändert werden
btw, muss der Name der Funktion so heißen oder muss der Funktionsprototyp so aussehen?liegt da irgendwo ein Unterschied? Da wird es bestimmt einen geben denn sonst hättest du bestimmt nachgefragt.
Also es ist eine ANSI C implementierte Funktion gefordert, deren Protoryp folgende Form haben mussfloat w123456 (const char *martikelnummer)
Desweiteren -> martikelnummer: als ersten Parameter erwartet die Funktion eine Zeichenkette (String), d.h einen Zeiger auf ein Feld vom Typ char.
Erst jetzt merke ich das er da einen Zeiger braucht. Ufffff... Ich kann denn Zeiger dann in meine header.cpp gar nicht mehr verarbeiten. muss ja alles umstellen.
Ich schmeiss das Ding in Tonne....
CStoll schrieb:
DEvent schrieb:
Es werden Strings als Eingabe verlangt. Mit int wäre ich schon längst fertig
Dann lies doch einen vollständigen String ein und wandele ihn in ein Int um. Es gibt auch dazu eine Funktion, weis nur den Namen nicht mehr. Google ist dein Freund
Da gibt's einige - atoi(), strtol(), sscanf() - such dir was aus
(oder schau mal in die C++ FAQ unter "Einmal Zahl und zurück")Ich hab mich gestern den ganzen Tag nur mit diesen 3 Befehlen beschäftigt. Die Beispiel funktionierten alle, wollte ich das bei mir umsetzten ging nichts mehr. Ständig nur Fehlermeldungen. Deshalb auch meine fast resignation dem gegenüber.Hatte ich es schon erwähnt das ich es mir dann relativ einfach machen wollte. Werde es aber heute nochmal probieren.
Apley
-
Apley schrieb:
Jungs, ihr zerlegt mich ja richtig. Komm mir ja richtig unfähig vor
Und dabei war ich ja schon ganz Stolz das ich nur noch eine Fehlermeldung herausbekommen habe.
Selbst eine Fehlermeldung ist eine zu viel
(und idR sind die Fehler, die der Compiler nicht entdeckt, die unangenehmeren).
Dann mal nächste Baustelle. Vorhin hatte ich vergessen die header Datei zu posten
/*w123456.h*/ const char EigeneMartikelnr[]= { "123456" }; int i, r, n; char d = '9'; char e = '0'; float w123456(char);
Diese Variablen haben nichts im Header zu suchen, die werden nur lokal in deiner Funktion benötigt, also mußt du sie auch nur dort anlegen. 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).Desweiteren -> martikelnummer: als ersten Parameter erwartet die Funktion eine Zeichenkette (String), d.h einen Zeiger auf ein Feld vom Typ char.
Erst jetzt merke ich das er da einen Zeiger braucht. Ufffff... Ich kann denn Zeiger dann in meine header.cpp gar nicht mehr verarbeiten. muss ja alles umstellen.
Ich schmeiss das Ding in Tonne....
So tragisch ist das auch wieder nicht - bei einem ordentlichen String kannst du mit strlen() die länge herausfinden (im Gegensatz zu deinem sizeof()-Ansatz funktioniert das sogar ;)). Und außerdem solltest du dir mal die Funktionen isdigit() und strcmp() ansehen.
PS: Übrigens werden C-Programme gewöhnlich als "xxx.c" gespeichert - die Endung .cpp deutet auf C++ Programme hin.
-
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?
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.
Zur Dateieindung cpp sag ich nichts mehr. gefordert ist C aber zu speichern in cpp. Frag jetzt nicht nach dem wieso.
werde dann mal meinen code ändern und schauen was passiert.
Nur das mit dem Zeiger macht mir etwas schwierigkeiten. Denn ich weiß nicht wieso er da einen Zeiger haben will. Ich weiß mit zeigern so gut wie gar nicht umzugehen. Muss mal sehen wie ich das da löse.
nur zum Verständniss: Die funktion erwartet da einen Zeiger der auch ein Char zeigt, bei mir also der input-String
char *martikelnr; char input = {"123456"}; martikelnr = &input;
und dies Martikelnr wird dann die funktion übergeben
. . w123456 (Martikelnr); . .
sehe ich das so richtig?
Apley
-
Apley schrieb:
nur zum Verständniss: Die funktion erwartet da einen Zeiger der auch ein Char zeigt, bei mir also der input-String
Die Funktion erwartet einen Zeiger, der auf eine Reihe von chars zeigt. Und da liegt auch der Knackpunkt: Ein Char ist immer nur ein Zeichen. Um eine Kette von Zeichen zu übergeben, nutzt Du einen Zeiger auf das erste dieser Zeichen. Wobei ein Array grundsätzlich als Zeiger benutzt werden kann.
Damit ist dieser Teil schonmal hinfällig:
char input = {"123456"};
Ein char ist ein Zeichen, eins eins eins ;). Richtig wäre:
char input[] = "123456";
Dieses Array namens input darfst Du allerdings als Zeiger verwenden, also auch ohne Adressoperator an die Funktion übergeben.
w123456(input); /* gleichbedeutend: */ char* matrikelnr = input; w123456(matrikelnr);
BTW: Wieso nutzt Du immer [ cs]-Tags? C-Quellcode mit C++-Dateiendung und C#-Syntaxhighlighting?
-
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().