繁体   English   中英

如何将 function 中的值返回到另一个函数中? C++ [关闭]

[英]How can I return a value from a function into another functions? C++ [closed]

我上周开始编程,现在我想创建一个 Vocabeltrainer。

现在,一切正常。 我的问题出在代码中的//Menü 用户可以输入他的名字。 然后他的名字与字符串值firstname相关联。

function 将此值返回给//Main ,其中:

string user = voc_menu();

但我也希望这个值在//Vokabeln Hinzufügen

我把值放在 function 中:

addition(german, english, user);

但是如果我需要放其他东西,它就不起作用,因为在addition()内部最多是三个值。

有人能帮我吗?

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <iterator>
#include <conio.h>
#include <io.h>
#include <windows.h>
#include <sys/types.h>
#include <sys/stat.h>

using namespace std;
const string OutputFolder = "C:\\Users\\esche\\Desktop\\Programming\\C++\\Vokabeltrainer\\User";

//Datenbank German/English Vokabeln

vector<string> loadFile(string txtFile) {
    ifstream in(txtFile);
    string str;
    vector<string> language;

    while (getline(in, str)) {
        if(str.size() > 0)
            language.push_back(str);
    }

    return language;
}

void safeFile(string txtFile, vector<string> language) {
    ofstream output_file(txtFile);
    ostream_iterator<string> output_iterator(output_file, "\n");
    copy(language.begin(), language.end(), output_iterator);
}

//Regeln

void rules() {
    cout << "Regeln:" "\n";
    cout << "-keine Leerzeichen" "\n";
    cout << "-Auf Groß- und Kleinschreibung achten" "\n";
    cout << "Wenn Sie jetzt los legen wollen drücken sie ENTER." "\n";
}

//Menü

string voc_menu_detail() {
    cout << "Bitte geben Sie Ihre Auswahl an: " "\n";
    cout << "(0) Programm beenden" "\n";
    cout << "(1) Neue Vokabel hinzufügen" "\n";
    cout << "(2) Vokabeltrainer starten" "\n";
    string selection;
    cin >> selection;
    cout << "Deine Auswahl: " + selection + "\n";

    return selection;
}

string voc_menu() {
    cout << "Vokabeltrainer" "\n";
    cout << "Geben Sie Ihren Vornamen ein:" "\n";
    string firstname;
    cin >> firstname; 

    struct stat info;

    if( stat( string(OutputFolder +"\\"+ firstname).c_str(), &info ) != 0 ) {    
        if (CreateDirectory(OutputFolder.c_str(), NULL), ERROR_ALREADY_EXISTS == GetLastError()) {
            CreateDirectory(string(OutputFolder +"\\"+ firstname).c_str(), NULL);

            cout << "Guten Tag " + firstname + "." "\n";
        }
    } else if( info.st_mode & S_IFDIR ) {
        cout << "Guten Tag " + firstname + "." "\n";
    } else {
        cout << "FEHLER";
    }

    return firstname;
}

//Vokabeln Hinzufügen

void addition(vector<string> german, vector<string> english, string user) {
    string voc_english;
    string voc_german;

    rules();

    for(int i = 1; i > 0; i++) {
    
        if(getch()=='0') {
            break;
        }

        cout << "Geben Sie eine neue Vokabel ein (Deutsch): " "\n";

        cin >> voc_german;
        cout << "Sie haben erfolgreich die deutsche Vokabel " + voc_german + " hinzugefuegt." "\n";
        cout << "Geben Sie nun die passende Vokabel dazu auf Englisch ein: " "\n";
        cin >> voc_english;

        german.push_back(voc_german);
        english.push_back(voc_english);
    
        safeFile(string(OutputFolder +"\\"+ user + "\\german.txt").c_str(), german);
        safeFile(string(OutputFolder +"\\"+ user + "\\english.txt").c_str(), english);

        cout << "Sie haben erfolgreich die englische Vokabel " + voc_english + " passend zu der deutschen Vokabel " + voc_german + " hinzugefuegt." "\n";
        cout << "Betaetigen Sie ENTER um weiter zu machen oder 0 um ins Menue zu gelangen." "\n";
    }
    cout << "Hinzugefügte Vokabeln: " + to_string(german.size()) + "\n";
}

//Game

void game(vector<string> german, vector<string> english) {
    cout << "Der Vokabeltest wird gestartet..." "\n";
    rules();

    for(int i = 1; i > 0; i++) {
        int random = rand() % german.size();
        string random_english = english[random];
        string random_german = german[random];

        if(getch()=='0') {
            break;
        }

        cout << "Was heißt " + random_german + " auf Englisch?" "\n";

        string userInput;
        cin >> userInput;
    
        if(userInput == random_english) {
            cout << "Richtig." "\n";
        } else {
            cout << "Falsch... Richtig waere ~" + random_english + "~ gewesen." "\n";
        }

        cout << "Betaetigen Sie mit ENTER um weiter zu machen oder 0 um ins Menü zu gelangen." "\n";
    }
}

//Main

int main() {
    string user = voc_menu();

    for(int i = 1; i > 0; i++) {

        vector<string> german = loadFile(string(OutputFolder +"\\"+ user + "\\german.txt").c_str());
        vector<string> english = loadFile(string(OutputFolder +"\\"+ user + "\\english.txt").c_str());

        string selection = voc_menu_detail();

        if(selection == "1") {
            addition(german, english, user);
        } if(selection == "2") {
            game(german, english);
        }
        if(selection == "0") {
            break;
        }
    }

    return 0;
}

您不能,从另一个 function 访问该变量内容的唯一方法是将其保存到 scope 到达该 ZC1C425268E68385D1AB5074C17A94F1 的变量中(例如,我理解为什么全局变量不能) t 简单地按原样传递,如果您需要传递更多参数到附加 function,请向该 function 添加更多参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM