为什么函数“ funct”无法执行?

时间:2019-07-19 17:20:14

标签: c++

#include<iostream>
#include<string>

using namespace std;

long funct(string s,long n){
    cout<<"lol";
    long len=s.size();
    long loop = n/len;
    long l = n % len;
    long rem =0;
    long count =0,i;
    for(i=0; i<l;i++)
    {
        if(s[i] == 'a')
        {
            rem++;
        }
    }
    while(i<len)
    {
        if(s[i] == 'a')
        {
            count++;
            i++;
        }
    }
    count += rem;
    long ans = (loop * count) + rem;
    return ans;
}

int main(void) {
    string s;
    cin>>s;
    long ans = funct(s,10);
    cout<<ans<<endl;
    return 0;
}

程序流在调用函数的行处停止。它不执行功能,也不跳过功能调用。 我在功能的第一行放置了cout进行调试,但即使没有执行。

我试图通过重复一个不超过10个大小的字符串来查找a的数量。

感谢您的帮助。实际上,函数内部存在无限循环,由于效率原因,我的第一个指令没有运行。

3 个答案:

答案 0 :(得分:1)

正在调用函数funct

未显示顶部(cout<<"lol";)的输出,因为它没有被刷新(请参阅Ben Voigt的答案)。

然后的实际问题是函数funct永远不会返回,因为它挂在while(i<len)循环(无限循环)中。

while(i<len)

    if(s[i] == 'a')

while(i<len)

    if(s[i] == 'a')

以此类推。请注意,i并未更改,因此将一直重复。

答案 1 :(得分:1)

在循环传递给函数的字符串的各个字母中,您需要

for(i=0;i<len;i++)

代替

for(i=0;i<l;i++)

我运行了它here 那是您的代码的第13行

答案 2 :(得分:0)

您是输出缓冲的受害者。

默认情况下,cout仅在遇到换行符时才将传出数据实际写入操作系统。这是效率的事情,如果您要通过一千个不同的变量构建数据文件,则没有必要将磁盘写入1000次。相反,整个字符串都建立在内存中。

您确实应该使用cerr进行调试跟踪,因为它没有缓冲。但是您也可以使cout起作用,只记得写换行符或刷新:

std::cout << "lol\n"; // this works

std::cout << "lol" << std::flush; // also works

最佳选择:

std::cerr << "lol";