Frage zu Array



  • scanf("%d-%d-%d", &a[0], &a[1], &a[2] );
    

    Die Bindestriche machen aber ein bisschen Radau.



  • Jolka schrieb:

    scanf("%d-%d-%d", &a[0], &a[1], &a[2] );
    

    Die Bindestriche machen aber ein bisschen Radau.

    Wieson das?



  • Erst mal danke für die bisherigen Beiträge!

    Bin die ganze Zeit nebenher schon am testen, jedoch komm ich immer noch nicht weiter. Ihr habt gezeigt wie ich ein Array in einer Zeile ausgeben kann. Ich würde aber gerne wissen, wie ich es in einer Zeile einlesen kann. Mein Problem ist, dass ich bei der eingabe jede neue Zahl mit der Enter taste bestätige, und das Programm dadurch in eine neue Zeile hüpft.. war ja bei euren Codes genau so.

    Hoffe ich konnte euch klar machen was ich meine.. wenn noch fragen da sind einfach kurz fragen 🙂



  • Big Brother schrieb:

    Jolka schrieb:

    scanf("%d-%d-%d", &a[0], &a[1], &a[2] );
    

    Die Bindestriche machen aber ein bisschen Radau.

    Wieson das?

    Bei mir übernimmt er dann nur die erste Zahl des zweiten Feldes und packt dann die letzten beiden des ersten feldes hintendran. Ohne Bindestriche passiert das nicht. Übrigens: Was sollen die Bindestriche überhaupt bewirken?

    jumper schrieb:

    Erst mal danke für die bisherigen Beiträge!

    Bin die ganze Zeit nebenher schon am testen, jedoch komm ich immer noch nicht weiter. Ihr habt gezeigt wie ich ein Array in einer Zeile ausgeben kann. Ich würde aber gerne wissen, wie ich es in einer Zeile einlesen kann. Mein Problem ist, dass ich bei der eingabe jede neue Zahl mit der Enter taste bestätige, und das Programm dadurch in eine neue Zeile hüpft.. war ja bei euren Codes genau so.

    Hoffe ich konnte euch klar machen was ich meine.. wenn noch fragen da sind einfach kurz fragen 🙂

    Big Brother schrieb:

    Jolka schrieb:

    Also ich weiß nicht, ob er schon mit Zeigern umgehen kann, wenn er jetzt bei Feldern ist. Ich schätze mal er wird Probleme haben deinen Code zu verstehen.

    Mag sein, dann nimmt man eine indexbasierte Ausgabe:

    int a[3], i;
    	printf("Drei ganze Zahlen, getrennt durch ein Leerzeichen eingeben: ");
    	scanf("%d %d %d", &a[0], &a[1], &a[2] );
    
    	for ( i = 0; i<3; i++ )
    		printf("%d ", a[i]);
    
    	printf("\nDrei ganze Zahlen, getrennt durch einen Bindestrich eingeben: ");
    	scanf("%d-%d-%d", &a[0], &a[1], &a[2] );
    
    	for ( i = 0; i<3; i++ )
    		printf("%d ", a[i]);
    

    In diesem Code aber nicht. Da tippst du doch eine Zahl ein, machst ein Leerzeichen, tippst die nächste Zahl eine, machst wieder ein Leerzeichen, dann tippst du wieder die nächste Zahl ein unddrückst Enter.



  • jumper schrieb:

    Ich würde aber gerne wissen, wie ich es in einer Zeile einlesen kann.

    Genau das habe ich in meinem ersten Post ja auch angenommen und dir dafür ein Beispiel geschrieben 😉
    Sorry, das ich gerade kein goldenes Tablett mit Rotlicht und Hinweissirene parat habe 😃



  • jumper schrieb:

    Kannst du ein bischen genauer erklären was du damit meinst?

    Wenn du mit scanf() nicht zurecht kommst (soll passieren), kannst du die Zeile stattdessen auch einfach mit fgets() in einen Puffer einlesen, und dann mit strtol() oder strtok() recht bequem durchlaufen und konvertieren.
    🙂



  • Jolka schrieb:

    Bei mir übernimmt er dann nur die erste Zahl des zweiten Feldes und packt dann die letzten beiden des ersten feldes hintendran. Ohne Bindestriche passiert das nicht. Übrigens: Was sollen die Bindestriche überhaupt bewirken?

    Die Bindestriche bewirken nichts. Das ist das Format der Eingabe:
    Ganze Zahl Bindestrich Ganze Zahl Bindestrich Ganze Zahl usw.

    Jolka schrieb:

    In diesem Code aber nicht. Da tippst du doch eine Zahl ein, machst ein Leerzeichen, tippst die nächste Zahl eine, machst wieder ein Leerzeichen, dann tippst du wieder die nächste Zahl ein unddrückst Enter.

    Ja, wie denn sonst *g*



  • #include <stdio.h>
    
    int main(void)
    { int i, array[10];
    
      printf("Eingabe: ");
      scanf("%d %d %d %d %d %d %d %d %d %d", &array[0], &array[1], &array[2], &array[3], &array[4], &array[5], &array[6], &array[7], &array[8], &array[9]);
    
      printf("array:\n");
      for(i=0;i<10;i++)
      { printf("%d ", array[i]);
      }
    
    fflush(stdin);
    getchar();
    
    return 0;
    
    }
    

    Das dürfte glaube ich alle deine Ansprüche erfüllen.

    Big Brother schrieb:

    Jolka schrieb:

    Bei mir übernimmt er dann nur die erste Zahl des zweiten Feldes und packt dann die letzten beiden des ersten feldes hintendran. Ohne Bindestriche passiert das nicht. Übrigens: Was sollen die Bindestriche überhaupt bewirken?

    Die Bindestriche bewirken nichts. Das ist das Format der Eingabe:
    Ganze Zahl Bindestrich Ganze Zahl Bindestrich Ganze Zahl usw.

    Jolka schrieb:

    In diesem Code aber nicht. Da tippst du doch eine Zahl ein, machst ein Leerzeichen, tippst die nächste Zahl eine, machst wieder ein Leerzeichen, dann tippst du wieder die nächste Zahl ein unddrückst Enter.

    Ja, wie denn sonst *g*

    Du verstehst garnicht was ich damit sagen will...

    Der TS meinte, dass er immer nach einer Zahl Enter drücken muss und da habe ich ihm geantwortet, dass es bei diesem Code eben nicht so ist, sondern durch Leerzeichen getrennt wird und erst ganz am Ende einmal Enter gedrückt wird und fettisch.



  • Jolka schrieb:

    Das dürfte glaube ich alle deine Ansprüche erfüllen.

    Und was ist daran jetzt anders als in meiner Version, abgesehen davon, dass ich zu faul war und nur 3 statt 10 integer einlese?
    😕



  • Nicht besonders viel, wenn auch noch was anderes. Ist das ein Problem für dich?



  • Jolka schrieb:

    Nicht besonders viel, wenn auch noch was anderes. Ist das ein Problem für dich?

    Nöööö.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html



  • Jolka schrieb:

    Der TS meinte, dass er immer nach einer Zahl Enter drücken muss und da habe ich ihm geantwortet, dass es bei diesem Code eben nicht so ist, sondern durch Leerzeichen getrennt wird und erst ganz am Ende einmal Enter gedrückt wird und fettisch.

    Okee das hat mir jetzt schonmal sehr sehr weitergeholfen 😃



  • Jolka schrieb:

    ...
      for(i=0;i<10;i++)
      { printf("%d ", array[i]);
      }
    ...
    

    wer bringt euch sowas bei? ich hab ja schon mehr formatierungen gesehen aber die noch nie, finds jetzt auch spontan nicht mega schlecht, aber da wirst du probleme haben jemanden zu finden der da auf die schnelle durchblickt, da das so gut wie keiner gewohnt ist...

    also entweder

    Jolka schrieb:

    ...
      for(i=0;i<10;i++)
      { 
        printf("%d ", array[i]);
      }
    ...
    

    oder

    Jolka schrieb:

    ...
      for(i=0;i<10;i++){ 
        printf("%d ", array[i]);
      }
    ...
    

    oder

    Jolka schrieb:

    ...
      for(i=0;i<10;i++)
        { 
          printf("%d ", array[i]);
        }
    ...
    

    das sind alle die mir jetzt auf die schnelle einfalle evtl. ist da ja eine für dich dabei 😉



  • Meinst du die Klammer? lol
    Was gibt's da nicht durchzublicken? Da wird eine Klammer geöffnet und auf der selben Ebene wieder geschlossen. Da sieht man wenigstens was in die Schleife gehört und was außerhalb von ihr steht, wenn ich zum Beispiel etwas komplexeres habe wie...

    while(Antwort[0] == 'j' || Antwort[0] == 'J')
        { i=i+1;
          printf("\n\n\nSummand %d\n\n", i);
          printf("Minuten: ");
          scanf("%d", &min);
          while(min>=60)  
          { sumh+=1;
            min-=60;
          }
          summin+=min;
          printf("Sekunden: ");
          scanf("%d", &sec);
          while(sec>=60)
          { summin+=1;
            sec-=60;
          }
          sumsec+=sec;
          printf("\n\nNoch einen Summanden addieren? (j/n)");
          scanf("%s", &Antwort);
        }
    

    ...dann blicke ich da super durch. Ich sehe auf welcher Ebene eine Klammer geöffnet wurde und sehe dann auch auf einen Blick wo sie wieder geschlossen wird.

    Wobei ich finde finde, dass gerade dein zweites Beispiel äußerst unübersichtlich ist, da die Klammer direkt hinter dem for geöffnet wird und dann irgendwo unten wieder geschlossen wird. Da sieht man garnicht, dass das dazugehört, wenn es etwas komplexer wird. Mal ganz davon abgesehen, dass dein erstes und drittes Beispiel identisch sind und dass die Anweisung nur eine Zeile tiefer steht als bei mir. Wenn dich das zur Verzweiflung treibt, dann gute Nacht.



  • ja also über coding standards kann man ja ewig diskutieren ich denke die von mir aufgeführten beispiele sind mehr oder weniger standard also von leerzeichen mal abgesehen...

    dein stil seh ich heut zum ersten mal, das ist kein gutes zeichen, aber ok ich wollte dir nur andere zeigen und evtl. gefällt dir ja auch einer ich tippte spontan auf den ersten, darum steht er auch ganz oben, aber schreib das wie du willst mir ist das wurscht

    lg lolo



  • Jolka schrieb:

    Meinst du die Klammer? lol
    Was gibt's da nicht durchzublicken? Da wird eine Klammer geöffnet und auf der selben Ebene wieder geschlossen.

    ^^ich bin ganz deiner meinung. öffnende und die dazugehörige schliessende geschweifte klammer gehören in dieselbe spalte. alles andere ist grausam.
    🙂



  • ;fricky schrieb:

    ^^ich bin ganz deiner meinung. öffnende und die dazugehörige schliessende geschweifte klammer gehören in dieselbe spalte. alles andere ist grausam.

    ja super dann spricht doch nichts dagegen das so zu machen oder? dann bist du nicht der einzige der das so macht und andere finden das dann auch toll wenn sie deine sachen lesen 😉

    ...
      for(i=0;i<10;i++)
      { 
          printf("%d ", array[i]);
      }
    ...
    


  • Jolka schrieb:

    Mal ganz davon abgesehen, dass dein erstes und drittes Beispiel identisch sind

    evtl. waren die beispiele zu kurz ums korrekt zu machen sollte man auch eine identische einrückung von 4 leerzeichen verwenden....

    while(1)
    {
        while(1)
        {
            printf("hi");
        }
        pintf("hi1");
    }
    pintf("hi2");
    

    im kontrast zu

    while(1)
      {
        while(1)
          {
            printf("hi");
          }
        pintf("hi1");
      }
    pintf("hi2");
    

    so sollte der unterschied schon deutlich werden,
    btw. ich hab deinen stil schon aufgenommen in meine stil datenbank, mal schauen wann mir das wieder unter die griffel kommt 😉


Anmelden zum Antworten