搜索基于链接的列表C
Searching linked based list C++
,所以我的项目是要有一个随机数猜测游戏(1-100),并将用户的猜测值存储到链接的列表中。我的困难部分是检查用户的当前输入,并使用已经存储在链接列表中的先前输入。我无法弄清楚为什么它一直告诉我我已经猜到了前一个数字。
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;
struct Guess
{
int numberGuess;
Guess* next;
};
int main ()
{
srand(time(0));
Guess* start = 0;
//Defining variables
int randomNumber;
randomNumber = (rand() % 100) + 1;
int userGuess;
int i = 0;
Guess* userValue = new Guess;
cout << "I'm thinking of a number between 1 and 100. Guess what it is: " << endl;
cin >> userGuess;
cin.ignore(1000,10);
userValue->numberGuess = userGuess;
userValue->next = start;
start = userValue;
while(true)
{
if (userGuess > randomNumber)
{
cout << "That's too high, guess again: ";
cin >> userGuess;
cin.ignore(1000,10);
//Pass user's guess to linked based list
Guess* userValue = new Guess;
userValue->numberGuess = userGuess;
userValue->next = start;
start = userValue;
}
else if(userGuess < randomNumber)
{
cout << "That's too low, guess again: ";
cin >> userGuess;
cin.ignore(1000,10);
//Pass user's guess to linked based list
Guess* userValue = new Guess;
userValue->numberGuess = userGuess;
userValue->next = start;
start = userValue;
}
if (userGuess == randomNumber)
{
cout << "Correct!" << endl;
break;
}
//Check to see if it has been guessed
bool checkDuplicate = false;
Guess* p;
for (p = start; p; p = p->next)
{
if (p->numberGuess == userGuess)
{
checkDuplicate = true;
break;
}
}
if (checkDuplicate == true)
{
cout << "You already guessed that value! -- Guess again: ";
cin >> userGuess;
cin.ignore(1000,10);
}
}
}
有什么想法?
用户输入他们的猜测时,您将其添加到列表中,然后尝试找到它。因为您已经添加了最后一个猜测,每次都可以在列表中找到。因此,您需要将添加节点代码添加到循环的末端,例如此处
if (checkDuplicate == true) {
cout << "You already guessed that value! -- Guess again: ";
cin >> userGuess;
cin.ignore(1000,10);
} else {
Guess* userValue = new Guess;
userValue->numberGuess = userGuess;
userValue->next = start;
start = userValue;
}
还为add_node
或exist
等列表操作创建功能,代码将简单明了。看看示例
#include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;
struct Guess {
int numberGuess;
Guess* next;
};
bool exist(Guess* start, int number) {
for (Guess* p = start; p != NULL; p = p->next) {
if (p->numberGuess == number) {
return true;
}
}
return false;
}
void print(Guess* start) {
for (Guess* p = start; p != NULL; p = p->next) {
cout << p->numberGuess << " ";
}
cout << endl;
}
void add(Guess** start, int number) {
Guess* userValue = new Guess;
userValue->numberGuess = number;
userValue->next = *start;
*start = userValue;
}
int main () {
srand(time(0));
Guess* start = 0;
//Defining variables
int randomNumber;
randomNumber = (rand() % 100) + 1;
int userGuess;
cout << "I'm thinking of a number between 1 and 100. Guess what it is: " << endl;
while(true)
{
cin >> userGuess;
cin.ignore(1000, 'n');
if (userGuess > randomNumber) {
cout << "That's too high, guess again: ";
}
else if(userGuess < randomNumber) {
cout << "That's too low, guess again: ";
}
if (userGuess == randomNumber) {
cout << "Correct!" << endl;
cout << "Your previous guesses was: ";
print(start);
break;
}
//Check to see if it has been guessed
bool checkDuplicate = exist(start, userGuess);
if (checkDuplicate == true) {
cout << "You already guessed that value! -- Guess again: ";
} else {
add(&start, userGuess);
}
}
}
现在很明显main
中会发生什么,很容易阅读,没有代码重复,就像以前一样。也不要在程序中使用符号代码,请使用符号(在您的情况下'n'
)。
相关文章:
- 从链接列表c++中删除一个项目
- 读取文件的最后一行并输入到链接列表时出错
- 下面是我为检测链接列表中的循环而制作的代码
- 有人能帮我处理这个链接列表吗?C++
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 链接列表运算符重载没有打印出我想要的内容
- 链接列表在 cpp 中包含不同的对象类
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 如何在构建链接列表时调整头、尾指针
- Shared_ptr双链接列表内存泄漏
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 在链接列表中查找元素 - C++
- 删除链接列表中剩余的最后一个节点
- 只有我的"链接列表"中的第一个节点正在打印
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 如何在C / C++中正确实现链接列表而不会使程序崩溃
- 将元素插入链接列表