C++ 字符串/数组情况c++;
我不明白它到底出了什么问题。即使有一个while循环,最后的尝试次数也是9次。我想让它检查猜测是字符串中的一个坐标,但它永远不起作用/ 我将把if语句移到哪里C++ 字符串/数组情况c++;,c++,arrays,string,C++,Arrays,String,我不明白它到底出了什么问题。即使有一个while循环,最后的尝试次数也是9次。我想让它检查猜测是字符串中的一个坐标,但它永远不起作用/ 我将把if语句移到哪里 int main() { int guesses, destroy, numAttempts = 11; string guess, i; string coordinate[3] = {"B1", "C4", "D3"}; cout << "Enter in a coordinate between A-1 and D-4
int main() {
int guesses, destroy, numAttempts = 11;
string guess, i;
string coordinate[3] = {"B1", "C4", "D3"};
cout << "Enter in a coordinate between A-1 and D-4 (i.e. C4): ";
cin >> guess;
guesses = 0;
destroy = 0;
while (guess != coodinate[i] && guesses < numAttempts - 1) {
cout << "Target missed. Try again: ";
cin >> guess;
guesses++;;
}
if (guess != coordinate[i])
cout << "Failed!";
else
cout << "Congrats!";
/*if (guess == coordinate) {
cout << "Target hit! Next target: ";
cin >> guess;
destroy++;
guesses++;
}
*/
}
intmain(){
int猜测,销毁,numtempts=11;
猜猜看,我;
字符串坐标[3]={“B1”、“C4”、“D3”};
猜不透;
猜测=0;
破坏=0;
while(guess!=coodinate[i]&&guess 你这里有一个打字错误:
while (guess != coodinate[i] && guesses < numAttempts - 1)
//coordinate[i]
while(guess!=coodinate[i]&&guess
尝试:
while((guess!=坐标[i])&&(guess<(numtempts-1)))
//括号不是强制性的
另外,正如其他人指出的,您并不是在所有数组坐标中寻找guess
值,因为您没有增加i
,您这里有一个输入错误:
while (guess != coodinate[i] && guesses < numAttempts - 1)
//coordinate[i]
while(guess!=coodinate[i]&&guess
尝试:
while((guess!=坐标[i])&&(guess<(numtempts-1)))
//括号不是强制性的
另外,正如其他人所指出的,你没有在所有数组坐标中寻找guess
,因为你没有增加i
,你忘记了增加i
。i++
(至少,我假设你是这样?)。
可能是错误的一部分。
如果你必须增加i,确保它不会超出范围
guess = input ;
guesses = 0;
while (guesses < numAttempts && guess != coodinate[i] ) {
cout << "Target missed. Try again: ";
cin >> guess;
guesses++;
i = (i+1)%3;
}
guess=输入;
猜测=0;
而(猜测您忘记了递增i
。i++
(至少,我认为您是这样的?)。
可能是错误的一部分。
如果你必须增加i,确保它不会超出范围
guess = input ;
guesses = 0;
while (guesses < numAttempts && guess != coodinate[i] ) {
cout << "Target missed. Try again: ";
cin >> guess;
guesses++;
i = (i+1)%3;
}
guess=输入;
猜测=0;
而(猜测
您需要学习创建小型单用途函数并将它们组合在一起
#include <set> // because you have a set of targets...
#include <string> // used to represent a target
using Target = std::string;
static Target const MissedTarget = "";
static bool isGuessCorrect(Target const& guess,
std::set<Target> const& targets)
{
return targets.count(guess);
}
// Returns the target hit (if any), or MissedTarget otherwise
static Target tryOnce(std::set<Target> const& targets) {
std::cout << "Enter in a coordinate between A-1 and D-4 (i.e. C4): ";
std::string guess;
if (std::cin >> guess) {
if (isGuessCorrect(guess, targets)) { return guess; }
return MissedTarget;
}
// Something that could not (unfortunately) be parsed,
// we need to clear std::cin
std::cin.clear();
std::cin.ignore(std::numeric_limit<size_t>::max(), '\n');
return MissedTarget;
}
static bool tryFewTimes(size_t const tries, std::set<Target>& targets) {
for (size_t n = 0; n != tries; ++n) {
Target const target = tryOnce(targets);
if (target == MissedTarget) {
std::cout << "Missed! Try again!\n";
continue;
}
targets.erase(target);
std::cout << "Congratz! You got " << target
<< "! Only " << targets.size() << " remaining\n";
return true;
}
std::cout << "You flunked it, can't always win :(\n";
return false;
}
int main() {
std::set<Target> targets = { "A1", "B1", "C1" };
while (not targets.empty() and tryFewTimes(3, targets)) {}
}
#包含//因为您有一组目标。。。
#include//用于表示目标
使用Target=std::string;
静态目标常数MissedTarget=“”;
静态布尔值为猜测正确(目标常数和猜测,
标准::设置常量和目标)
{
返回目标。计数(猜测);
}
//返回目标命中率(如果有),否则返回未命中目标
静态目标时间(标准::设置常数和目标){
标准::cout>猜测){
if(isGuessCorrect(guess,targets)){return guess;}
返回未命中的目标;
}
//一些无法(不幸地)解析的东西,
//我们需要清除std::cin
std::cin.clear();
std::cin.ignore(std::numeric_limit::max(),'\n');
返回未命中的目标;
}
静态bool tryFewTimes(大小常数、标准::设置和目标){
对于(大小n=0;n!=tries;++n){
目标常数目标=tryOnce(目标);
如果(目标==未命中目标){
std::cout您需要学习创建小型单用途函数并将它们组合在一起
#include <set> // because you have a set of targets...
#include <string> // used to represent a target
using Target = std::string;
static Target const MissedTarget = "";
static bool isGuessCorrect(Target const& guess,
std::set<Target> const& targets)
{
return targets.count(guess);
}
// Returns the target hit (if any), or MissedTarget otherwise
static Target tryOnce(std::set<Target> const& targets) {
std::cout << "Enter in a coordinate between A-1 and D-4 (i.e. C4): ";
std::string guess;
if (std::cin >> guess) {
if (isGuessCorrect(guess, targets)) { return guess; }
return MissedTarget;
}
// Something that could not (unfortunately) be parsed,
// we need to clear std::cin
std::cin.clear();
std::cin.ignore(std::numeric_limit<size_t>::max(), '\n');
return MissedTarget;
}
static bool tryFewTimes(size_t const tries, std::set<Target>& targets) {
for (size_t n = 0; n != tries; ++n) {
Target const target = tryOnce(targets);
if (target == MissedTarget) {
std::cout << "Missed! Try again!\n";
continue;
}
targets.erase(target);
std::cout << "Congratz! You got " << target
<< "! Only " << targets.size() << " remaining\n";
return true;
}
std::cout << "You flunked it, can't always win :(\n";
return false;
}
int main() {
std::set<Target> targets = { "A1", "B1", "C1" };
while (not targets.empty() and tryFewTimes(3, targets)) {}
}
#包含//因为您有一组目标。。。
#include//用于表示目标
使用Target=std::string;
静态目标常数MissedTarget=“”;
静态布尔值为猜测正确(目标常数和猜测,
标准::设置常量和目标)
{
返回目标。计数(猜测);
}
//返回目标命中率(如果有),否则返回未命中目标
静态目标时间(标准::设置常数和目标){
标准::cout>猜测){
if(isGuessCorrect(guess,targets)){return guess;}
返回未命中的目标;
}
//一些无法(不幸地)解析的东西,
//我们需要清除std::cin
std::cin.clear();
std::cin.ignore(std::numeric_limit::max(),'\n');
返回未命中的目标;
}
静态bool tryFewTimes(大小常数、标准::设置和目标){
对于(大小n=0;n!=tries;++n){
目标常数目标=tryOnce(目标);
如果(目标==未命中目标){
std::cout考虑到截获的打字错误,这真的是代码吗?i
应该声明为int
,而不是字符串
…考虑到截获的打字错误,这真的是代码吗?i
应该声明为int
,而不是字符串
…我投了赞成票,但我认为额外的括号是真的“不需要。它们只是用来增加字符数。”StytTeLee我为清楚地添加了这些,我不再加入C++:我不确定它们是否有用。我将编辑我的答案来指出它。我赞成它,但我认为额外的括号确实是多余的。它们只用来增加字符计数。“为了清楚起见,我不再对C++了:我不确定它们是否有用。我将编辑我的答案来指出它。谢谢。这有点帮助,但我的主要问题是:“错误C2677:二进制”[ ]:没有找到全局类型的操作符,它需要类型“STD::String”(或者没有可接受的转换)。这是偶然发生的..while看起来很好..我不认为您发布的是实际代码:PLol。我只需要找到另一种方法使其进入循环。谢谢。这有点帮助,但我的主要问题是:“错误C2677:binary'[':找不到采用'std::string'类型的全局运算符”(或者没有可接受的转换)”这是一时兴起的。虽然看起来很好。我不认为你发布的是真正的代码:PLol。我只是需要找到另一种方法让它循环。