我最近做了一个简短的程序,该程序是关于我在网上学到的有关编程(我是新手)C ++的新课程,每次学习新概念时,我都会这样做,深入了解它的概念及其用途。(这是我在编程中自学的方式)。我在程序中使用了vector,它解决了我的问题。但是,它创建了一个新的。
(您可能已经看过此代码)
#include <iostream>
#include <string>
#include <windows.h>
#include <vector>
using namespace std;
int main()
{
string LetterInput, LetterLoad, input;
string Words[5] = {"fire","eggs","roll","camera","lotion"};
vector <string> PossibleAnswers;
int Number,a = 0;
int Size,Num;
cout << "Lets play HANGMAN! " << endl;
Sleep(500);
cout << "Think of a word and type in the number" << endl;
cout << "of letters there are" << endl;
cin >> Size;
for (int i = 0; i <= Size; i++){
LetterLoad += "_";
}
Num = sizeof(Words)/sizeof(string);
for (int i = 0; i <= Num ; i++){
if ((unsigned)Size == Words[i].size()){
PossibleAnswers.push_back(Words[i]);
}
}
for (int i = 0;i <= Num;i++){
cout << PossibleAnswers[i] << endl;
}
cout << "Okay lets start" << endl;
Sleep(750);
while(a == 0)
{
cout << PossibleAnswers[0] << endl;
cout << PossibleAnswers[1] << endl;
cout << LetterLoad << endl;
cout << "Type in the position of the letter you want to guess" << endl;
cin >> Number;
cout << "What letter do you want to put?" << endl;
cin >> LetterInput;
LetterLoad[Number-1] = LetterInput[0];
for (size_t i = 0; i <= PossibleAnswers.size(); i++){
for (int n = 0; n <= Size; n++){
if (LetterInput[n] == PossibleAnswers[i][n]){
cout << "Got one" << endl;
}
}
}
}
return 0;
}
该程序能够输入正确的单词。但是,它将在到达cout << "Okay lets start" << endl;
并随后到达该代码行以下的所有内容时停止工作。我听说向量需要其他人的“内存分配”。这与程序无法正常运行有关吗?以及如何解决?
答案 0 :(得分:2)
如果在任何情况下都没有满足条件if ((unsigned)Size == Words[i].size()){
,那么您将不会推回足够的字符串。发生这种情况时,您将在下面的for (int i = 0;i <= Num;i++){
循环中崩溃,因为您尝试访问的元素更多。我建议改为这样做:
for (std::string &s : PossibleAnswers){
std::cout << s << std::endl;
}
您也可以从0
到PossibleAnswers.size()
进行循环,就像您在下面进行的进一步操作一样。
我听说向量需要其他的“内存分配” 人。
不,您必须误解了一些东西。这只是一个超出范围的错误,我建议通过始终使用range based for loops循环矢量或从0
到vec.size()
循环来避免这些错误。
答案 1 :(得分:0)
您在问有关以下问题:我正在尝试写一篇文章,但实际上您不知道字母。以我作为老师的经验,最好先学习编程基础知识,而不是学习使用库编程。您的以下陈述证明了我的观点:
我听说向量需要其他人的“内存分配”。
了解不同类型的存储块。这对每个程序员都是必要的。
std::string
std::vector
这些是线性数据结构-如果您不能自己实现它们,请不要使用它们。
while (a==0) ...
您正在为变量分配4个字节(在当今的大多数体系结构中),您甚至没有使用它。大多数编译器会将代码更改为:
while (true) ...
因为它等效于它。
每次有人写一个神奇的数字-世界上的一只小猫都死了。不要使用神奇的数字,省掉一只小猫。即使在培训课程中。您有时间将描述写入控制台,但没有为字符串数组的大小创建const变量。
有动力去学习编程是件好事。但是,如果您发现错误,将不会有任何好的结果。我的建议是更改您正在学习的来源。