Programmieren
 
 
 
 
 
C-Grundkurs
 
 
 
 
 
.. Beispiel: Teste String auf Fließkommazahl
 
 

 
 
 
 

 

Aufgabe:

Schreiben Sie eine Funktion mit dem Namen tstFPnum(), die überprüft, ob ein String als Fliesskommazahl benutzt werden kann. Der String darf anstelle eines Dezimalpunktes ein Komma enthalten. Wurde der String als Fliesskommazahl erkannt, dann darf er verändert werden und das Komma in einen Punkt geändert werden.

Geben Sie ein Testprogramm für diese Funktion an.

 

 

 

 

 


 

// tstfpnum.cpp
// ------------ Version 20.05.2002
//              Model: small
//              Fliesskommaemulation ein (bei IPC@CHIP)
//              www.GoBlack.de, Schwarzer

// - Testet einen String, ob er eine gültige Fließkommazahl
//   enthält.

#include <stdio.h>      // für printf()
#include <math.h>       // für atof()


// tstFPnum()
// Die Funktion untersucht einen String darauf, ob er eine
// gültige Fliesskommazahl enthält. Wenn ..
// ja: Rückgabe 1, nein: Rückgabe 0
// Der String darf einen Punkt oder ein Komma enthalten,
// und die Zeichen + und - müssen sich auf der ersten
// Position befinden.
// Wurde der String als gültige Fliesskommazahl erkannt,
// wird ein eventuelles Komma durch einen Punkt ersetzt.


int tstFPnum(char* buf)
{
 int n=0, pktflg=0;
 while(buf[n]!=0){
  // Untersuchung Punkt / Komma, mehr als eins .. Fehler
  if(pktflg && (buf[n]=='.' || buf[n]==',')) return(0);
  switch (buf[n]){
   case '.':                        // nach erstem Komma od
   case ',': pktflg = 1;  break;    // Punkt, Flagge setzen
   case '-':
   case '+': if(n!=0) return(0);    // nicht das 1.Zeichen
                          break;
                                    // Untersuch. Ziffer
   default : if (buf[n]<'0' || buf[n]>'9')   return(0);
  }
  n++;
 }
 n=0;
 while (buf[n]!=0){                 // String ist i.o.
  if (buf[n]==',') buf[n]='.';      // mögl.Komma wandeln
  n++;
 }
 return(1);                         // String ist FP-Zahl
}


// main()
// zum Test der Funktion tstfpnum() den Wert von string 
// ändern
void main (void)
{
  char string[]= "-12,3789";
  if (tstFPnum(string)){
   printf ("\r\n String ok: %s"
           "\r\n Wert     : %f", string, atof(string));
  } else
   printf("\r\n Sring ungültig: %s", string);
}

 


 

 

 

 

 

Zur Funktion: Teste String auf Fliesskommazahl

Deklarationen

int tstFPnum(char* buf)


Übergabeparameter:
buf ist ein Zeiger auf einen nullterminierten String in der aufrufenden Funktion, der eine Fliesskommazahl enthalten kann.


Rückgabe:

Die Funktion gibt den Wert 0 zurück, wenn der String keine Fliesskommazahl enthält. Der String blieb unverändert.

Sie gibt 1 zurück, wenn der String eine gültige Fliesskommazahl ohne Exponentendarstellung enthält. d.h. Der String besitzt genau ein Vorzeichen +/- und ein dezimales Trennzeichen, das nun Punkt lautet. Das Trennzeichen darf das erste Zeichen der Zahl sein. Ansonsten besteht der String aus den Ziffern 0-9.

 

 

 

 

www..de