Überprüfen ob eingegbene zeichen zahl ist

seriously

Mitglied
Hallo
Ich arbeite am Microcontroller und kann jetzt dieses Programm nicht jetzt testen(erst in der Schule kann ich es testen).
Deswegen hab ich es hier gepostet damit Sie mir vielleicht sagen können ob das stimmt.

immer 3 Zeichen einlesen und überprüfen, ob es sich
bei jeder Stelle um eine Zahl handelt.Wenn es nicht so ist eine Fehlermeldung ausgeben und der Empfang der
Zeichen beginnt von vorne.
Wurde eine 3-stellige Zahl empfangen, wird die Zahl modulo 256 am ausgegeben bis die nächste Zahl empfangen wurde, das Muster auf der 7-Segmentanzeige wird
gelöscht. Beachten Sie beim Umrechnen der Zahl, dass Sie die Eingabe in einem String
vorliegen haben.
Code:
   while(1)
    {
		for (int16_t i=0; i<3; i++)
       {
		   buf[i]= _getkey();		   
	   }
	   for(int16_t j=0; j<3; j++)
	   {
           if (!('0' <= buf[j] && buf[j] <= '9'))
	          {
		         PORTB = 0xAA;   //  taruriges smiley wenn keine Zahl vorhanden ist 
				 zahl_vorhanden = 1;
	          }
	   }	       
	   if(zahl_vorhanden != 1)
	   {
		   PORTB = 0xFF; // alle aus
		   zahl= ((buf[0]-'0')*100 +(buf[1]-'0')*10 + (buf[2]-'0')*1);
		   PORTA = ~(zahl%256);
	   }				 
	           
	   return 0;		   		   
    }
 
Hallo seriously

Vom C-Standard her sieht das korrekt aus bzw. wird funktionieren.
Die Anzeige über PORTA / PORTB kann ich auch nicht überprüfen.
Einige Dinge möchte ich noch anmerken, die zwar so funktionieren, aber nicht besonders schön sind:
C:
while(1)
{
    //Mache etwas
    return 0;
}
Das ist nicht sehr sinnvoll. Du machst eine unendlich lange laufende Schlaufe in einer Funktion, die nach einmaligen Schleifendurchlauf abgebrochen wird. Wenn das die main() ist, dann wird nur ein Zahlensatz gelesen werden.
C:
zahl= ((buf[0]-'0')*100 +(buf[1]-'0')*10 + (buf[2]-'0')*1);
//x*1 bleibt x. Lasse das "*1" doch einfach weg.
zahl= ((buf[0]-'0')*100 +(buf[1]-'0')*10 + (buf[2]-'0'));

Gruss
cwriter
 
Zurück