Användarprofil

Uppgifter
Användarnamn
Email
Besök -
Hemsida Ingen
Plats (stad)
Senaste besök 01:00 - 1:a Januari 1970
Poster i forumet
Varningar
Grupp
Medlem sedan 01:00 - 1:a Januari 1970
Artiklar och filer
Den här användaren har inga artiklar eller filer

Avatar


Presentation av

Den här användaren har inte skapat någon personlig presentation.

Senaste inläggen i forumet

-ppna en lista
Hej, har ett till "mindre" problem.
Jag ska öppna en fil och spara den till en länkad lista som är byggd av strukturen
  1. struct Person
  2. {
  3. string name;
  4. int tries;
  5. };


min idé var då:
  1. Person person;
  2. list<Person> lista;
  3. ifstream inFil;
  4. inFil.open("Highscore.txt");
  5. if(!inFil)
  6. {
  7. cout << "Highscorefile can't be opened";
  8. exit(1);
  9. }
  10. while(getline(inFil, person.name))
  11. lista.push_back(person);
  12. inFil.close();


Tyvärr så får jag ett stort negativt tal på slutet. Någon som har en idé på hur man åtgärdar detta?

Postad 23:42 - 8:e Juni 2009
Mastermind med länkade listor problem
Det är vid rad 20-25 som något går snett

Postad 16:35 - 8:e Juni 2009
Mastermind med länkade listor problem
Hej, Jag håller på att skriva ett mastermind program med länkade listor. Mastermind är ett spel där datorn slumpar fram en fyrsiffrig kod som du sedan ska gissa dig fram till. När du gissar returneras 2 saker:
Guld: Rätt siffra på rätt plats
Silver: Siffran finns men är på fel plats.

Sedan ska det också finnas en top 10 highscorelista som sparas och öppnas med programmet och det är detta jag har problem med.

Efter sortering av highscorelistan så ska det elfte elementet tas bort men det blir något fel med iteratorn. Programmet fungerar att köra men man får ett errormedelande när man kommer till den punkten.

Här kommer koden, lagt till lite kommentarer för att göra det mer lättförståeligt:
  1. #include <iostream>
  2. #include <string>
  3. #include <list>
  4. #include <fstream>
  5. #include <conio.h>
  6. #include <ctime>
  7. #include <string>
  8. using namespace std;
  9. struct Person
  10. {
  11. string name;
  12. string tries;
  13. };
  14. void play(list<Person>& lista);
  15. void highscore(list<Person> lista);
  16. int main()
  17. {
  18. Person person;
  19. list<Person> lista;
  20. ifstream inFil; //Hämtar highscore listan
  21. inFil.open("C:\\Documents and Settings\\Philip\\Skrivbord\\Läxor\\Highscore.txt");
  22. if(!inFil)
  23. {
  24. cout << "Highscorefile can't be opened";
  25. exit(1);
  26. }
  27. while(getline(inFil, person.name))
  28. lista.push_back(person);
  29. inFil.close();
  30. int menu;
  31. cout <<" ============================ 1. PLAY ============================ \n";
  32. cout <<" ========================== 2. Highscores ========================= \n ";
  33. cin >> menu;
  34. if(menu==1) //val mellan att spela och se highscore
  35. play(lista);
  36. if(menu==2)
  37. highscore(lista);
  38. cin.ignore();
  39. getchar();
  40. return(0);
  41. }
  42.  
  43.  
  44.  
  45. void play(list<Person>& lista)
  46. {
  47. Person person;
  48. int answer[4], guess[4], copyanswer[4], i, gold=0, silver=0, a=0, k=0, j=0;
  49. srand(time(NULL));
  50. for(i=0; i<4; i++)
  51. answer[i]=rand()%9+1; // väljer ut svaret
  52. while(gold!=4)
  53. {
  54. for(i=0; i<4; i++)
  55. cout << answer[i]; //Skall ej vara med i slutgiltigt programm
  56.  
  57. silver=0;
  58. k=0;
  59. gold=0;
  60. a=a+1;
  61.  
  62.  
  63.  
  64. cout << "========== Try " << a << "======== " << endl;
  65. cout << "Type in your guess, seperate each number with a space: ";
  66. cin >> guess[0] >> guess[1] >> guess[2] >> guess[3]; //spara gissning
  67.  
  68. for(i=0 ; i<4 ; i++)
  69. copyanswer[i] = answer[i];
  70.  
  71. // allt som blir 13 är för att ta bort dubletter, svaret förstörs
  72. for(i=0; i<4; i++)
  73. {
  74. if(copyanswer[i]==guess[i]) //check för guld
  75. {gold=gold+1;
  76. copyanswer[i] = 13;
  77. }
  78. }
  79.  
  80. for(i=0; i<4; i++) //check för de olika silver
  81. {
  82. for(j=0; j<4; j++)
  83. {
  84. if(copyanswer[i]==guess[j])
  85. {
  86. silver=silver+1;
  87. guess[j]= 13;
  88. copyanswer[i] =13;
  89. }
  90. }
  91. }
  92.  
  93. if(gold==4)
  94. {
  95. cout << "CONANANAGRATAS YOU WERE CORRECT!!!!!" << endl;
  96. cin.ignore();
  97. }
  98. else
  99. { cout << " Gold = " << gold << " and silver = " << silver << endl;
  100. cin.ignore();
  101. }
  102. }
  103. cout << "Maybe you have reached the highscore, please type in your name: "; // lägger till namn highscore
  104. getline(cin, person.name);
  105. person.tries=a;
  106. lista.push_back(person);
  107. list <Person>::iterator it=lista.begin()++; //börja med att sorter lista efter antal försök
  108. list <Person>::iterator it2=lista.begin();
  109. while(it!=lista.end())
  110. {
  111. it2=lista.begin();
  112. while(it2!=it && (*it2).tries < (*it).tries)
  113. {
  114. it2++;
  115. }
  116. lista.insert(it2,*it);
  117. lista.erase(it++);
  118.  
  119. } //sorterat klart
  120.  
  121. for(int a = 1; a < 11; a++)
  122. {
  123. it++;
  124. }
  125. lista.erase(it); //skall alltid finnas 10 highscores även om dom är fejk.
  126. ofstream utFil;
  127. utFil.open("C:\\Documents and Settings\\Philip\\Skrivbord\\Läxor\\Highscore.txt"); //sparar listan till fil
  128. if(!utFil)
  129. {
  130. cout << "Highscore file can't be opened";
  131. exit(1);
  132. }
  133. for(it = lista.begin(); it != lista.end(); it++)
  134. utFil << (*it).name << '\t' << (*it).tries << endl;
  135. utFil.close();
  136.  
  137.  
  138. }
  139. void highscore(list<Person> lista)
  140. {
  141. Person person;
  142. int a=1;
  143. cout << " ================ HIGHSCORE ============== ";
  144. cout << "\n Lista:\n";
  145. list<Person>::iterator it;
  146. for(it = lista.begin(); it !=lista.end(); it++)
  147. {
  148. cout << a << '\t' << (*it).name << '\t' << (*it).tries << endl;
  149. a=a+1;
  150. }
  151. cin.ignore();
  152. }


Tacksam för svar!

Postad 00:05 - 8:e Juni 2009

Skicka meddelande
Läs s blog