problem with input fiel

hey guys im doing program hangman...so i create ta new txt file called word.txt and now i have problem to input in visaul studio c++ code...i inputit it bun cansole application show me no words....i pasted all code but i have a problem with function LoadRandomWord can anyone pleae help me???...BTW code is not finish yet...and i know how to finnish...just dont know why in console application show me not single word....



[a]
https://www.file.si/public/view/4364
[/a]

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
 #include <iostream>   
#include <stdlib.h> 
#include <string> 
#include<vector>
#include<ctime>
#include<fstream>
#include<time.h>
using namespace std;

void printMessage(string msg, bool printTop=true, bool printBotom=true)
{



	if (printTop)
	{
		cout << "+----------------------------------------------+" << endl;
		cout << "|";

	}
	else
	{
		cout << "|";
	}

	bool front = true;

	for (int i = msg.length(); i < 46; i++)
	{
		if (front)
		{
			msg = " " + msg;
		}
		else
		{
			msg = msg + " ";
		}
		front = !front;
	}
	cout << msg.c_str();

	if (printBotom)
	{

		cout << "|" << endl;
		cout << "+----------------------------------------------+" << endl;

	}
	else
		cout << "|" << endl;
}

void DrawHangMan(int guescount = 0)
{
	if (guescount >= 1)
	
		printMessage("|", false, false);
	
	else
		printMessage("", false, false);


	if (guescount >= 2)

		printMessage("|", false, false);

	else
		printMessage("", false, false);


	if (guescount >= 3)

		printMessage("O", false, false);

	else
		printMessage("", false, false);



	if (guescount == 4 )

		printMessage("/  ", false, false);

	

	if (guescount == 5)

		printMessage("/| ", false, false);

	


	if (guescount >=6)

		printMessage("/|\\", false, false);

	else
		printMessage("", false, false);


	if (guescount >= 7)

		printMessage("|", false, false);

	else
		printMessage("", false, false);


	if (guescount == 8)

		printMessage("/", false, false);

	

	if (guescount>= 9)

		printMessage("/ \\", false, false);

	else
		printMessage("", false, false);
}

void PrintLetters(string inputt, char from, char to)
{
	string s;
	for (char i = from; i <= to; i++)
	{
		if (inputt.find(i) == string::npos)
		{
			s += i;
			s += " ";
		}
			
		else
			s += "  ";
		
	}
	printMessage(s, false, false);
}

void PrintAvailibleLetters(string taken)
{
	printMessage("availible letters");
	PrintLetters(taken, 'A', 'M');
	PrintLetters(taken, 'N', 'Z');


}

bool printWordAndChechWin(string word, string guessed)
{
	bool won = true;
	string s;
	for (int i = 0; i < word.length(); i++)
	{
		if (guessed.find(word[i]) == string::npos)
		{
			won = false;
			s += "_ ";
		}
		else
		{
			s += word[i];
			s += " ";
		}

		
	}
	printMessage(s, false);
	return won;
}

string LoadRandomWord(string path)
{
	int lineCount = 0;
	string word;
	vector<string> v;
	ifstream reader(path);
	if (reader.is_open())
	{
		while (std::getline(reader, word))
			v.push_back(word);

		int randomLine = rand() % v.size();

		word = v.at(randomLine);
		
		reader.close();
	}
	return word;
}




int main() {
	srand(time(0));
	string gueses = "ABHKIJKLL";
	string wordToGuess;
	wordToGuess=LoadRandomWord("words.txt");
	cout << wordToGuess << endl << endl;
	printMessage("HANGMAN IS COOL",true,true);
	DrawHangMan(9);
	PrintAvailibleLetters(gueses);
	printMessage("Guess the word");
	printWordAndChechWin("ALEXES", gueses);



	system("pause");// 
	return 0;
}
¿does the file open? ¿where's located? ¿how do you run the program?
Hello kretze,

I ran the program in my version of VS and it worked fine. The reading and loading of the vector worked as expected.

Add this code before the return statement to see what is in the vector.
1
2
for(auto& word : v)
	std::cout << "\n " << word << std::endl;

If you put a break point on line 201 you can check what was returned by the function.

As your code is you receive the a word from the function and store it in a variable in main, but never use it.

Hope that helps,

Andy
hello Handy Andy you mean like that??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string LoadRandomWord(string path)
{
	int lineCount = 0;
	string word;
	vector<string> v;
	ifstream reader(path);
	if (reader.is_open())
	{
		while (std::getline(reader, word))
			v.push_back(word);

		int randomLine = rand() % v.size();

		word = v.at(randomLine);

		
		reader.close();
		for (auto & word : v)
			cout << "\n" << word << endl;
		
	}
	return word;
}


still doesent work:
https://www.file.si/public/viewset/4263
Hello kretze,

The for loop just prints out what is in the vector. If nothing pints out then it is likely that the vector is empty.

Try commenting out your function and give this on a try:
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
string LoadRandomWord(string path)
{
	int lineCount = 0;
	string word, inFileName = path;
	vector<string> v;

	ifstream reader(path);

	if (!reader)
	{
		std::cout << "\n File " << inFileName << " did not open" << std::endl;
		std::this_thread::sleep_for(std::chrono::seconds(4));  // <--- Needs header files chrono" and "thread".
		exit(1);
	}

	while (std::getline(reader, word))
		v.push_back(word);

	int randomLine = rand() % v.size();

	word = v.at(randomLine);

	reader.close();

	for(auto& word:v)
		std::cout << "\n " << word << std::endl;

	return word;
}

The problem I see with your function is that the if statement checks to see if the file is open, but there is no else statement is the file did not open it just returns an empty string if the vector is empty.

My format will tell you if the file did not open and then "exit" the program. The 1 denotes that there is a problem.

It sounds like the file stream is not opening, but you have no way of seeing that it did not open. If the file did not open then it could be the file needs a path to where it is stored or the "words.txt" file needs to be in the same directory as the file of your ".cpp" code.

Hope that helps,

Andy

P.S. it works for me, so I am only guessing at what your problem could be.
hello handy andy thanks for all you commnets an hard work but stiil for some reason doesent work...when i run the function and program thaht you gave me my format tell me the same that tells you...that txt file could not be open....i have stored my txt file in directory ys the cpp file is

console application fail:
https://www.file.si/public/view/4402



txt file storred:
https://www.file.si/public/view/4403
> i have stored my txt file in directory ys the cpp file is
¿who told you to put it there? https://en.wikipedia.org/wiki/Path_(computing)#Absolute_and_relative_paths
you need it to be in the working directory, the one from which you call the executable
yeah but i moove that file araound documents C and D diska but still doesen working
hey i started new project hangman where originaly has to be documents/vs2015/projects...and create new text file besede.txt(im from slovenia)besede=words....and still dosent work....does maybe anyone know what to do?? maybe i nedd new visaul studio??? thanks for answers

https://www.file.si/public/viewset/4269
I have a suspicion that the problem is that your file is named words.txt.txt instead of just words.txt.

Have you tried writing the file in program? Doing so will write the file in current working directory and will not help you by adding a file extension for you.

1
2
3
4
5
6
7
8
9
10
11
std::ofstream fout("my_words.txt");

if(fout)
{
   fout << "Car\n" << "Dog\n" << "House\n";
}
else
{
   std::cerr << "Output file failed to open.\n";
   // stop the program.
}



jlb thank you very very much like you said name was words.txt.txt...now works fine..and thanks handy andy and me55 for al your comemnts and help
Topic archived. No new replies allowed.