Kom-pa-TI-bilitet
C++ läsa från txt: problem
Om du bara har ett ord i filen kommer show returnera 1, vilket är out of bounds.
Skickades från m.sweclockers.com
Du borde också köra srand i en konstruktor av klassen Random eller ev en initmetod om du inte vill kalla den från main då man inte ska köra den mer än en gång, nu körs den varje gång du kallar show vilket kan ge oslumpmässiga resultat om du använder funktionen fler gånger.
tack grabbar!
inte så high på klasser så skippar konstruktor srand.
här har ni hela spelet(hängagubbe) om någon är intresserad.
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <cstdlib>
#include <ctime>
std::string zeword;
void play();
void addword();
int word();
int main ()
{
while(true)
{
int choice=0;
std::cout << "/////////////////////////////\n";
std::cout << "/ Input: 1 to add a word /\n";
std::cout << "/////////////////////////////\n";
std::cout << "/ Input: 2 to play \n";
std::cout << "/////////////////////////////\n";
std::cout << "/ Input: 3 to quit /\n";
std::cout << "/////////////////////////////\n\n";
std::cin >> choice;
if(choice==1)
{
addword();
}
if(choice==2)
{
word();
play();
}
if(choice==3)
{
return 0;
}
}
return 0;
}
void addword()
{
std::ofstream myfile ("example.txt", std::ios::app);
int counter = 0;
std::vector<std::string> numbersinwords(11);
numbersinwords[1]="First",numbersinwords[2]="Second",numbersinwords[3]="Third",
numbersinwords[4]="Fourth",numbersinwords[5]="Fifth",numbersinwords[6]="Sixth",
numbersinwords[7]="Seventh",numbersinwords[8]="Eighth",numbersinwords[9]="Ninth",
numbersinwords[10]="Tenth";
std::vector<std::string> words(11);
std::vector<int>::size_type i=0;
std::cout << "/////////////////////////////////////////////////////\n";
std::cout << "/ How many words would you like to add to the list? /\n";
std::cout << "/////////////////////////////////////////////////////\n";
std::cin >> counter;
if (myfile.is_open()&& counter>0)
{
for (i = 0; (int)i <= counter; i++)
{
std::cout << "Enter your "<<numbersinwords[i]<<" word: ";
getline (std::cin, words[i]);
myfile << words[i] << "\n";
}
myfile.close();
}
else
{
std::cout << "Unable to open file";
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
void play()
{
std::cout << "the word is: "<< zeword.length() << " characters long"<< std::endl;
std::cout << "how many guesses would u like to have?"<< std::endl;
int guess_amount=0;
std::cin >> guess_amount;
std::vector<char> guessed_char;
std::vector<char> vec_list;
for(int i=0; (int)zeword.length()>i; i++)
{
vec_list.push_back('_');
}
bool play=true;
char guess_char=0;
char last_guessed_char=guess_char;
int pos=0;
while (play==true && guess_amount !=0)
{
std::cout<<"you have "<<guess_amount<<" guesses left";
std::cout<<"\nenter your guess:";
std::cin>>guess_char;
std::cout<<"\n\n";
for(int i=0; (int)zeword.length()>i; i++)
{
if(zeword[i] == guess_char)
{
vec_list[i]=guess_char;
}
std::cout<<vec_list[i];
}
std::cout<<"\n\n\n\n\n\n\n\n";
if(zeword.find(guess_char) !=-1)
{
guess_amount--;
std::cout<<"\nU found the letter '"<<guess_char<<"' in the word! \n";
guessed_char.push_back(guess_char);
std::cout<<"the letters u have guessed on is: ";
for(int i=0; (int)guessed_char.size()>i; i++)
{
std::cout<<guessed_char[i]<<", ";
}
std::cout<<std::endl;
}
else
{
guess_amount--;
guessed_char.push_back(guess_char);
std::cout<<"the letters u have guessed on is: ";
for(int i=0; (int)guessed_char.size()>i; i++)
{
std::cout<<guessed_char[i]<<", ";
}
std::cout<<std::endl;
}
int counter =0;
for(int i=0; (int)zeword.length()>i; i++)
{
if(zeword[i]==vec_list[i])
{
counter++;
}
if(counter==zeword.length())
{
std::cout<<"u win! \n\n";
play=false;
}
else if(guess_amount == 0)
{
std::cout<<"u lose! \n\n";
play=false;
}
}
}
}
//////////////////////////////////////////////
//////////////////////////////////////////////
//////////////////////////////////////////////
class Random
{
public:
int show(int p)
{
srand( ( unsigned )time( 0 ) );
int random_integer;
random_integer = ( rand ( ) % p );
return random_integer;
}
};
int word()
{
std::ifstream read ("example.txt");
std::string line;
std::vector < std::string > stuff;
int counter = 0;
while (getline(read, line, '\n'))
{
if(line.size()!=0)
{
stuff.push_back( line );
counter++;
}
}
read.close();
Random a;
if(counter==1)
{
zeword=stuff[0];
}
else
{
zeword=stuff[a.show(counter)];
}
return 0;
}
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 6
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 36
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 46
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Igår Nvidias nästa arkitektur för Geforce kommer år 2025 58
- Igår Veckans fråga: Vilket operativsystem föredrar du? 81
- Igår Bilar med smarta inslag ger fler dumma fel 59
- 27 / 6 Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år" 88
- 26 / 6 Lastpass-användare rasar – kan inte logga in 59
- 26 / 6 Inet frågar SweClockers – Vad skulle du vilja förbättra på Inet.se? 53
- Fästingar.3
- Nytt chassi, Kolink Void RGB Midi Tower95
- Wordle på svenska - ordlig.se5942
- Vilken YH-Utbildning rekommenderar ni att tacka JA till?0
- Nyhetstips!59
- Fel post (dödsbo)11
- Bildvisnings program7
- Strul med win 11 (och StartAllBack?)8
- Bilar med smarta inslag ger fler dumma fel59
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare46
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Säljes Star Wars Jedi AMD kod
- Säljes Trasig Xiaomi Mi Electric Scooter (M365) Svart
- Säljes 5800x3D + x570 Meg Unify + be quiet! Dark Rock Slim
- Säljes AMD ASUS DUAL RX6700XT
- Säljes Dell OptiPlex 7010
- Säljes Datordelar: i5 9600k + 1070 GTX mm.
- Säljes 1080 TI | Vattenblock | 1TB SSD | Apple Watch 4 Stainless | Hörlurar | Mikrofon
- Säljes Intressekoll: Xbox Series S 512Gb samt Switch Oled 64Gb Vit
- Sony läcker uppgifter i rättegång – så stort är Call of Duty6
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"36
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare46
- Veckans fråga: Vilket operativsystem föredrar du?81
- Bilar med smarta inslag ger fler dumma fel59
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
- Microsoft vill strömma Windows från molnet72
- Starfield utvecklas med AMD:s välsignelse150
- Telekombranschen: "Smarta glasögon ersätter telefoner inom fem år"88
Externa nyheter
Spelnyheter från FZ
- Över tre miljoner exemplar av Final Fantasy XVI har skeppats och sålts idag
- Sony råkar avslöja spelbudgetar och annat på grund av dålig märkpenna idag
- Alan Wake och CoD: Kallt krig snart på PS Plus igår
- Red Dead Redemption åldersmärkt igen i Korea – det spekuleras i remaster igår
- Fallout London flyttas för att slippa Starfield-konkurrensen igår