#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的数量。
感谢您的帮助。实际上,函数内部存在无限循环,由于效率原因,我的第一个指令没有运行。
答案 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)
答案 2 :(得分:0)
您是输出缓冲的受害者。
默认情况下,cout
仅在遇到换行符时才将传出数据实际写入操作系统。这是效率的事情,如果您要通过一千个不同的变量构建数据文件,则没有必要将磁盘写入1000次。相反,整个字符串都建立在内存中。
您确实应该使用cerr
进行调试跟踪,因为它没有缓冲。但是您也可以使cout
起作用,只记得写换行符或刷新:
std::cout << "lol\n"; // this works
std::cout << "lol" << std::flush; // also works
最佳选择:
std::cerr << "lol";