CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - ToDouble()

ToDouble()

dział ogólny

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 12:36

Nie, ale wywołanie 'delete info' również wywala program.

Haha, ja nie o tym. Pisałeś, że masz błąd spowodowany redeklaracją zmiennej info, więc wydedukowałem, że nie usunąłeś (wcześniejszej definicji) wskaźnika o tej samej nazwie. Dlatego proponuję, żebyś przed przerabianiem rozdziału o wskaźnikach, wpierw poczytać rozdział o zmiennych ;)

Uaktualniłem kompilator do najnowszej wersji i to samo.

No a dlaczego miałoby być inaczej? Błąd to błąd.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 12:41

polymorphism napisał(a):Haha, ja nie o tym. Pisałeś, że masz błąd spowodowany redeklaracją zmiennej info, więc wydedukowałem, że nie usunąłeś (wcześniejszej definicji) wskaźnika o tej samej nazwie. Dlatego proponuję, żebyś przed przerabianiem rozdziału o wskaźnikach, wpierw poczytać rozdział o zmiennych ;)

Dostaję komunikat, że nie można zadeklarować tm info, bo już jest deklaracja tm * info, co jest logiczne.
O ile widziałem to wskaźniki powinny wskazywać na zadeklarowane zmienne, a w moim kodzie tego nie ma, tak? Jak to poprawić? Tylko nie pisz "zadeklarować zmienną" :)

No a dlaczego miałoby być inaczej? Błąd to błąd.

No to dlaczego u Ciebie i w domu nie ma tego błędu? W sumie to mało ważne, ale się zastanawiam.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 12:52

Do cholery! Przecież w tym poście pokazałem jak to powinno wyglądać
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 13:05

Pokazałeś, ale napisałem Ci, że pewnie coś źle robię, bo mi to tak nie działa:
KOD cpp:     UKRYJ  
        time_t test;
        tm info;
        char dzien2[80];
        strftime(dzien2, 80, "%d.%m.%Y", &info);
        cout<<dzien2<<endl;

W wyniku tego zmienna dzien2 jest pustą linią.
Kompilując program na stronie, którą podałeś w wyniku mam: 32767.01.1900.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 13:16

No a wypełniłeś info danymi? Nie. Więc co miałoby się wyświetlić?

Jak chcesz zmienić timestamp na wartość tm, użyj funkcji localtime. Funkcja ta zwraca wskaźnik na statyczną wartość tm, więc zapis możesz skrócić do:
KOD cpp:     UKRYJ  
strftime(dzien2, 80, "%d.%m.%Y", localtime( &test) );

A jak koniecznie chcesz przypisać wartość do info, wtedy:
KOD cpp:     UKRYJ  
tm info = *localtime( &test );
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 13:30

Użyłem drugiej metody, ale dziwny wynik dostałem.
Kod jest taki:
KOD cpp:     UKRYJ  
        time_t test;
        tm info = *localtime ( &test );
        char dzien2[80];
        strftime(dzien2, 80, "%d.%m.%Y", &info);
        cout<<dzien2<<endl;
   
        time_t zmienna;
        tm informacja = *localtime ( &zmienna );
        char cos[80];
        strftime(cos, 80, "%d.%m.%Y", &informacja);
        cout<<cos<<endl;

A w wyniku dostaję... 16.03.2242 :roll:
Tylko jedną linię, później program się zawiesza.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 14:25

(...) ale dziwny wynik dostałem.

Tak, a jaki chciałbyś wynik uzyskać?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 14:31

No niech pomyślę.
Może 23.01.2015?
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 15:09

Ale dlaczego? Przecież w test czy zmienna nie ustawiłeś timestampu dla tej daty. Obie zmienne mają przypadkowe wartości.

p.s. znasz angielski?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 15:34

KOD cpp:     UKRYJ  
        time_t test;
        time( & test );
        tm info = *localtime ( &test );
        char dzien2[80];
        strftime(dzien2, 80, "%d.%m.%Y", &info);
        cout<<dzien2<<endl;
       
        time_t zmienna;
        time( & zmienna );
        tm informacja = *localtime ( &zmienna );
        char cos[80];
        strftime(cos, 80, "%d.%m.%Y", &informacja);
        cout<<cos<<endl;

Trochę znam, czemu pytasz?
Teraz tak, chciałbym mieć zapisaną w pliku datę w formie tekstowej, żeby wyciągnąć ją za pomocą sscanf'a, następnie przypisać do pól struktury tm, a później przekonwertować na timestamp przy pomocy mktime. Dobrze myślę?
Czy w ten sposób wykonanie difftime (obecny_czas, to_co_da_mktime ) powinno zrócić mi różnicę w czasie?
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 15:51

Trochę znam, czemu pytasz?

Odnoszę wrażenie, że nie czytasz dokumentacji zbyt dokładnie.

Dobrze myślę?

Tak. Choć w pliku lepiej mieć timestamp a nie datę w formie kalendarzowej, żeby sobie życia nie utrudniać.

Czy w ten sposób wykonanie difftime (...) powinno zrócić mi różnicę w czasie?

Tak.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » piątek, 23 stycznia 2015, 16:07

Tak. Choć w pliku lepiej mieć timestamp a nie datę w formie kalendarzowej, żeby sobie życia nie utrudniać.

Tak, ale do tego trzeba napisać sobie funkcję. Wydaje mi się, że dość trudno by było to zrobić, bo czasem miesiąc ma 30, a czasem 31 dni, nie wspominając o lutym, a lata przestępne i nie to już inna bajka. Nie wiem jak to ugryźć :/

Na razie kombinuję w ten sposób:
KOD cpp:     UKRYJ  
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <fstream>

using namespace std;

time_t czas;
struct tm * data;
char godzina[80];

int main()
{
time( & czas );
data = localtime( & czas );

strftime(godzina, 80, "%a %m %d %H:%M:%S %Y", data);
cout<<godzina<<endl;
unsigned day_w, mon, day, hour, min, sek, year;

if (sscanf(godzina, "%u %u %u %u:%u:%u %u", &day_w, &mon, &day, &hour, &min, &sek, &year) == 7)
        {
                tm tm_;
                tm_.tm_sec = sek;
                tm_.tm_min = min;
                tm_.tm_hour = hour;
                tm_.tm_mday = day;
                tm_.tm_mon = mon;
                tm_.tm_year = year;
                tm_.tm_wday = day_w;
                tm_.tm_yday = 0;
                tm_.tm_isdst = 0;

                time_t zmienna = mktime( &tm_ );
                cout<<ctime(&zmienna)<<endl;
        }

Tylko o ile godzina daje mi w wyniku taki ciąg: Fri 01 23 15:10:30 2015, to zmienna w ogóle się nie wyświetla :(
Chyba coś pomyliłem przy konwersji struktury, nie? Wydaje mi się, że wszystkie zmienne w strukturze powinny być poprzedzone &, ale to wywala błędy.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows VistaFirefox

Re: ToDouble()

Nowy postprzez polymorphism » piątek, 23 stycznia 2015, 19:20

Ten sscanf nie zadziała, bo pierwsza część daty to łańcuch znakowy (Fri), a Ty tam dałeś %u, co oznacza, że oczekujesz liczby całkowitej. Tak powinno być:
KOD cpp:     UKRYJ  
unsigned mon, day, hour, min, sek, year;
char day_w[4];

if (sscanf(godzina, "%3s %u %u %u:%u:%u %u", day_w, &mon, &day, &hour, &min, &sek, &year) == 7) { ... }

Myśle, że day_w nie musisz zamieniać na numer dnia tygodnia dla tm_.tm_wday, bo i tak on nie ma wpływu na timestamp.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez nvdante » sobota, 24 stycznia 2015, 12:10

polymorphism napisał(a):Myśle, że day_w nie musisz zamieniać na numer dnia tygodnia dla tm_.tm_wday, bo i tak on nie ma wpływu na timestamp.

Skoro to nie zmieni timestampa to wyciąłem to pole wstawiając do struktury 0.
Tylko, że wynik nadal się nie wyświetla :/
Wstawiłem cout do warunku, żeby sprawdzić czy zmienne się zapełnią i są w nich dane.
W związku z tym wydaje mi się, że problem tkwi dalej, być może w konwersji struktury.
Liberae sunt nostrae cogitationes
Avatar użytkownika
nvdante
Intelektryk
Intelektryk
 
Posty: 188
Dołączył(a): piątek, 12 czerwca 2009, 16:58
Lokalizacja: Dom
Podziękował : 8
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: VS 2015
Gadu Gadu: 0
    Windows 7Firefox

Re: ToDouble()

Nowy postprzez polymorphism » sobota, 24 stycznia 2015, 12:14

Skoro to nie zmieni timestampa to wyciąłem to pole

Skąd wyciąłeś?!
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2155
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 8.1
Windows 10
Linux Mint 19
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia stronaNastępna strona

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości

cron