Forum: PC-Programmierung Printf -Funktion in For-Schleife


von gast (Gast)


Lesenswert?

Hallo,
wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe
ZB: PINC1,2,4,7 are high und nicht:
PinC1 are High
PinC2 are High
PinC4 are High
PinC7 are High
Ich habe versuch das Treffen in einer anderem Array zu kopieren, aber 
aus der For-Schleife bekomme ich nur das letzte Element.
Danke


         uint8_t PinC_Status[8] = {0, 1, 2, 3, 4, 5, 6, 7};
   uint8_t *Ptr_PinC_Status;
   Ptr_PinC_Status = PinC_Status;
   uint8_t Value = PORTC;

   for( uint8_t i = 0; i < 8; i++ )
   {
     if(Value & ( 1 << i )) {

     printf("PINC%i are high", Ptr_PinC_Status[i]);

     }

   }

von Karl H. (kbuchegg)


Lesenswert?

gast schrieb:
> Hallo,
> wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe
> ZB: PINC1,2,4,7 are high und nicht:
> PinC1 are High
> PinC2 are High
> PinC4 are High
> PinC7 are High

Durch nachdenken?
Was muss in welcher Reihenfolge ausgegeben werden?

Das "PINC" ist fix und wird daher vor der Schleife ausgegeben.
Innerhalb der Schleife wird die jeweilige Zahl (wozu eigentlich das 
Zwischenarray?) ausgegeben, wenn der Pin high ist. Schwierigkeit dabei 
ist eigentlich nur, das Komma entsprechend einzuschmuggeln. Aber da kann 
man sich mit einem Merker behelfen. Das Komma wird nur ausgegeben wenn 
der Merker gesetzt wurde und der wird nach der ersten ausgegebenen Zahl 
gesetzt. Damit kommt vor die erste Zahl kein Komma und bei allen 
weiteren auszugebenen Zahlen kommt ein Komma davor.

Und dann kommt zum Schluss, nach der Schleife der wiederrum konstante 
Text "are high" hinten drann.
1
    uint8_t Value = PINC;
2
    uint8_t PrintKomma;
3
4
    if( Value != 0 )     // ist überhaupt ein Bit ungleich 0?
5
    {
6
      printf( "PINC " );
7
8
      PrintKomma = FALSE;
9
10
      for( uint8_t i = 0; i < 8; i++ )
11
      {
12
        if( Value & ( 1 << i ) )
13
        {
14
          if( PrintKomma )
15
            printf( ", " );
16
          printf( "%d", (int)i );
17
          PrintKomma= TRUE;
18
        }
19
      }
20
21
      printf( " are high" );
22
    }
23
    else
24
      printf( "No Pins on PINC are set" );

von gast (Gast)


Lesenswert?

danke sehr für die gute Beschreibung

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.