string auswerten



  • Hallo, ich soll eine Fkt. pruefe_nachricht schreiben, der eine Nachricht als Zeichenkette übergeben wird. Die Funktion gibt 1 zurück, wenn die Nachricht gültig ist,
    sonst 0. Die Funktion überprüft dazu, ob die Gesamtlänge der Nachricht dem
    Aufbau entspricht, ob die Ziffernfelder nur Ziffern enthalten, und ob sich die
    Prüfziffer aus der angegebenen Fahrzeugnummer ergibt.

    Hier noch ein Aufbau der Nachricht

    |Name 5 Zeichen| Fahrzeugnummer 7 Ziffern |Bauteilname 3 Zeichen |...| Bauteilname 3 Zeichen | Prüfziffer 1 Zeichen | '\0'

    Beispiel: ComRo1234567T01T02T03T028

    Mein Code lässt sich aber nicht kompilieren. Kann mir hierbei wer helfen? Vielen Dank!

    int pruefe_nachricht(char nachricht[]){
    
    int anz_teile=0;
    int fn[7];
    int fnsumme=0;
    int prz;
    
    int rest = (sizeof(nachricht)-14);
    
    if(rest%3 != 0) {return 0;}
    
    int i;
    int j=0;
    int temp;
    
    from(i=5; i<13; i++){
    
    	temp = nachricht[j]-'0';
    	fn[j] = temp;
    	if(fn[j]< 0 || fn[j] > 9) return 0;
    	fnsumme = fnsumme + temp;
    	j++;
    	}
    
    prz = fnsumme % 10;
    
    int przo = (nachricht[sizeof(nachricht)-1]-'0');
    
    if (prz == przo) return 1;
    else return 0;
    
    } 
    
    void main (){
    
    char nachricht[]= "ComRo1234567T01T02T03T028";
    
    int temp = pruefe_nachricht(nachricht);
    print("%d", temp);
    
    }
    


  • guck dir doch mal die fehlermeldungen des compilers an.
    from gibts nicht, print gibts auch nicht.

    int rest = (sizeof(nachricht)-14);
    

    tut nicht was du erwartest.
    ein array als parameter wird zum zeiger, der wert von sizeof(nachricht)
    hat also einen wert, der konstant ist (4 oder 8 bytes), völlig egal wie viele zeichen du in der main-funktion dem array zuweist.



  • omfg - from statt for - was ist los mit mir...

    okay - das mit sizeof hatte ich nicht beachtet - versuche das Ganze mit einer while-Schleife und der Suche nach '\0' zu lösen. Danke erst mal!



  • Spricht was gegen strlen() ?



  • 1. Du solltest hier immer die Fehlermeldungen mitposten. Auch, wenn es in diesem Fall recht offensichtlich war. Du erleichterst den Leuten damit das Helfen und kriegst im Gegenzug auch schneller Hilfe.

    2. Lerne, Fehlermeldungen zu verstehen! Wenn der Compiler dir sagt, dass er den Bezeichner XYZ in Zeile 123 nicht kennt, solltest du eigentlich schnell selbst auf die Lösung kommen. 🙂



  • Ja leider schon - Darf in der Prüfung keine Bibliotheken verwenden außer stdio.h und stdlib - einzig erlaubte Fkt. wäre sizeof

    DirkB schrieb:

    Spricht was gegen strlen() ?



  • _matze schrieb:

    1. Du solltest hier immer die Fehlermeldungen mitposten. Auch, wenn es in diesem Fall recht offensichtlich war. Du erleichterst den Leuten damit das Helfen und kriegst im Gegenzug auch schneller Hilfe.

    2. Lerne, Fehlermeldungen zu verstehen! Wenn der Compiler dir sagt, dass er den Bezeichner XYZ in Zeile 123 nicht kennt, solltest du eigentlich schnell selbst auf die Lösung kommen. 🙂

    Zu Punkte 1: Mache ich in Zukunft 😉
    Zu Punkte 2: Compiler hat mir nur fehlende Semikolon bzw. Klammern ausgeworfen. Die Klammer- und Semikolonsetzung war aber korrekt, deswegen halfen mir die Fehlermeldungen nichts!



  • xanxdix schrieb:

    Ja leider schon - Darf in der Prüfung keine Bibliotheken verwenden außer stdio.h und stdlib - einzig erlaubte Fkt. wäre sizeof

    DirkB schrieb:

    Spricht was gegen strlen() ?

    stdio.h ist keine Bibliothek sondern eine Headerdatei und strlen ist Bestandteil der Standardbibliothek.

    mfg Martin



  • xanxdix schrieb:

    Zu Punkte 2: Compiler hat mir nur fehlende Semikolon bzw. Klammern ausgeworfen. Die Klammer- und Semikolonsetzung war aber korrekt, deswegen halfen mir die Fehlermeldungen nichts!

    Die waren aber nicht korrekt. Wenn Du eine Funktion Namens from aufruffst, müssen die Parameter mit Komma und nicht mit Strichpunkt getrennt werden.

    Wenn Du die Syntaxhervorhebung Deines Editors deaktivierst, dann mußt Du halt genauer schauen.

    mfg Martin



  • xanxdix schrieb:

    Ja leider schon - Darf in der Prüfung keine Bibliotheken verwenden außer stdio.h und stdlib - einzig erlaubte Fkt. wäre sizeof

    DirkB schrieb:

    Spricht was gegen strlen() ?

    strlen kannst du dir selbst schreiben, das sind nur wenige Zeilen.
    Oder übergib die Anzahl der Zeichen an die Funktion per sizeof(nachricht)-1,
    falls du die Anzahl der Parameter selbst bestimmen darfst:

    int pruefe_nachricht(char nachricht[], size_t anzahl_zeichen);
    

Anmelden zum Antworten