 |
www.elektronik.si Forum o elektrotehniki in raèunalni¹tvu
|
Poglej prej¹njo temo :: Poglej naslednjo temo |
Avtor |
Sporoèilo |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Tor Nov 22, 2011 10:47 pm Naslov sporoèila: c++ fstream |
|
|
Lep pozdrav!
Malo osve¾ujem znanje iz C++ in delam primer, kjer v neko datoteko zapi¹em trenutni èas in datum, ter ga nato iz datoteke preberem na izhod. V kolikor samo pi¹em v datoteko, se program izvede semantièno èisto pravilno. Èim pa ¾elim brati iz datoteke, pa mi program v datoteko doda kup enih in istih znakov, ki jih nato tudi prebere. Ne vem sicer zakaj in debuggiram ¾e lep èas, pa postavljam brake pointe, da bi videl kaj zanimivega, pa niè ne opazim. Morda bo kdo izmed vas to na prvi pogled opazil:
Koda: |
#include "stdafx.h"
#include <time.h>
#include <iostream>
#include <fstream>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
std::string scas;
std::fstream datoteka;
datoteka.open("cas.txt");
time_t cas;
time(&cas);
int n=strlen(ctime(&cas));
if(datoteka.is_open()){
scas=ctime(&cas);
datoteka<<scas;
while(!datoteka.eof()){
std::getline(datoteka,scas);
std::cout<<scas<<"\n";
}
datoteka.close();
}
else
std::perror("Napaka pri odpiranju datoteke");
return 0;
}
|
Èe while zanko zakomentiram in roèno odprem datoteko, se v njo vse pravilno zapi¹e. Èe pa je program tak kot je zdaj, pa je v datoteki tole:
Citiram: |
Tue Nov 22 21:43:33 2011
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ |
PS.: Prosim, èe moderator uredi moj post, ker ne znam narediti prelom vrstice. Hvala!
done _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
chaos Èlan


Pridru¾en-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Sre Nov 23, 2011 6:41 pm Naslov sporoèila: |
|
|
V tvoji kodi je na prvi uc nekaj napak.
Pri odpiranju datoteke moras povedati, v kaksnem mode-u jo bos uporabljal:
Koda: |
datoteka.open("cas.txt", std::ios::in | std::ios::out | std::ios::app);
|
Po tem, ko v datoteko pises, moras kazalec "previti" na zacetek, ce bi rad iz datoteke bral:
Koda: |
datoteka.seekg (0, std::ios::beg);
|
Ne vem kateri prevajalnik uporabljas, a gcc se ni ravno strinjal s tvojo kodo. Tukaj je cel popravljen program:
Koda: |
#include <time.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
int main(int argc, char* argv[])
{
std::string scas;
std::fstream datoteka;
datoteka.open("cas.txt", std::ios::in | std::ios::out | std::ios::app);
time_t cas;
time(&cas);
if(datoteka.is_open()){
scas=ctime(&cas);
datoteka<<scas;
datoteka.seekg (0, std::ios::beg);
while(!datoteka.eof()){
std::getline(datoteka,scas);
std::cout<<scas<<"\n";
}
datoteka.close();
} else {
std::perror("Napaka pri odpiranju datoteke");
}
return 0;
}
|
LP! |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Sre Nov 23, 2011 7:35 pm Naslov sporoèila: |
|
|
Super, hvala, deluje!
Ampak vseeno me pa zanima, kaj je razlog, da se med preverjanjem v while zanki, èe je datoteka prazna in branjem iz datoteke, datoteka spremeni? Zakaj so se dodali neki znaki, èe pa sem samo bral iz datoteke. Kako je to mogoèe? Uporabljam pa visual studio, èe to igra kak¹no vlogo.
Aja, glede zaèetnega izbora naèina odpiranja datoteke, ki si ga omenil. Na C++ reference sem prebral, da se te zastavice, ki si jih napisal po default tako nastavijo, èe jih ne napi¹emo. Zato jih nisem pisal. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
chaos Èlan


Pridru¾en-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Sre Nov 23, 2011 9:13 pm Naslov sporoèila: |
|
|
®al ne uporabljam Visual Studia, tako da ne morem komentirati, zakaj se ti je to dogajalo. Z gcc-jem se namreè ne.
Na linuxu z gcc-jem je default openmode za fstream ios::in | ios::out, mora¹ pa dodati ios::app, drugaèe ne bo hotel ustvariti nove datoteke - lahko bere¹ in pi¹e¹ samo obstojeèe. Poskusi brez teh zastavic, mogoèe pa dela tudi tako.
LP! |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Sre Nov 23, 2011 10:38 pm Naslov sporoèila: |
|
|
Aha. Nevem, paè zopet neko microsoftovo zluknjano orodje. Ima¹ prav, datoteko sem roèno ustvaril. Èe jo pobri¹em, se pojavi napaka, ki pravi, da datoteka ne obstaja. Torej samo zastavica app doloèa, da morebitno datoteko, ki ne obstaja, program sam ustvari? Dodam samo tole zastavico, drugi dve sta pa privzeti? _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
aly Èlan



Pridru¾en-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.69 Kraj: Kranj - stru¾evo
|
Objavljeno: Èet Nov 24, 2011 3:40 am Naslov sporoèila: |
|
|
Èe hoèe¹ biti siguren da ve¹ kaj se dogaja, eksplicitno postavi tiste zastavice, ki jih rabi¹. Ne se zana¹ati na "privzete" vrednosti, ki bodo nekje drugje pa drugaène. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Èet Nov 24, 2011 1:47 pm Naslov sporoèila: |
|
|
Zanimivo, prevajanje s gcc-jem pa da rezultat else stavek:
Citiram: |
Napaka pri odpiranju datoteke: No error |
. Debuggirat pa ne morem, ker ima ta prevajalnik (gdc) nekega hro¹èa, ki se noèe ustavljati na break-pointih. Uporabljam netbeans. Vem, da obstaja nek workaround, da se netbeans za¾ene z neko zastavico, ampak vseeno debugger ne deluje v popolnosti tako, kot bi moral. Morda je za skok v else stavek zopet napaka v mojem programu?
Koda: |
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
void wait ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
}
int main(int argc, char** argv) {
string scas;
fstream datoteka;
datoteka.open("C:\\cas.txt",ios::in|ios::out|ios::app);
time_t cas;
if(datoteka.is_open()){
for(int i=0;i<=5;i++){
time(&cas);
scas=ctime(&cas);
datoteka<<scas;
wait(1);
}
datoteka.seekg(0,ios::beg);
while(!datoteka.eof()){
getline(datoteka,scas);
cout<<scas<<endl;
}
datoteka.close();
}
else
perror("Napaka pri odpiranju datoteke");
return 0;
} |
_________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Èet Nov 24, 2011 7:58 pm Naslov sporoèila: |
|
|
chaos, ali uporablja¹ kaj eclipse. Namreè zanima me, kako ga nastavim, da mi ne bo vedno potrebno vseh .dll knji¾ic kopirat v mapo z .exe datoteko, da bom lahko program zagnal v eclupsu. Èe teh datoteh ni v mapi debug, mi napi¹e "terminated, exit value:-1073741515".
Nekaj èasa sem potreboval, da sem ugotovil, da morajo biti knji¾ice v isti mapi. Ima¹ kak¹no idejo? Uporabil pa sem MinGw. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
chaos Èlan


Pridru¾en-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Èet Nov 24, 2011 8:02 pm Naslov sporoèila: |
|
|
Verjetno bi pomagalo, ce das pot do knjiznic v PATH.
LP! |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Pet Nov 25, 2011 11:51 pm Naslov sporoèila: |
|
|
Vseh nekaj deset .dll knji¾ic? Gotovo mora obstjati druga re¹itev, glede na to, da pri drugi razvojnih okoljih tega ni potrebno poèeti. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Tor Dec 13, 2011 1:15 pm Naslov sporoèila: |
|
|
Ok, sem poskusil tole. Program lahko za¾enem izven Eclipse-a, ampak v Eclipse pa ne (run gumbek). Ista napaka, kot èe ne bi bilo knji¾ic. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
ljudsko Èlan


Pridru¾en-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.65 Kraj: Koro¹ka-Me¾ica
|
Objavljeno: Tor Dec 13, 2011 3:32 pm Naslov sporoèila: |
|
|
Pod run configurations sem moral dodati path spremenljivko in ji dodati ciljno mapo, kjer so vse te .dll knji¾ice. Sme¹no, ker bom moral to poèeti za vsak projekt posebej. Poleg tega sem moral ¹e v MinGW linker nastavitvah pod libraries dodati debug mapo od projekta in pa ime knji¾ic... Zamudno, ampak deluje. _________________ return;
brake; |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne more¹ dodajati novih tem v tem forumu Ne, ne more¹ odgovarjati na teme v tem forumu Ne, ne more¹ urejati svojih prispevkov v tem forumu Ne, ne more¹ brisati svojih prispevkov v tem forumu Ne ne more¹ glasovati v anketi v tem forumu Ne, ne more¹ pripeti datotek v tem forumu Ne, ne more¹ povleèi datotek v tem forumu
|
Uptime: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|