/* Tiere raten in C++ 2004 Stefan Reiss, www.reisz.de */ #include #include #include using namespace std; struct knoten { string name; // name des tiers oder der frage int ja; // nachfolger bei 'ja' (sonst 0) int nein; // nachfolger bein 'nein' }; knoten a[100]; // array mit den knoten int nknoten; // anzahl der benutzten knoten void save() { ofstream ofs("tiere.txt"); for(int i = 0; i < nknoten; ++i) ofs << a[i].name << a[i].ja << a[i].nein << "\n"; } void load() { ifstream ifs("tiere.txt"); if(!ifs) return; for(nknoten = 0; nknoten<100; ++nknoten) { ifs >> a[nknoten].name; if(ifs.eof()) break; ifs >> a[nknoten].ja >> a[nknoten].nein; } } void main() { int k; string s; // k = aktueller knoten a[0].name = "elefant"; nknoten = 1; load(); for(;;) { cout << "Denk dir ein Tier\n"; for(k=0;;) { if(a[k].ja != 0) // knoten ist frage { cout << a[k].name << "?\n"; getline(cin,s); // text eingeben if (s[0] == 'x' || s.empty()) { save(); return; } if (s[0] == 'j') k = a[k].ja; else k = a[k].nein; } else // endknoten erreicht { cout <<"ich glaube, es ist ein "<< a[k].name <<". stimmts?\n"; getline(cin,s); // ja/nein eingeben if (s[0] == 'j') { cout << "alles klar!\n\n"; } else { a[nknoten].name = a[k].name; // alten tiernamen kop. cout << "Wie heisst dein Tier?\n"; getline(cin,a[nknoten+1].name); // neuen namen einlesen cout << "Stelle eine Frage, die "<< a[k].name << " von " << a[nknoten+1].name << "unterscheidet\n"; getline(cin,a[k].name); // frage eingeben a[k].ja = nknoten; a[k].nein = nknoten+1; nknoten += 2; } break; } } } }