WinFuture-Forum.de: Visual Studio 2008 Problem - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Visual Studio 2008 Problem


#1 Mitglied ist offline   johnny 

  • Gruppe: aktive Mitglieder
  • Beiträge: 55
  • Beigetreten: 08. Juli 07
  • Reputation: 0

geschrieben 15. Mai 2009 - 22:54

Hallo,

habe folgendes Problem. An meiner UNI programmieren wir in c++ 6.0. und zwar c programme. Auf meinem laptop ist vista installiert mit dem neuen c++ 2008.

Das Problem an meinem Programm ist, das es bei Zufallszeit und bei Wartung null anzeigt. Den Quelltext kompiliert er ohne fehler.. Hat sich den irgendetwas mit ctime geändert bei 2008. Oder wo steckt der Fehler...

Aber es funktioniert ganz normal bei c++ 6.0 und sogar bei eclipse!

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

#define wartungsfrist 302400 //in sec
#define freizeit 226800 //in sec

int zufall(int, int);

int main() 
{
	time_t anfang, ende , wanfang, wende;
	struct tm *anfangstag, *endtag, *wanfangstag, *wendtag;
	int zahl,wartung;

	srand((time(NULL))*1000);

	anfangstag=(struct tm*)calloc(sizeof(struct tm),1); // Speicher für Anfangstag struckt besorgen

	endtag=(struct tm*)calloc(sizeof(struct tm),1); // Speicher für Endtag struckt besorgen

	wanfangstag=(struct tm*)calloc(sizeof(struct tm),1); // Speicher für wanfangstag struckt besorgen

	wendtag=(struct tm*)calloc(sizeof(struct tm),1); // Speicher für Endtag struckt besorgen

	if((anfangstag==NULL)||(endtag==NULL)||(wendtag==NULL)||(wanfangstag==NULL))
	{
		printf("FEHLER konnte nicht genug Speicher besorgen");
		return -1;
	}

	// ANFANGSTAG
	anfangstag->tm_year = 2009-1900; 
	anfangstag->tm_mon = 4;
	anfangstag->tm_mday = 18;
	anfangstag->tm_hour = 8;

	anfang = mktime(anfangstag);//Anfangs Zeitstempel

	printf("Anfangstag:%s\n",asctime(anfangstag));

	// ENDTAG
	endtag->tm_year = 2009-1900; 
	endtag->tm_mon = 4;
	endtag->tm_mday = 22;
	endtag->tm_hour = 16;
	endtag->tm_min = 59;
	endtag->tm_sec = 59;

	ende = mktime(endtag);//End Zeitstempel

	printf("Endtag:%s\n",asctime(endtag));

	// WOCHENENDE ANFANG
	wanfangstag->tm_year = 2009-1900; 
	wanfangstag->tm_mon = 4;
	wanfangstag->tm_mday = 22;
	wanfangstag->tm_hour = 17;

	wanfang = mktime(wanfangstag);//Wochenende Anfangs Zeitstempel
	
	printf("Wochenende Anfang:%s\n",asctime(wanfangstag));

	// WOCHENENDE ENDE
	wendtag->tm_year = 2009-1900; 
	wendtag->tm_mon = 4;
	wendtag->tm_mday = 25;
	wendtag->tm_hour = 8;

	wende = mktime(wendtag);//Wochenende Anfangs Zeitstempel

	printf("Wochenende Ende:%s\n",asctime(wendtag));//Wochenende Ende Zeitstempel

	
	zahl=zufall(anfang, ende);//Zufallszahl erstellen

	printf("Zufallszahl:%s\n",ctime(&zahl));//ausgabe zufallszahl

	wartung=zahl+wartungsfrist;// 3,5 Tage addieren

	printf("Wartung:%s\n",ctime(&wartung));


	if((wartung>=wanfang)&&(wartung<=wende))//Wenn wartung im wochende warnung
	{
		printf("\nWarnung Wartungstag faellt ins Wochenende\n\n");
	}


	return 0;
}


int zufall( int a, int e)
{
	double r = e - a + 1;
	return a + (int)(r * rand()/(RAND_MAX+1.0));
}

0

Anzeige



#2 Mitglied ist offline   aeris 

  • Gruppe: aktive Mitglieder
  • Beiträge: 129
  • Beigetreten: 06. September 08
  • Reputation: 12
  • Geschlecht:unbekannt

geschrieben 16. Mai 2009 - 12:02

Microsoft benutzt bei time_t ein Integer mit 64 Bit (__int64) welches nicht ANSI konform ist, siehe MSDN __int8, __int16, __int32, __int64.

Um ein 32 Bit time_t zu bekommen definiere _USE_32BIT_TIME_T, siehe MSDN time, _time32, _time64.

Mit der Definition lief dein Programm bei mir ohne >null< auszugeben.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0