C++cout将不会打印
C++ cout will not print
标题说的是,cout不会打印任何内容!但main正常结束并返回负数,发生了什么?这是我的代码:
#include <iostream>
using namespace std;
unsigned long fibonacci(long unsigned int *);
int main(void)
{
cout<<"IT WILL NOT PRINT!!!!!";
unsigned long int fib[4000000];
cout<<"SUM OF EVEN FIBONACCI NUMBERS: "<<fibonacci(fib)<<endl;
return 0;
}
unsigned long fibonacci(unsigned long int *FIBO)
{
unsigned long i;
int sum=0,c=0, *EVEN = new int[2000000];
FIBO[0]=1; FIBO[1]=2;
for (i=2;i<3999999;i++){
FIBO[i]=FIBO[i-1]+FIBO[i-2];
if (FIBO[i]%2==0){
EVEN[c]=FIBO[i];
sum+=EVEN[c];
c++;
}
}
delete [] EVEN;
return sum;
}
std::cout
默认情况下是缓冲的。如果没有显式刷新,在需要刷新内部缓冲区时,您将看不到任何打印内容。这样做是出于性能原因。
您可以添加特定的冲洗,如下所示:std::cout<<"IT WILL NOT PRINT!!!!!" << std::endl;
也就是说,您没有看到输出,因为您的程序正在崩溃。
unsigned long int fib[4000000];
将需要将近15MB的空间(在32位长的int平台上)。在这个存储持续时间内,根本没有足够的堆栈空间来分配这么大的内存块。
对于这样大的块,你需要动态分配块,或者更好的是:
std::vector<unsigned long int> fib(4000000);
但main正常完成并返回一个负数,
在您的代码中,main
返回0
,这是唯一的返回路径。因此,进程以负返回代码退出意味着main()
从未完成。
最有可能的是,数组unsigned long int fib[4000000];
对于系统的默认堆栈大小来说太大了,操作系统通过使进程以负数退出来处理此问题。
要解决此问题,请将该数组缩小批次或将其完全删除;或者使用动态分配。
请注意,甚至不需要具有此阵列(也不需要EVEN
)。你边走边记,所以你只需要保留最后两个数字;而不是整个历史。
让我们来看看这个问题:我们想要在预定义的范围内生成偶数斐波那契数的和。
为清晰起见,对进行了小编辑:
#include <iostream>
using namespace std;
unsigned long fibonacci(unsigned long int *FIBO)
{
unsigned long i;
int sum=0,c=0, *EVEN = new int[2000000];
FIBO[0]=1; FIBO[1]=2;
for (i=2;i<3999999;i++){
FIBO[i]=FIBO[i-1]+FIBO[i-2];
if (FIBO[i]%2==0){
EVEN[c]=FIBO[i];
sum+=EVEN[c];
c++;
}
}
delete [] EVEN;
return sum;
}
int main(void)
{
unsigned long int fib[4000000];
cout << "SUM OF EVEN FIBONACCI NUMBERS: " << fibonacci(fib) << endl;
return 0;
}
首先,让我们删除函数fibonacci中不需要的代码。我们不需要存储偶数,所以我们将删除even数组。
unsigned long fibonacci(unsigned long *FIBO)
{
unsigned long i, sum=0;
FIBO[0]=1; FIBO[1]=2;
for (i=2;i<3999999;i++){
FIBO[i]=FIBO[i-1]+FIBO[i-2];
if (FIBO[i]%2==0){
sum += FIBO[i];
}
}
return sum;
}
不过,我们可以更聪明一点——我们可以证明每三个斐波那契数都是偶数。从Fib(0)=0开始,这允许我们制作一个新函数:
unsigned long sum_even_fibonacci(unsigned long n)
{
unsigned long i, a=0, b=1, c=1, sum=0;
for (i=0;i<n/3;i++){
a = b + c; // Fib(3i)
b = a + c; // Fib(3i+1)
c = a + b; // Fib(3i+2)
sum += a; // Fib(3i) will always be even- add it to sum.
}
return sum;
}
这应该产生级数的前n个数中偶数斐波那契数的和。
完整的新程序:
#include <iostream>
using namespace std;
unsigned long sum_even_fibonacci(unsigned long n)
{
unsigned long i, a=0, b=1, c=1, sum=0;
for (i=0;i<n/3;i++){
a = b + c; // Fib(3i)
b = a + c; // Fib(3i+1)
c = a + b; // Fib(3i+2)
sum += a; // Fib(3i) will always be even- add it to sum.
}
return sum;
}
int main(void)
{
cout << "SUM OF EVEN FIBONACCI NUMBERS: " << sum_even_fibonacci(4000000) << endl;
return 0;
}
- 如何在逗号后使用 cout 打印整数值,而无需在逗号后添加额外的零C++?
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- C++ cout 不打印所有参数
- cout (<<) 重载运算符不打印减去的矩阵
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- C++正确书写和打印复数精度 (cout) 的问题?
- cout 打印内存地址而不是值
- cout 打印不准确的结果,printf 打印准确的结果
- cout 不打印任何内容到控制台
- std::cout 在打印变量与函数表达式时的行为不同
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- 为什么我在使用 for 循环和 cout 命令时没有打印出矢量
- C++中是否已经有一些类可以打印到 cout,但在未定义某些宏时可以关闭(例如 DEBUG)
- 为什么我可以打印动态分配的对象,但不能打印使用 cout <<在堆栈上创建的对象
- 从嵌入式python打印到cout
- 打印与 cout 性能
- C++程序无法在 Xcode 中打印到 cout
- 将vector中结构体的成员字符串打印到cout流
- 更好的#define打印std::cout<