Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ C++;for循环后的代码不';不执行_C++ - Fatal编程技术网

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 };