Frage zu Array



  • Bin gerade dabei mich ein wenig an C zu versuchen... Bin jetzt bei Arrays und komme einfach nicht weiter 😕

    int array[10];
    
    printf("Array:\n");
    
    for(int i = 0; i < 10; i++)
    {
       array[i] = scanf("%s", &array);
       printf("-");
    
    }
    

    Ich will das Array mit 10 Zahlen befüllen.. allerdings wird bei diesem Code jede Zahl in einer neuen Zeile eingegeben in etwa so:

    Array:
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -0

    Ich hätte gerne einen Code der das Array so einliest:

    Array:
    1-2-3-4-5-6-7-8-9-0

    ... kann mir da irgend jemand ne´n tipp geben wie ich sowas hin bekomme?



  • Einen einzigen String einlesen und den dann von Hand auseinanderpflücken.



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



  • #include <stdio.h>
    
    int main(void)
    { int i, array[10];
    
      for(i=0;i<10;i++)
      { printf("array[%d]: ", i);
        scanf("%d", &array[i]);
      } 
      printf("\narray: %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]);
    
    getchar();
    getchar();
    
    return 0;
    
    }
    


  • Du willst alle Zahlen in einer Zeilen einlesen, d.h. mit einem Entertastendruck, ne.

    int a[4] = {0,0,0,-1}, *p = a;
    	printf("Drei ganze Zahlen, getrennt durch ein Leerzeichen eingeben: ");
    	scanf("%d %d %d", &a[0], &a[1], &a[2] );
    	while ( *p != -1 )
    		printf("%d ", *p), p++;
    


  • 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.



  • 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]);
    


  • 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.


Anmelden zum Antworten