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

Problem z plikami tekstowymi

Cloud VPS
+1 głos
520 wizyt
pytanie zadane 27 stycznia 2016 w C i C++ przez Kimi Bywalec (2,050 p.)

Witam, zaczynam swoją nauke C++. Postanowiłem napisać program który pokazuje nam ile działa nasz komputer. Program działa, jednak chciałem zrobić tak aby wynik był zapisywany do pliku tekstowego aby mieć tygodniowy pogląd. Jedyny problem jest taki że gdy napisałem cina który ma być informacją dla kodu który zapisuje dane do pliku program ciągle pokazuje 0 zamiast działac poprawnie, oto kod:

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <fstream>
using namespace std;
int minuty;
int ciin;
int main()

{



    for (int i=0; i<=36000; i++)
    {
        Sleep (60);
        system("cls");
        cout<<"Twoj komputer dziala"<<endl;
        cout<<i<<"Minut"<<endl;
        if(i>60)
        {
            cout<<"twoj komputer dziala"<<endl;
            cout<<i/60<<"godzin";
        }
        cin>>ciin;

    }

fstream t;
t.open("minuty.txt",ios::out|ios::app);
t<<ciin<<endl;
t.close();
    return 0;

}

 

2 odpowiedzi

+1 głos
odpowiedź 27 stycznia 2016 przez draghan VIP (106,230 p.)

Witaj.

program ciągle pokazuje 0

To znaczy...? Gdzie pokazuje Ci to zero? I do czego konkretnie potrzebna Ci zmienna ciin, bo nie mogę zrozumieć?

A tak poza tym, do funkcji Sleep() podajemy ilość milisekund, a nie minut ;)

komentarz 27 stycznia 2016 przez Kimi Bywalec (2,050 p.)

Wiem że miliseknund :) Jednak nie będe czekał minuty dla testu. 

Gdy odpalam program bez cin>>ciin; działa tak jak powinien czyli normalnie pokazuje czas jednak z nią stoi na 0. 

Może że >>ciin jest nie potrzebna, jednak wydaje mi się zę jest ona końieczna do zapisu do pliku tekstowego a dokładniej tutaj:

t<<ciin<<endl;

Jednak mogę się mylić bo jak mówiłem jestem świeżakiem

komentarz 27 stycznia 2016 przez draghan VIP (106,230 p.)

Stoi na zero, ponieważ zapisałeś cin>>ciin;, co oznacza, że program czeka aż wprowadzisz z klawiatury liczbę. ;)

Co chcesz mieć zapisane w tym pliku tekstowym?

komentarz 27 stycznia 2016 przez Kimi Bywalec (2,050 p.)
Wartość którą otrzyma program po wyłączeniu go czyli czas ile program był włączony.
komentarz 27 stycznia 2016 przez draghan VIP (106,230 p.)

To chcesz wpisać tam wartość i, a nie ciin. Wyjmij deklarację zmiennej i z pętli, żeby mieć do niej dostęp również poza pętlą i najzwyczajniej w świecie wpisz do pliku i.

    int i;
    for (i = 0; i<=36000; i++)
    {
        Sleep (60);
        system("cls");
        cout<<"Twoj komputer dziala"<<endl;
        cout<<i<<"Minut"<<endl;
        if(i>60)
        {
            cout<<"twoj komputer dziala"<<endl;
            cout<<i/60<<"godzin";
        }
        cin>>ciin;
 
    }
 
fstream t;
t.open("minuty.txt",ios::out|ios::app);
t<< i <<endl;
t.close();

 

komentarz 27 stycznia 2016 przez Kimi Bywalec (2,050 p.)
Ok. Wszystko działa! Dzięki wielkie, taki prosty i głupi błąd a jednak ;)
komentarz 27 stycznia 2016 przez draghan VIP (106,230 p.)
A, zapomniałem wyrzucić z kodu cin>>ciin - ale na pewno sam to zrobiłeś. ;)
komentarz 27 stycznia 2016 przez Kimi Bywalec (2,050 p.)

Widzę że jesteś bardziej doświadczony ode mnie. Zmodyfikowałem lekko kod. Zapisuje on końcowy wynik znaczy wtedy kiedy zakończe pętle jedyny problem to że zawsze zapisuje 0.

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <fstream>
#include <conio.h>
using namespace std;
int minuty;
int i;

int main()

{

    for (int i=1; i<=36000; i++)
    {

        Sleep (600);
        system("cls");
        cout<<"Twoj komputer dziala"<<endl;
        cout<<i<<"Minut"<<endl;
          if( kbhit() )
             if( getch() == 'q' ) break;
        if(i>60)
        {
            cout<<"Twoj komputer dziala"<<endl;
            cout<<i/60<<"godzin"<<endl;
        }
cout<<"Jesli chcesz zakonczyc program i rownoczesnie zapisac swoj wynik nacisnij Q";

    }

fstream t;
t.open("Program_Minutowy.txt",ios::out|ios::app);
t<<i;
t.close();
    return 0;

}

 

komentarz 27 stycznia 2016 przez draghan VIP (106,230 p.)

W swoim programie masz dwie zmienne "i" - jedna globalna, która domyślnie przyjmuje wartość 0 oraz druga, lokalna w pętli, którą inicjalizujesz zerem.

W pętli zmienna lokalna i przesłania zmienną globalną. Kiedy wychodzisz z pętli, zmienna lokalna jest niszczona. Tak więc globalną zmienną pozostawiasz nietkniętą podczas działania pętli, po czym - po zakończeniu pętli - zapisujesz ją do pliku.

Spójrz na mój kod wyżej, na konstrukcję pętli for - nie definiuję tam nowej zmiennej, tylko używam zdefiniowanej wcześniej. Specjalnie wyrzuciłem definicję przed pętlę.

Inna sprawa, to taka że po zakończeniu pętli, Twoje i będzie zawsze miało wartość 36000. I zawsze taką wartość wpiszesz do pliku.

Jeśli chcesz, żeby program wykonywał jakąś akcję (np. zapis do pliku) w momencie wyłączenia, masz do dyspozycji dwa sposoby.

Pierwszy, "w stylu C", za pomocą funkcji atexit(), przyjmującej wskaźnik na funkcję, którą zamierzasz wykonać.

Drugi - konstruując obiekt, który będzie żył aż do zakończenia programu, a niezbędne akcje wykona w destruktorze.

+1 głos
odpowiedź 27 stycznia 2016 przez Daaa22 Dyskutant (8,250 p.)

Zmotywowałeś mnie do zrobienia tego: http://speedy.sh/W3KPP/Wyswietlacz.exe

PS. Pomyśl, jak to zrobiłem i na pewno ci to pomoże przy robieniu własnego programu.

komentarz 27 stycznia 2016 przez draghan VIP (106,230 p.)

Całkiem w porządku. :) yes

Podobne pytania

0 głosów
1 odpowiedź 494 wizyt
–2 głosów
1 odpowiedź 382 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez julita998 Początkujący (250 p.)
0 głosów
2 odpowiedzi 248 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez trebuH Nowicjusz (170 p.)

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,904 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

Kursy INF.02 i INF.03
...