C – Logdatei schreiben

#include <stdio.h>
#include <stdlib.h>

/* Textfile zum Schreiben und Anfügen öffnen */
FILE *f = fopen("c:\\logfile.log", "a+t");

if (f != NULL)
{
    float fValue = 0.1;

    /* eine Zeile in die Datei schreiben */
    /* siehe auch: http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/ */
    fprintf(f, "value:%f\n", fValue);

    /* Datei schließen */
    fclose(f);
}

Richtiger Vergleich von floating-point-Werten

#include <math.h> // für fabs()

float f1 = 0.11111111111;
float f2 = 0.1111111111;

// um Rundungsfehler zu umgehen sollte man mit einer
// Epsilon-Schranke (minimaler Abstand) arbeiten
// im Beispiel beträgt diese Schranke 1E-5
if (fabs(f1 - f2) < 1E-5)
{
    // f1 gleich f2
}

// verbesserte Version:
if (fabs(f1 - f2) < 1E-5 * f1)
{
    // f1 gleich f2
}

C – Datenwerte (float) aus einer Textdatei lesen und umwandeln

#include <stdio.h>
#include <stdlib.h>

/* Textfile zum Lesen öffnen */
FILE *f = fopen("myfile.txt", "rt");

if (f != NULL)
{
    /* Puffer mit 20 Zeichen */
    char buf[20];

    /* 25 Zeilen lesen */
    for (int d = 0; d < 25; d++)
    {
        /* eine Zeile mit max. 20 Zeichen aus dem File in den Puffer einlesen */
        if (fgets(buf, 20, f) != NULL)
        {
            /* Zeichenkette in float wandeln, Dezimalseparator muss '.' sein */
            float fVal = atof(buf);
        }
    }

    /* Datei schließen */
    fclose(f);
}

GUID erzeugen

// rpcrt4.lib für RpcStringFree() nicht vergessen
CString GetGUID()
{
   GUID guid;
   CoCreateGuid(&guid);

   BYTE *str;
   UuidToString((UUID*)&guid, &str);
 
   CString GUIDStr((LPTSTR)str);

   RpcStringFree(&str);

   return GUIDStr;
}
  • eine weitere Möglichkeit bietet folgendes ausführliches Beispiel auf CodeProject: Link

Zufallszahlen erzeugen

  • TRandom.h
#pragma once

class TRandom
{
public:
	TRandom(void);
	~TRandom(void);

	// reset random seed
	void Reset();
	// random number between 0..1
	double GetRandom();
	// dMin >= random number <= dMax
	double GetRandomDouble(double dMin, double dMax);
	// iMin >= random int number <= iMax
	int GetRandomInt(int iMin, int iMax);
	// random bool, true or false
	bool GetRandomBool();
};
  • TRandom.cpp
#include "TRandom.h"
#include <time.h>
#include <stdlib.h>

TRandom::TRandom(void)
{
	srand((unsigned)time(NULL));
}

TRandom::~TRandom(void)
{
}

// reset random seed
void TRandom::Reset()
{
	srand((unsigned)time(NULL));
}

// random number between 0..1
double TRandom::GetRandom()
{
	return (double)rand()/(double)RAND_MAX;
}

// dMin >= random double number <= dMax
double TRandom::GetRandomDouble(double dMin, double dMax)
{
	return dMin + this->GetRandom() * (dMax - dMin);
}

// iMin >= random int number <= iMax
int TRandom::GetRandomInt(int iMin, int iMax)
{
	return iMin + this->GetRandom() * (iMax - iMin);
}

// random bool, true or false
bool TRandom::GetRandomBool()
{
	return (this->GetRandom() < 0.5);
}