Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

31

25.08.2007, 15:17

Jah, Asche auf mein Haupt! Die Funktion heißt getline (im Namespace std).
@D13_Dreinig

Too_noobish

Treue Seele

  • »Too_noobish« ist der Autor dieses Themas

Beiträge: 165

Wohnort: Wels - Aut

  • Private Nachricht senden

32

25.08.2007, 15:23

wenn ich jetzt eine datei mache in der beide worte stehen mit einem "," oder einem blank geteilt.

Quellcode

1
2
3
uhr watch
oder
uhr,watch


also ich lese die datei so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <cstdlib>
#include <iostream>
#include <fstream> 
#include <string> 
#include <vector>


using namespace std;

int main(int argc, char *argv[])
{
             
             ifstream file;
            int zeile = 0;
            string fileName = "test.txt";
           
            cout << "Welche Zeile soll ausgegeben werden? ";
            cin >> zeile;
            file.open(fileName.c_str());
            if(file)
            {
                        string text; // Haupttext

                        int zeilen = 0;
                        while(!file.eof())
                        {
                                    string txt; // Buffer

                                    getline(file, txt);
                                    text = txt + "\n";
                                    zeilen++;
                                    if(zeile == zeilen) // gesuchte Zeile erreicht

                                    {
                                                cout << text;
                                                
                                                break; // Zeile gefunden, Einlesen abbrechen

                                    }
                        }
                        file.close();
            }
            else
            {
                        cout << "Fehler!";
            }
            std::cin.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ); 
            cin.get();
            
                      
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
und speichere dann die ausgelesene zeile in einem string. nur wie teile ich jetzt den string genau an diesem zeichen?



nein ich weiß die antwort nicht...

eigentlich müsste man den string ja, mit einer "for"-schleife solange überprüfen, bis ein , auftaucht. nur wie sag ich der schleife, dass ich nicht den ganzen string überprüfen will, sondern nur jeden einzelnen buchstaben.
www.mymuesli.com !!

33

25.08.2007, 15:59

Pass auf. Jetzt mach das doch einfach nochmal von vorne :)

C-/C++-Quelltext

1
2
std::vector answers;
std::copy(std::istream_iterator<std::string>(file_stream), std::istream_iterator<std::string>(), answers.begin());
zum einlesen der Antworten ... getrennt durch " "(Leerzeichen) ... Die Fragen ließt du zeilenweise ein...

C-/C++-Quelltext

1
2
3
std::string temp_line;
std::vector<std::string> questions;
for (std::getline(file_stream, temp_line)) questions.push_back(temp_line);
... so und jetzt kannst du einfach die entsprechende Frage ausgeben ...

C-/C++-Quelltext

1
2
3
4
5
std::size_t pos = std::rand() % questions.size();
std::cout << questions.at(pos) << std::endl;
std::string answer;
std::cin >> answer;
std::cout << "Die Antwort ist " << (answers.at(pos) == answer ? "richtig!" : "falsch!") << std::endl;
...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

34

25.08.2007, 16:14

=>

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
#include <iostream>
#include <fstream>

int main()
{
    std::ifstream file_stream("question.qst");
    std::vector<std::string> questions;
    std::string temp_line;
    while (std::getline(file_stream, temp_line)) questions.push_back(temp_line);
    file_stream.close();
    file_stream.clear();

    file_stream.open("answer.qst");
    std::vector<std::string> answers;
    std::copy(std::istream_iterator<std::string>(file_stream), std::istream_iterator<std::string>(), answers.begin());
    file_stream.close();

    std::srand(static_cast<unsigned int>(std::time(0)));
    
    bool close = false;
    while (close == false)
    {
        std::cout   << "(0) Neue Frage\n" 
                    << "(1) Beenden" << std::endl;
        while (!(std::cin >> close)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
        if (close == false)
        {
            std::size_t pos = std::rand() % std::min(questions.size(), answers.size());
            std::cout << questions.at(pos) << std::endl;
            std::string answer;
            std::cin >> answer;
            std::cout << "Die Antwort ist " << (answers.at(pos) == answer ? "richtig!" : "falsch!") << std::endl;
        }
    }
}
:D

Edit
Sorry ... ich hab den Code nicht kompiliert ... (mach ich nie ^^) ... muss ne while-Schleife anstelle einer for-Schleife sein und muss std::vector<std::string> answers anstelle von std::vector answers heißen ... sorry ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Too_noobish

Treue Seele

  • »Too_noobish« ist der Autor dieses Themas

Beiträge: 165

Wohnort: Wels - Aut

  • Private Nachricht senden

35

25.08.2007, 16:45

danke, das du ihr euch so viel mühe macht, jedoch kommen bei mir folgende fehler beim kompilieren:

main.cpp:13: error: expected `;' before ')' token

main.cpp:13: error: could not convert `(&questions)->std::vector<_Tp, _Alloc>::push_back [with _Tp = std::string, _Alloc = std::allocator<std::string>](((const std::string&)((const std::string*)(&temp_line))))' to `bool'
main.cpp:14: error: expected `)' before ';' token

main.cpp:18: error: missing template arguments before "answers"
main.cpp:18: error: expected `;' before "answers"

main.cpp:19: error: `answers' undeclared (first use this function)
main.cpp:19: error: (Each undeclared identifier is reported only once for each function it appears in.)

obwohl ich deinen quelltext 1:1 übernommen hab.
tut mir leid falls ich wieder irgendwas total einfaches übersehen hab.
www.mymuesli.com !!

36

25.08.2007, 16:59

Ja so sollte das jetzt aber gehen ^^ Hab es oben mal verbessert was falsch war --- vllt compilier ich es nachher mal ... mal sehen ^^
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

37

25.08.2007, 17:02

Ohoh (D)evil:

C-/C++-Quelltext

1
std::copy(std::istream_iterator<std::string>(file_stream), std::istream_iterator<std::string>(), answers.begin());


Zu:

C-/C++-Quelltext

1
std::copy(std::istream_iterator<std::string>(file_stream), std::istream_iterator<std::string>(),  std::back_inserter( answers) );
@D13_Dreinig

Too_noobish

Treue Seele

  • »Too_noobish« ist der Autor dieses Themas

Beiträge: 165

Wohnort: Wels - Aut

  • Private Nachricht senden

38

25.08.2007, 17:03

juhu es geht!! ABER

jetzt stürzt das program ab...

folgender fehler steht im microsoft problembericht:
AppName: projekt1.exe AppVer: 0.0.0.0 ModName: projekt1.exe
ModVer: 0.0.0.0 Offset: 0002d6e0


langsam geht mich diese simple idee ganz schön an. :)
www.mymuesli.com !!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

39

25.08.2007, 17:06

Siehe mein letzter Post. :roll:
@D13_Dreinig

Too_noobish

Treue Seele

  • »Too_noobish« ist der Autor dieses Themas

Beiträge: 165

Wohnort: Wels - Aut

  • Private Nachricht senden

40

25.08.2007, 17:10

ja, ich bin ein bisschen langsam beim posten... :)

aber es geht, ohne absturz und der compiler meckert auch nicht.


8)
www.mymuesli.com !!

Werbeanzeige