25. oktober 2002 - 22:52Der er
42 kommentarer og 1 løsning
Stream spørgsmål
Jeg har lavet flg. kode. Men der er noget helt galt og jeg kan ikke finde ud af hvorffor den ikke virker.
Det er menningen den skal læse teksten der forkommer mellem de 2 første kommaer i første sætning i filen
Det skal lige nævnes jeg bruger DEV C++ compileren - Det er sgu nok derfor *G* Den siger der er parametre som ikke er i orden og lidt andet. Men jeg kan ikke gennemskue det
ifstream fin("data\test.txt"); // file - location of stream file string data[2]; if (fin) { int c = 0;
char ch; /* declares char variable */ while (fin.good()) { fin.get(ch); // Read one character
if (ch != ',') // If it is _not_ a comma data[c] += ch; // Append character else { // Character is a comma if (c<2) c++; // If this is the first comma, move to second "data holder" else break; // Second comma found, we be done - yo. } } } else cout << "Couldn't open file, foo!\n"; } return 0; }
Nu har jeg ikke lige testet dit program igennem, om det virkelig gør som planlagt, men et par ting som du ihvert SKAL rette for at få det til at kompilere er:
1) Slet den } der står på linjen lige over return 0; 2) #include <fstream> 3) #include <string>
Ud over det kan jeg foreslå følgende ændringer:
4) #include <iostream> istedet for <iostream.h> (Altså fjern .h i navnet) 5) Du har ikke noget at bruge #include <stdio.h> og #include <stdlib.h> til
Øhh... Jo, absolut... Hvilken version af Dev-C++ bruger du?
Jeg har selv oplevet nogle små problemer med version 4, så jeg bruger nu selv version 5. Selvom den stadig er i Beta har jeg ikke oplevet nogle problemer endnu
Jeg har selv lige downloadet den samme version... Godt nok via Bloodshed's site, da den der upgraderings fætter ikke virkede ordentligt.
Det virker stadig som det skal.
Det mest sørgelige er at den ikke giver kompilerfejl pga den sidste cout, i det stykke kode jeg har lagt til dig. Jeg har nemlig lige opdaget at jeg har glemt at ændre den sidste fra: cout til std::cout
Med prøv lige at ret det... Kan jo være noget galt med min installation, og det er derfor din kompiler brokker sig
Building Makefile: "C:\Dev-Cpp\Makefile.win" Eksekverer make... make.exe -f "C:\Dev-Cpp\Makefile.win" all gcc.exe -c MAIN.C -o MAIN.o -I"C:/Dev-Cpp/include" -g3
In file included from C:/Dev-Cpp/include/fstream.h:10, from C:/Dev-Cpp/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/fstream:6, from MAIN.C:1: C:/Dev-Cpp/include/iostream.h:243: type specifier omitted for parameter In file included from C:/Dev-Cpp/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/fstream:6, from MAIN.C:1: C:/Dev-Cpp/include/fstream.h:44: type specifier omitted for parameter
In file included from C:/Dev-Cpp/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/string:6, from MAIN.C:3: C:/Dev-Cpp/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastring.h:65: parse error before `>' C:/Dev-Cpp/Bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastring.h:71: confused by earlier errors, bailing out
Nu er jeg godt nok ved at være løbet tør for idéer, så som de sidste desperate forsøg:
- Prøv at sende alt hvad du har til mig her: mbulow@mail.tele.dk - Prøv engang at slette din Dev-C++, og download og installer den nyeste fra Bloodshed (Altså ingen opgradering. Kan jo være opgraderingen der er gået rod i)
Men hvis din .cpp-fil er 100% magen til det jeg postede tidligere (med cout ændret til std::cout) behøver du ikke maile det igen, for jeg prøvede bare med min egen fil, i dit projekt, og det virkede fint
Nu ved jeg selvfølgelig ikke hvor langt du er nået, men hvis ikke du har fået uninstallet den gamle Dev-C++ endnu, kan du eventuelt prøve at lave en: Kompiler->Rengør projekt
Jeg sad selv lige og pillede lidt ved nogle ting og sager, så der til sidst kom en seriøs bunke fejl, hver gang jeg prøvede at kompilere. Det eneste der virkede var en gang hovedrengøring :)
Det var sgu da bare lækkert at Dev-C++ virker nu... Så er det bare om at få kål på den fejl du snakker om at der er i dit projekt :)
Hvad er det for en fejl du får?
Hvis det er sådan en "Couldn't open file, foo!"-fætter kan du jo prøve at indtaste den absolutte sti til filen, i stedet for den relative... Altså noget i retning af "C:\\Temporary\\test.txt"
Yikes... Vent lige lidt... Det er da på grund af din:
if(c < 2) c++;
Hvad sker der når den finder komma nummer to i filen (dvs. c == 1)... Så sætter den c til 2, og prøver at accesse data[2], og siden data er defineret som:
Det der sker er at programmet indlæser et tegn af gangen, i data[0], indtil det finder et ',' Derefter sætter den c til 1, og indlæser til data[1], indtil det næste komma, og så skal programmet bare afsluttes, uden at tænke nærmere over det komma :)
Husk at arrays altid starter med index 0. Dvs. hvis du opretter et array med n elementer kan du indexere fra 0 til n-1
Jeg har lige skrevet lidt om... Sådan som jeg har lavet det nu, finder det frem til komma nummer 'firstComma', og indlæser indtil det finder det næste.
Sikkert ikke den mest optimale løsning i betragtning af hvad tid det er på døgnet, men det gør ihvert fald som planlagt :)
Her har du en langt bedre version. Den her version indlæser automatisk til den finder et ',' (se getline-funktionen). Dvs, det er ikke nødvendigt selv at indlæse hvert enkelt tegn og se om det er et komma :)
øv for jeg har lavet en A/D converter som jeg ikke er sikker på virker ordentligt og ville gerne læse de data den smider ( hvis den smider noget *G* )
anyway mange tak for hjælpen i går, jeg sov rigtigt godt efter den nød var knækket :O) .
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.