【问题标题】:Set up switch with vector in C++在 C++ 中使用向量设置开关
【发布时间】:2014-05-26 21:32:11
【问题描述】:

我正在尝试学习 C++,但我有点卡住了。

我正在使用Geany 和 CentOS 创建一个基本的成绩簿应用程序。

Geany 在应用程序的 forcout 行上显示红色卷线。我觉得一切都在正确的语法,但我得到“编译失败”。

我的来源有什么问题?

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main(void){

    // Declaration of local variables for gradebook
    vector<int> gradeVector;
    char choice;
    bool menu = true;

    // User Menu
    while (menu){
        cout << "This is the gradebook menu\n";
        cout << "Please enter (a) to Show All Grades\n";
        cout << "Please enter (l) to Show Last Grade\n";
        cout << "Please enter (g) to Add Grade\n";
        cout << "Please type 0 to Exit.\n";
        cin >> choice;

        switch(choice){
            case 'a':
                for (i=0;i <= gradeVector.size(); i++)
                cout << "These are the grades entered: \n"<<gradeVector.at(i);
            break;
            case 'l':
                cout << "This was the last grade entered: \n" << gradeVector;
            break;
            case 'g':
                cout << "Please add a grade to the gradebook: \n" << cin >> gradeVector.push_back();
            break;
            case 0:
                menu = false;
            break;
            default:
                cout << "Please ONLY use lower-case a, l, g, or 0 as your choice.\n"
        }
    }
    return (0);
}

【问题讨论】:

  • 您的源不使用跟随您的初始菜单选择输入的换行符。您的 question 有什么问题会丢失信息,即描述这是应该做什么,它似乎做什么,以及任何怀疑你可能会隐瞒为什么。关于编译失败消息; 逐字发布 在尝试修复它们但失败后。 (首先声明i,这应该很明显)。
  • 您的代码中有很多错误。一:在for循环中,i没有声明,使用int i;第二:"This was the last grade entered: \n" &lt;&lt; gradeVector; 没有意义,例如使用gradeVector.at(gradeVector.size()); 在发布问题之前先使用调试器
  • 对。我只是注意到我的 i 没有被声明。我刚刚修好了。 “这是输入的最后一个评分:”行只是一个猜测。我忘了提到我需要在那条特定线路上的指导。 gradeVector.at(gradeVector.size());应该可以让我试试看。

标签: c++ vector switch-statement


【解决方案1】:

您的代码中有多个错误。首先你忘了声明整数i。你试图输出一个向量,从你的文字中我猜你只想要最后一个成绩。输入应使用 push_back 进行,但应首先将其读入临时变量。更正这一点并更改一些通用代码将使您的代码成为您的代码:

#include <vector>
#include <string>
#include <iostream>

using namespace std;

int main(void){

    // Declaration of local variables for gradebook
    vector<int> gradeVector;
    char choice;
    bool menu = true;

    // User Menu
    while (menu){
        cout << "This is the gradebook menu\n";
        cout << "Please enter (a) to Show All Grades\n";
        cout << "Please enter (l) to Show Last Grade\n";
        cout << "Please enter (g) to Add Grade\n";
        cout << "Please type 0 to Exit.\n";
        cin >> choice;

        switch(choice){
            case 'a':
                cout << "These are the grades entered: \n"
                for (int i=0 ;i < gradeVector.size(); i++)
                    cout << gradeVector[i] << " ";
            break;
            case 'l':
                cout << "This was the last grade entered: \n" << gradeVector[gradeVector.size()-1];
            break;
            case 'g':
                cout << "Please add a grade to the gradebook: \n";
                int input;
                cin >> input;
                gradeVector.push_back(input);
            break;
            case 0:
                menu = false;
            break;
            default:
                cout << "Please ONLY use lower-case a, l, g, or 0 as your choice.\n";
        }

     }

    return (0);
}

【讨论】:

  • 我知道我的错误在哪里。谢谢你。我将代码修改为您的示例,现在唯一的问题是获取 Vector 中的最后一个输入。我添加了这一行,但出现溢出错误: cout 括号而不是括号。
【解决方案2】:

首先,你的 for 循环语法是错误的。

for (i=0;i <= gradeVector.size(); i++)

那每次都会给你一个segmentation fault,应该是

for (i=0;i < gradeVector.size(); i++)

因此您不会访问超出范围的内存。请记住,计数从 0 开始,您不能访问超过分配的内存。

你的编译错误在这里:

cout << "This was the last grade entered: \n" << gradeVector;

你无法计算出这样的向量;你必须找出一个特定的元素。如果要计算向量中的所有元素,请使用 for 循环。

【讨论】:

  • @PeterMortensen 嘿,伙计,不要再用你毫无价值的编辑把旧帖子弄到顶部了。
猜你喜欢
  • 1970-01-01
  • 2015-11-14
  • 2015-05-28
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多