• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Daily Programmer #2 [difficult] - Stoper problem z zapisem danych.

Object Storage Arubacloud
0 głosów
178 wizyt
pytanie zadane 30 sierpnia 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)

Witam wszystkich, zabrałem się w końcu za trudniejsze zadania i programowanie obiektowe. Piszę program z daily programmera, chciałem sam do tego dojść ale nie wymyśliłem rozwiązania. Wszystko super śmiga itd. tylko jeden kłopot. Zapisując przez fstream w pliku textowym czasy zapisuje się tylko jeden (chyba pierwszy) Chcę żeby zapisywały się wszystkie linijka po linijce (potem to zrobie do funkcji wyswietl() ) i chce żeby po zakończeniu na 4 case sie usuwało wszystko z notatnika czyli plik clear(); wystarczy co nie? (Jestem początkujący proszę o w miarę łatwe rozwiązanie :) ) Myśłałem nad ddynamicznym alokowaniem nowych czasów i stworzenie pod to klasy czas i kazdy nowy czas jako nowy objekt ale nie mam pojecia jak tworzyc przez program to bez hardcodowania jako czas c1, c2, c3... no wiecie.

main.cpp

#include <iostream>
#include <fstream>
#include "stoper.h"
#include <time.h>
#include <windows.h>

using namespace std;
char wybor;
int main()

{

    cout << "Stoper" << endl<< endl;
    cout << "-------------------" << endl;
    cout << "Menu glowne" << endl;
    cout << "-------------------" << endl;
    cout << "1.Start" << endl;
    cout << "2.Stop" << endl;
    cout << "3.Okrazenie" << endl;
    cout << "4.Zakoncz program" << endl << endl<<endl<<endl;
do
  {
cin >>wybor;

switch (wybor)
{

case '1':{
start();
break;}

case '2':{
stop();
zapis();
break;}

case '3':{
okrazenie();
zapis();
break;}

case '4':{
zakoncz();
return 0;}
}
}while (wybor !=4);
return 0;}

--------------------------

stoper.cpp

#include <iostream>
#include "stoper.h"
#include <time.h>
#include <windows.h>
#include <fstream>
using namespace std;
clock_t first, loop, last;
double czas;
fstream plik;
void start()
{
first = clock();
}
void stop()
{
last = clock();
czas= (double)(last-first) / CLOCKS_PER_SEC;
}
void okrazenie()
{
loop=clock();
czas= (double)(loop-first) / CLOCKS_PER_SEC;

}
void zapis()
{
    plik.open("Zapisy.txt", ios::out | ios::app);
    plik<<czas<<endl;
}
void wyswietlanie()
{
cout << ":) ";
}
void zakoncz()
{
plik.close() ;
plik.clear() ;
}


-----------------------------

stoper.h

#include <iostream>
#include <time.h>
#include <windows.h>
#include <fstream>
using namespace std;
void start();
void stop();
void okrazenie();
void zapis();
void wyswietlanie();
void zakoncz();



 

komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
Drugie pytanie jak dynamicznie wyswietlac czas tak jak w stoperze na ekranie?

1 odpowiedź

+1 głos
odpowiedź 30 sierpnia 2018 przez criss Mędrzec (172,590 p.)
wybrane 30 sierpnia 2018 przez XezolPL
 
Najlepsza

Na pewno nie zamykasz pliku po zapisie, co skutkuje próbą otwracia już otwartego pliku i ustawia flage błędu.

http://www.cplusplus.com/reference/fstream/fstream/open/


If the stream is already associated with a file (i.e., it is already open), calling this function fails.

If the function fails to open a file, the failbit state flag is set for the stream (which may throw ios_base::failure if that state flag was registered using member exceptions).

  i chce żeby po zakończeniu na 4 case sie usuwało wszystko z notatnika czyli plik clear(); wystarczy co nie? 

Pojęcia nie mam jaki związek ma notatnik z całą resztą, ale moge ci na pewno powiedzieć, ze źle myślisz. Druga sprawa: clear() nie czyści pliku tylko flagi błędów.

http://www.cplusplus.com/reference/ios/ios/clear/

Sets a new value for the stream's internal error state flags.

A nawet jeśli by to robił, to chyba nie w tej kolejności wołasz funkcje, hm? :P

 

plik.close() ;
plik.clear() ;

Pokazałem ci twoje błędy. Gotowego rozwiązania raczej nie dostaniesz, bo takie mamy zasady na tym forum, no trudno :P 

komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
Dziękuję za wskazówki, będę jeszcze szukał jak to wyświetlanie zrobić na różnych dokumentacjach.
komentarz 30 sierpnia 2018 przez criss Mędrzec (172,590 p.)
Jeśli masz jeszcze jakieś pytania, to postaram się odpowiedzieć, ale raczej nie odrazu bo ide AFK właśnie
komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
No to zamykanie dodałem w voidzie zapis(), zostało mi wsm tylko wyświetlanie dynamicznie płynącego czasu (nie mam pomysłu żadnego na to :C ) i wyczyszczenie zawartości notatnika z czasami na co też w referencji fstreama nie znalazlem sposobu.
komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)

@Criss, ogółem zrobiłem coś takiego

void wyswietlanie()
{

plik.open("Zapisy.txt", ios::in);
while (getline(plik, linia))
{
    switch (nr_linii)
    {
        case 1: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 2: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 3: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 4: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 5: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 6: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
        case 7: {czas=atoi(linia.c_str()); cout << czas <<endl;} break;
    }
    nr_linii++;
}

tylko konwertuje mi to czasy na liczby calkowite a jak chce double to co mam zmienić?

komentarz 30 sierpnia 2018 przez criss Mędrzec (172,590 p.)
Po co ten switch skoro wszystie case-y robią to samo? I po co w ogóle wrzucasz to w atoi? cout umie printować stringi.

PS: do konwersji stringa na double służy atof()
komentarz 30 sierpnia 2018 przez XezolPL Obywatel (1,530 p.)
Dziękuję :3 mam już w głowie zarys nawet jak zrobić wyświetlanie czasu na bierząco, bo z Sleep nie wypalilo.

Podobne pytania

0 głosów
1 odpowiedź 252 wizyt
pytanie zadane 25 lipca 2018 w C i C++ przez MatZyN Początkujący (350 p.)
0 głosów
0 odpowiedzi 145 wizyt
pytanie zadane 15 sierpnia 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)
–1 głos
0 odpowiedzi 94 wizyt
pytanie zadane 8 lutego 2017 w Ogłoszenia, zlecenia przez speedy Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...