Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C++中的for循环不重复它应该重复的次数? 我对C++比较陌生。我创建了这个for循环,以便用户可以输入数据,然后将数据添加到数组中。它似乎可以工作,只是当我运行它时它只迭代了7次。我希望它能运行更多,但它似乎不起作用。谢谢你的帮助 int numberCourses = 0; string allCourses[] = {}; for (int i = 0; i <= 50; i++) { cout << "Course #" << i << ": " << flush; string courseCode; cin >> courseCode; if (courseCode == "EXIT" || courseCode == "Exit" || courseCode == "exit"){ break; } else{ allCourses[i] = courseCode; numberCourses++; } }_C++ - Fatal编程技术网

为什么C++中的for循环不重复它应该重复的次数? 我对C++比较陌生。我创建了这个for循环,以便用户可以输入数据,然后将数据添加到数组中。它似乎可以工作,只是当我运行它时它只迭代了7次。我希望它能运行更多,但它似乎不起作用。谢谢你的帮助 int numberCourses = 0; string allCourses[] = {}; for (int i = 0; i <= 50; i++) { cout << "Course #" << i << ": " << flush; string courseCode; cin >> courseCode; if (courseCode == "EXIT" || courseCode == "Exit" || courseCode == "exit"){ break; } else{ allCourses[i] = courseCode; numberCourses++; } }

为什么C++中的for循环不重复它应该重复的次数? 我对C++比较陌生。我创建了这个for循环,以便用户可以输入数据,然后将数据添加到数组中。它似乎可以工作,只是当我运行它时它只迭代了7次。我希望它能运行更多,但它似乎不起作用。谢谢你的帮助 int numberCourses = 0; string allCourses[] = {}; for (int i = 0; i <= 50; i++) { cout << "Course #" << i << ": " << flush; string courseCode; cin >> courseCode; if (courseCode == "EXIT" || courseCode == "Exit" || courseCode == "exit"){ break; } else{ allCourses[i] = courseCode; numberCourses++; } },c++,C++,问题在于: string allCourses[] = {}; 使用 但向量更好。您对allCourses的初始化创建了一个空字符串数组,因此对任何i执行allCourses[i]都是未定义的行为 使用矢量的替代解决方案为: vector<string> allCourses; 这样,您也不需要跟踪数字课程,因为它将等于 完整代码如下所示: vector<string> allCourses; for (int i = 0; i <= 50; i++) {

问题在于:

string allCourses[] = {};
使用

但向量更好。您对allCourses的初始化创建了一个空字符串数组,因此对任何i执行allCourses[i]都是未定义的行为

使用矢量的替代解决方案为:

vector<string> allCourses;
这样,您也不需要跟踪数字课程,因为它将等于

完整代码如下所示:

vector<string> allCourses;
for (int i = 0; i <= 50; i++)
{ 
    cout << "Course #" << i << ": " << flush;
    string courseCode;
    cin >> courseCode;

    if (courseCode == "EXIT" || courseCode == "Exit" || courseCode == "exit"){
        break;
    }
    else{
        allCourses.push_back(courseCode);
    }
}
int numberCourses = allCourses.size();
问题在于:

string allCourses[] = {};
使用

但向量更好。您对allCourses的初始化创建了一个空字符串数组,因此对任何i执行allCourses[i]都是未定义的行为

使用矢量的替代解决方案为:

vector<string> allCourses;
这样,您也不需要跟踪数字课程,因为它将等于

完整代码如下所示:

vector<string> allCourses;
for (int i = 0; i <= 50; i++)
{ 
    cout << "Course #" << i << ": " << flush;
    string courseCode;
    cin >> courseCode;

    if (courseCode == "EXIT" || courseCode == "Exit" || courseCode == "exit"){
        break;
    }
    else{
        allCourses.push_back(courseCode);
    }
}
int numberCourses = allCourses.size();
不允许0个元素的自动数组。这是一个格式不正确的程序,编译器应该告诉您这一点

您可以访问数组中不存在的元素。这种行为没有定义

简单解决方案:创建一个包含足够元素的数组:

 string allCourses[51];
不允许0个元素的自动数组。这是一个格式不正确的程序,编译器应该告诉您这一点

您可以访问数组中不存在的元素。这种行为没有定义

简单解决方案:创建一个包含足够元素的数组:

 string allCourses[51];

您的代码无法按预期工作,因为您试图将数据推送到数组中。C++中的数组没有动态分配。您可能希望尝试使用std库中的其他容器,而不是数组

具体来说,您已将所有课程声明为空数组。完成了。无法将元素添加到此空数组。但是,如果您将allCourses声明为N个元素的静态数组,如下所示:

#define N 51
string allCourses[N];
这将允许51个元素

另一种选择是使用std::vector,它抽象底层数组,但允许动态添加元素

如果使用向量,则必须使用.push_backX向向量添加元素

或者,使用std::map快速修改类型以允许其余代码按原样运行


使用std::map可以像通过int索引一样动态访问容器元素,即使这不是std::map的预期目的,也可以这样使用。

您的代码无法按预期工作,因为您试图将数据推送到数组中。C++中的数组没有动态分配。您可能希望尝试使用std库中的其他容器,而不是数组

具体来说,您已将所有课程声明为空数组。完成了。无法将元素添加到此空数组。但是,如果您将allCourses声明为N个元素的静态数组,如下所示:

#define N 51
string allCourses[N];
这将允许51个元素

另一种选择是使用std::vector,它抽象底层数组,但允许动态添加元素

如果使用向量,则必须使用.push_backX向向量添加元素

或者,使用std::map快速修改类型以允许其余代码按原样运行


使用std::map可以像通过int索引一样动态访问容器元素,即使这不是std::map的预期目的,也可以这样使用。

如果要逐渐向数组添加内容,请使用向量。实际上,只要你需要一个数组,就使用vector,直到你有了更多的经验

std::vector<std::string> allCourses;

// inside the if:
  allCourses.push_back(courseCode);

现在,您还可以摆脱numberCourses,因为您可以使用allCourses.size来获取已创建课程的数量。

如果您想逐渐向数组中添加内容,请使用向量。实际上,只要你需要一个数组,就使用vector,直到你有了更多的经验

std::vector<std::string> allCourses;

// inside the if:
  allCourses.push_back(courseCode);

现在你也可以摆脱一些课程,因为您可以只使用allCourses.size来获取已创建课程的数量。

在您执行任何其他操作之前,我建议您停止使用,在您执行任何其他操作之前,我建议您停止使用,可能这与循环将字符串添加到仅包含一个元素或完全为空的数组有关,太懒了,无法验证。因此,该程序严重崩溃。这是一个奇迹,它甚至持续了七次迭代。我预计它会在第二个出现崩溃。您有未定义的行为。将数组命名为string allCourses[51];为了避免您的问题,因为for循环可以从0运行到50(包括0到50)。请将std::vector与push_back一起使用,而不是数组。在比较之前,您应该将字符串转换为全小写或全大写,这样您就不会错过eXit或eXit之类的情况。也许我
t与向只包含一个元素或完全为空的数组添加字符串的循环有关,该数组太懒,无法验证。因此,该程序严重崩溃。这是一个奇迹,它甚至持续了七次迭代。我预计它会在第二个出现崩溃。您有未定义的行为。将数组命名为string allCourses[51];为了避免您的问题,因为for循环可以从0运行到50(包括0到50)。请将std::vector与push_back一起使用,而不是数组。在比较之前,您应该将字符串转换为全小写或全大写,这样您就不会错过eXit或eXit之类的情况。您甚至不需要显式初始化,默认初始化做得对。@Quentin很好。你甚至不需要显式初始化,默认初始化做得对。@Quentin很好。string allCourses[N]={0};将使用0初始化第一个数组元素,该值在此上下文中被解释为空指针常量。空指针是std::string对象的无效初始值设定项。你为什么把0放在{}之间?^^你是对的。Edited.string所有课程[N]={0};将使用0初始化第一个数组元素,该值在此上下文中被解释为空指针常量。空指针是std::string对象的无效初始值设定项。你为什么把0放在{}之间?^^你是对的。已编辑。我认为您应该添加2个正确的代码段。奥斯汀显然是一个新手,许多人都陷入了同样的陷阱。使用vector push_back的示例可能是个好主意。@VGE现在怎么样?我认为您应该添加2个正确的代码段。奥斯汀显然是一个新手,许多人都陷入了同样的陷阱。一个向量push_back的例子可能是个好主意。@VGE现在呢?