C++ C++;for循环后的代码不';不执行
我觉得有点奇怪,C++ C++;for循环后的代码不';不执行,c++,C++,我觉得有点奇怪,for循环后的代码没有执行,但编译器没有发出任何警告: #include <iostream> #include <iterator> bool isVowel(char ch) { char vowels[]{"aeiouAEIOU"}; char *p = std::find(std::begin(vowels), std::end(vowels), ch); if (p != std::end
for
循环后的代码没有执行,但编译器没有发出任何警告:
#include <iostream>
#include <iterator>
bool isVowel(char ch)
{
char vowels[]{"aeiouAEIOU"};
char *p = std::find(std::begin(vowels), std::end(vowels), ch);
if (p != std::end(vowels))
{
std::cout << ch << " is a vowel" << '\n';
return true;
}
else
{
std::cout << ch << " is not a vowel" << '\n';
return false;
}
}
int main()
{
char name[]{"MollieU"};
int numVowels{0};
std::cout << name << '\n';
int length{std::size(name)};
for (char* ptr{name}; ptr < (name + length); ++ptr)
{
if (isVowel(*ptr))
++numVowels;
}
std::cout << name << " has " << numVowels << " vowels." << '\n';
return 0;
}
但是
std::cout尝试使用以下方法:
int length { std::size(name) - 1 };
一旦我把丢失的#include.编译成功并不意味着蹲下。我不知道人们从哪里得到这样的想法:如果一个程序编译了,它应该按照预期工作。程序在不包含任何语法错误时进行编译。你可以制造所有你想要的逻辑错误,它仍然可以编译。你需要学习如何调试你的程序。如果for
循环后的代码没有执行,那么很可能循环永远不会结束。无法重新编程。代码按预期编译和工作。这包括最后的cout
语句是什么让你说输出行是“从不运行”的?到底发生了什么?你在哪里经营这个?在控制台里?石斑鱼类?还有别的吗?如何启动程序?如何执行?这不是“程序已完成,但由于输出窗口关闭得太快,我错过了最后一个输出”的情况,是吗?是的,我刚刚发现std::size()
或sizeof()
返回的长度比std::strlen()
多1个,因为它们在数组末尾包含了尾随的\0
。在
中使用固定长度或std::strlen()
可以使代码正常工作。但是,这似乎不能解释您遇到的实际问题。它只解释了5个元音与4个元音的错误结果。@Pedro,循环不会在长度大于7时停止,并且在我使用的机器上永远不会执行代码。但是相同的代码(长度=8)在repl上产生不同的结果。它与clangc++17
。在我的机器上,它停留在循环中,没有最后一行的输出,但在repl上。它将\0
尾随的\0
与元音[]中的另一个\0
进行比较
并将最后一行输出为MollieU有5个元音。
您的循环条件与is元音中发生的事情没有任何关系。您是否尝试过向for循环体添加一两个cout
,以查看实际发生的情况?您可以在每次迭代开始时输出地址ptr
和name+length
,并在每次迭代结束时添加一些其他的cout
,这样您就知道真正发生了什么。我能看到的唯一解释是它被困在查找中。
int length { std::size(name) - 1 };