Tags:
c++
Hej Alle!
Jeg har et problem i C, som jeg ikke kan løse selv lige pt. da jeg er lidt af en novice mht. C programmering.
Det hele går på at jeg er ved at lave et lille program der kan hente de data som står i ens system kalender, og trække dem fra en dato som man selv skal indtaste dette skal så give et output på den tid der er mellem de to datoer. Jeg ”mener” selv at man skal inkludere” time.h” header filen for at kunne gøre dette, og til sidst skal man trække de to værdier fra hinanden med ”double difftime()”. Ret mig endelig hvis jeg siger noget der ikke er korrekt i den ovenstående sætning.
Så hvis der er nogle som kan lave et fungerende kode eksempel vil jeg blive meget glad!
[Redigeret d. 11/03-04 22:38:29 af Martin Nielsen]
9 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
0
Ville goså gerne kunne dette, dog i C++
0
Ville goså gerne kunne dette, dog i C++
Jamen, det er da rart at høre man ikke er den eneste som kan drage nytte af en besvarelse på dette spørgsmål!
0
Jeg ved ikke hvordan du får fat i "data fra system kalender", men jeg lavede et lille program der udregner tiden i sekunder mellem nu og en tid som brugeren indtaster.
Det burde virke i både C og C++.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
struct tm Time;
time_t Now, Then;
char Buffer[123];
memset(&Time, 0, sizeof(Time));
printf("Indtast År: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_year = strtol(Buffer, 0, 10) - 1900;
printf("Indtast Måned: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_mon = strtol(Buffer, 0, 10) - 1;
printf("Indtast Dag: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_mday = strtol(Buffer, 0, 10);
printf("Indtast Time: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_hour = strtol(Buffer, 0, 10);
printf("Indtast Minutter: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_min = strtol(Buffer, 0, 10);
time(&Now);
Then = mktime(&Time);
printf("Forskellen er %f sekunder\\n", difftime(Now, Then));
return 0;
}
0
Meget flot, du vinder alle 150 point hvis du sørger for at output kommer i år/dage i stedet for sekunder.
Dette program skal nemlig kun bruges til at finde forskellen i tid mellem evt. 03-09-2001 og 03-11-2004.
Som sagt meget flot, du vinder hvis den ændring bliver foretaget!
[Redigeret d. 11/03-04 23:23:08 af Martin Nielsen]
0
Noget i stil med følgende burde kunne bruges, jeg har ikke taget højde for skudår, det kan jeg fixe senere hvis det er et problem.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
struct tm Time;
time_t Now, Then;
char Buffer[123];
int Years, Days, Hours, Mins;
double diff;
memset(&Time, 0, sizeof(Time));
printf("Indtast År: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_year = strtol(Buffer, 0, 10) - 1900;
printf("Indtast Måned: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_mon = strtol(Buffer, 0, 10) - 1;
printf("Indtast Dag: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_mday = strtol(Buffer, 0, 10);
printf("Indtast Time: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_hour = strtol(Buffer, 0, 10);
printf("Indtast Minutter: ");
fflush(stdout);
fgets(Buffer, sizeof(Buffer), stdin);
Time.tm_min = strtol(Buffer, 0, 10);
time(&Now);
Then = mktime(&Time);
diff = difftime(Now, Then);
printf("Forskellen er %f sekunder\\n", diff);
diff /= 60;
Mins = ((int )diff)%60;
diff /= 60;
Hours = ((int )diff)%24;
diff /= 24;
Days = ((int )diff)%365; /* ToDo leapyear */
diff /= 365;
Years = diff;
printf("Forskel: %d Years %d Days %d Hours %d Mins\\n", Years, Days, Hours, Mins);
return 0;
}
0
Der er meget fornemt, og du behøver ikke at medtage skudår.
Men jeg får dog en lille advarsel ved kompilering, kan du evt. rette op på den: conversion from 'double' to 'int', possible loss of data.
Hvad er din baggrund for øvrigt mht. programmering, du virker meget hardcore set ud fra hvor jeg står?
0
En simpel cast burde fjerne den warning:
Years = (int )diff;
Jeg har levet af at programere i C og C++ i mere end 10 år, så...
0
Hvis nogle skulle bruge det er der en variabel der hedder __TIME__, den indeholder tiden. Der er også en der hedder __DATE__.
0
__TIME__ og __DATE__ er ikke variabler, de er (preprocessor) konstanter.
De angiver tiden for kompilering af den fil de er blevet brugt i, i form af en streng.