NEVERMIND,固定它。 for loop issue
我正在尝试使用格式化输出进行一些数字处理,并且我遇到一个问题,我的一半输出没有打印。我写了一个小测试代码来说明问题:
#include <iostream>
int testF(){
for (int i; i<10; i++) {
std::cout << i << "\n";
}
return 0;
}
int main(){
std::cout << "START_(this_line_seems_to_be_causing_problems)\n";
int sret = 1;
sret = testF();
std::cout << sret << "\n";
std::cout << "END\n";
return 0;
}
问题似乎取决于std::cout << "START_(this_line_seems..."
行。
如果我注释掉这一行,它将打印testF()
的内容。如果我没有,那么testF()
不会打印,虽然它确实给出了返回值。
重要的是我可以从main
和我的功能进行打印。我有办法做到这两点吗?
答案 0 :(得分:3)
尝试初始化i:
int testF(){
for (int i = 0; i<10; i++) {
std::cout << i << "\n";
}
return 0;
}
为什么int sret = 1; //值永远不会被使用或传递给函数
你想要的只是:
int sret;
sret = testF();
std::cout << sret << "\n";
std::cout << "END\n";
也为什么要做
sret = testF(),
cout<<sret
这只会在输出中附加0, 而是直接调用testF()。
答案 1 :(得分:0)
for (int i; i<10; i++) {
此循环尝试从未初始化的int
读取。这是未定义的行为,这意味着一切都会发生,程序可能会表现得很奇怪。
实践中可能发生的事情是未初始化变量的内存位置包含一些随机数据,这些数据被解释为大于10的内容,并且随机数据以某种方式受到先前std::cout
语句的影响。但那只是猜测; C ++语言根本不定义程序的行为方式。
为了避免未定义的行为,您必须初始化变量:
for (int i = 0; i<10; i++) {
顺便说一句......
int sret = 1; sret = testF(); std::cout << sret << "\n";
这可以更简洁地写成:
std::cout << testF() << "\n";