【问题标题】:Scope of string in a function函数中字符串的范围
【发布时间】:2014-04-11 12:48:43
【问题描述】:

以下是我目前遇到问题的一段代码。我的函数(名为 getGuess)需要能够接受多个独立输入的猜测(我已经简化了这部分代码,以便输入 5 个猜测)并形成它的单个字符串输出(名为 prevGuesses)。猜测有一个限制,因为它们必须是小写字符并且不能重复(这个限制参数是在函数 prevGuesses 内的 while 循环中设置的)。目前 prevGuesses 字符串的范围是本地的,并且无法保存应该在 int main 函数中 for 循环的每个循环中添加的猜测字符。您可以忽略我的 int main 函数代码的开始部分,其中需要一个名为短语的输入。

#include <iostream>
#include <string>

using namespace std;

char getGuess(string prevGuesses);

int main(){

    char guess;
    string phrase, unsolved, prevGuesses;
    cout << "Enter phrase: ";
    getline(cin,phrase);

    for (int i=0; i<5; i++){   // i<5 is an arbitrary parameter designed for 5 guesses
        getGuess(prevGuesses);
        cout << prevGuesses << endl; //this serves as a check for prevGuesses string
                                     //currently blank for every output
    }
    cout << prevGuesses << endl; //also blank 
                                 //suppose to be a string of the 5 guessed characters 
}

char getGuess(string prevGuesses){

    char guess;
    cout << "Enter a guess: ";
    cin >> guess; 
    while ((guess < 'a') || (guess > 'z') || (prevGuesses.find(guess, 0) 
    <= prevGuesses.size())){                     
        cout << "Invalid guess! Please re-enter a guess: ";
        cin >> guess;
    }
    prevGuesses = prevGuesses + guess;
    cout << prevGuesses << endl; //every output is currently the single guess character

    return guess;
}

【问题讨论】:

    标签: c++ string function scope


    【解决方案1】:

    我认为您需要传递prevGuesses 作为参考。或者,您可以使用指针。

    试试这个。

    char getGuess(string &prevGuesses)
    

    这将允许调用函数实际对变量进行编辑。它当前的编写方式是,当您将变量传递给函数时,它会被复制,并且您正在添加到副本中,然后超出范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      相关资源
      最近更新 更多