For-Schleife für den Switch-Case



  • das ganze soll als DLL für Zemax (Optik-Software) werden. Ich befürchte aber, dass die Switch-Case Struktur trotzdem erhalten bleiben muss, damit Zemax den Code auch versteht. Das ist ein Teil des Programms:

    case 2:
          	/* ZEMAX is requesting the names of the extra data columns */
             /* the value FD->numb will indicate which value ZEMAX wants. */
             /* they are all "Unused" for this surface type */
             /* returning a null string indicates that the extradata value is unused. */
      	switch(FD->numb)
             	{
                case 1:
                	strcpy(UD->string, "d00");
                   break;
                case 2:
                	strcpy(UD->string, "d01");
                   break;
                case 3:
                	strcpy(UD->string, "d02");
                   break;
    

    Source2702 schrieb:

    Ungetestet:

    for(int i = 1; i < 121; i++){
      sprintf(UD->string, "d%03d", i);
    }
    

    irgendwie erkennt er sprintf nicht, wird rot unterstrichen



  • Es muss i-1 sein (1 => "d00"). Außerdem braucht er noch eine Unterscheidung von 1-2 oder 3 Stellen (wenn er die Anforderung richtig beschrieben hat).

    Stimmt, i - 1. Wie ich das sehe braucht er nur zwischen 2 oder 3 Stellen zu unterscheiden. Also statt %03d einfach %02d.

    irgendwie erkennt er sprintf nicht, wird rot unterstrichen

    sprintf ist in <stdio.h> drin.



  • Source2702 schrieb:

    Wie ich das sehe braucht er nur zwischen 2 oder 3 Stellen zu unterscheiden. Also statt %03d einfach %02d.

    Jo, stimmt natürlich. 😃

    skyforce schrieb:

    Ich befürchte aber, dass die Switch-Case Struktur trotzdem erhalten bleiben muss, damit Zemax den Code auch versteht.

    Ganz bestimmt nicht. Wie kommst du darauf?

    Was soll das mit temp ? Du brauchst keine Zwischenvariable. Schreibe direkt nach UD->string, wie Source2702 gezeigt hat.



  • ...



  • [quote="_matze"]

    Source2702 schrieb:

    Ungetestet:

    for(int i = 1; i < 121; i++){
      sprintf(UD->string, "d%03d", i-1);
    }
    

    So läuft es nicht, weil FD->numb nicht berücksichtigt wurde!



  • [quote="skyforce"]

    _matze schrieb:

    Source2702 schrieb:

    Ungetestet:

    for(int i = 1; i < 121; i++){
      sprintf(UD->string, "d%03d", i-1);
    }
    

    So läuft es nicht, weil FD->numb nicht berücksichtigt wurde!

    Du musst ja auch nicht alles 1:1 kopieren. Aber die Idee sollte doch klar werden. Kannst du dir nicht selber denken, wo genau du jetzt dein FD->numb unterbringen musst? Dein Riesen-switch kannst du jedenfalls mit einer Zeile abfrühstücken (Tipp: du brauchst auch keine for-Schleife).



  • Ich habe grad das hier probiert:

    sprintf(UD->string,"d%03d",(FD->numb));
    

    Das macht nicht genau das was ich will, aber für mein Vorhaben reicht das.
    Ich bin ein absoluter Neuling in Sachen Programmieren, komm mit den ganzen Codes von Zemax nicht ganz klar.



  • ...



  • Das sollte doch genau das machen, was du mit deinem switch-Statement gezeigt hast. 😕



  • Naja ich will ja nur 121 Variablen definieren. Mit dieser Zeile definiert er die größtmögliche Anzahl an Variablen nämlich 242. aber egal vielen Dank für eure Hilfe!!



  • ...



  • Ich hab im 1. Post geschrieben, dass ich 121 Cases (Fälle) definieren möchte.
    Aber es ist nicht schlimm.

    Das ganze ist ein DLL, welche eine 3D-Fläche (B-Splines) definiert, und später in das Optik-Programm Zemax eingebaut werden soll. Für die Fläche brauche ich 121 Kontrollpunkte als Variablen, deswegen muss ich diese Variablen definieren. Es ist nicht schlimm wenn es mehr wird, dann verwende ich einfach nur 121, der Rest bleibt 0. Und "numb" geht bis max 242

    1000 Dank nochmal für Eure Hilfen!



  • Ok, so wird das nix. Du musst dringend lernen, dich klar auszudrücken. Für das, was du bislang gezeigt hast, haben wir dir soweit wie möglich eine Entsprechung gezeigt, die deine paar Hundert Zeilen in einer einzigen abbildet. Und jetzt redest du irgendwas von "121 Variablen definieren". Das habe ich aus deinem Eingangspost und vor allem aus deinem Code nicht herauslesen können. Du solltest mal wirklich deutlich sagen, welche Daten du in welchem Format brauchst. Beschreibe das mal ganz genau, und liefere den Typ von "UD" gleich mal mit. Ich bin sicher, wir können dir zeigen, wie du mit wenigen Zeilen deine Daten zusammengebastelt kriegst. Du musst uns halt nur vernünftig vermitteln, was du eigentlich brauchst.



  • Vielen Dank für den Hinweis

    Ehrlich gesagt verstehe ich noch nicht alles was in einer DLL drin steht. Zemax liefert ein paar Beispiele mit, damit man sich die Codes anschauen kann. Zemax will aber nicht alles preisgeben. Mein Problem ist soweit gelöst, von daher kann man den Thread jetzt schließen.


  • Mod

    Wieso braucht man dafür case Blöcke?

    sprintf(UD->string, "d%02d", FD->numb-1);
    


  • Martin Richter schrieb:

    Wieso braucht man dafür case Blöcke?

    Weil er seinen Code nur ausgeführt haben will, wenn

    1 <= FD->numb <= 121
    

    gilt.

    Im fehlt also noch ein simples "if".


Anmelden zum Antworten