- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是一名 C++ 学生,陷入困境。我的代码看起来可以正常工作(嗯,我已经完成的部分),但是内存分配中的某些内容在 Windows 7 中出现了问题,但在我运行 ubuntu 的老式笔记本电脑中却没有。当然,代码是在Windows 7上编译和测试的。
我将发布整个代码,以便您可以编译它并尝试突出显示堵塞的相关部分。该代码旨在打开一个文件,将文件解析为二维数组,然后使用该数组填充其他一些需要按年份查找最大值的数组,依此类推。
代码后面是用于填充 mainArray 的文本文件,称为“Energy.dat”。如果有必要,我还可以上传 .doc 文件以充分解释这一切背后的目的。要点是,文件中的不同列是不同类型的能量,列索引对应于数组“types[]”中的值。我需要将多个列求和到单独的数组“fossilArray”、“renewableArray”和“totalArray”中。其中,在 Windows 7 中,偶尔会充满垃圾值(即 4.3e206),并且不同计算机上的值不同。发生这种情况的地方会在评论中显示。
我问过我的教授,他认为这是操作系统的问题。这似乎是正确的,但我缺乏解决它的知识和理解。任何输入都会有帮助。
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <string>
//#include <windows.h>
using namespace std;
void drawLine();
int returnMaxIndex(double mainArray[][14], int j);
int returnMaxIndex(double array[]);
int main()
{
string yearString; char answer = '@'; char Eanswer = '@'; //initialize to a value to get inside while loop
long int year = 1979; //same thing here
int i, j;
double temp;
double mainArray[29][14]; //EVERY VALUE LOADS PERFECTLY
double fossilArray[29]; //index 9, 12, 13 get junk values
double renewableArray[29]; //also gets occasional junk values
double totalArray[29]; //same here
string types[14] = {"Year", "Coal", "Petroleum", "Natural Gas", "Other Gases", "Nuclear",
"Hydroelectric (pumped storage)", "Hydroelectric", "Biomass-Wood",
"Biomass-Other", "Geothermal", "Solar", "Wind", "Other"};
ifstream file("Energy.dat");
if(file.fail())
return -1;
for(i = 0; i < 29; i++) //load main array
for(j = 0; j < 14; j++)
file >> mainArray[i][j];
for(i = 0; i < 29; i++) //load fossil sum array
for(j = 1; j < 5; j++)
fossilArray[i] += mainArray[i][j];
for(i = 0; i < 29; i++) //load renewable energy array
for(j = 6; j < 13; j++)
renewableArray[i] += mainArray[i][j];
for(i = 0; i < 29; i++) //load total energy array
for(j = 1; j < 14; j++)
totalArray[i] += mainArray[i][j];
// for(int i = 0; i < 29; i++)
// { for(int j = 0; j < 14; j++)
// {cout << fixed << setprecision(0) << setw(10) << mainArray[i][j] << " "; if(j == 6) cout << endl;}
// cout << endl << endl;}
// for(i = 0; i < 29; i++)
cout << setw(20) << std::right << fixed << fossilArray[12] << endl;
cout << "A. Shows the energy output for a year you select between 1980 and 2008"<< endl
<< "B. Gives you the year in which each form of energy has its peak output" << endl
<< "C. Create an excel compatible output file for the total of a type of energy \n\tOR as a percentage by year" << endl;
while (static_cast<int>(answer) < 65 || (static_cast<int>(answer) > 67 && static_cast<int>(answer) < 97) || static_cast<int>(answer) > 99)
{
cout << "Please choose an option A, B, or C: ";
cin.get(answer);
}
drawLine();
switch(answer)
{
case 'A': case 'a':
{
cout << "Enter the year in which you want to see the energy output(1980 - 2008): ";
while(year < 1980 || year > 2008)
{
cout << endl;
getline(cin, yearString);
year = strtol(yearString.c_str(), NULL, 10);
}
drawLine();
if(year == 1980) i = 0; if(year == 1981) i = 1; if(year == 1982) i = 2; if(year == 1983) i = 3; if (year == 1984) i = 4; if(year == 1985) i = 5;
if(year == 1986) i = 6; if(year == 1987) i = 7; if(year == 1988) i = 8; if(year == 1989) i = 9; if (year == 1990) i = 10; if(year == 1991) i = 11;
if(year == 1992) i = 12; if(year == 1993) i = 13; if(year == 1994) i = 14; if(year == 1995) i = 15; if (year == 1996) i = 16; if(year == 1997) i = 17;
if(year == 1998) i = 18; if(year == 1999) i = 19; if(year == 2000) i = 20; if(year == 2001) i = 21; if (year == 2002) i = 22; if(year == 2003) i = 23;
if(year == 2004) i = 24; if(year == 2005) i = 25; if (year == 2006) i = 26; if(year == 2007) i = 27; if(year == 2008) i = 28;
cout << "The energy produced in the year " << year << " was...(in megawatt hours) % of total" << endl;
for (j = 1; j < 14; j++)
{
double temp = mainArray[i][j]; double temp2 = totalArray[i];
cout << setw(36)<< std::left << types[j] << fixed << setprecision(3) << std::right << setw(16) << mainArray[i][j] << " " << setprecision(3) << (temp*1.0/temp2)*100.0 << endl;
//(abs(mainArray[i][j]))/(totalArray[j])
}
drawLine();
}break;
case 'B': case 'b':
{
cout << "A. Coal B. Petroleum C. Natural Gas D. Other Gas E. Nuclear" << endl
<< "F. Hydro Pumped Storage G. Hydroelectric H. Biomass-wood" << endl;
drawLine();
cout << "I. Biomass-waste J. Geothermal K. Solar L. Wind M. Other energy" << endl
<<"N. All fossil fuels O. All renewable P. Grand total" <<endl;
drawLine();
cout << "Enter the type of energy you want to see the the peak output year: ";
while(static_cast<int>(Eanswer) < 65 || (static_cast<int>(Eanswer) > 80 && static_cast<int>(Eanswer) < 97) || static_cast<int>(Eanswer) > 112)
{
cin.get(Eanswer);
}
switch(Eanswer)
{
case 'A': case 'a': j = 1; break; case 'B': case 'b': j = 2; break; case 'C': case 'c': j = 3; break; case 'D': case 'd': j = 4; break;
case 'E': case 'e': j = 5; break; case 'F': case 'f': j = 6; break; case 'G': case 'g': j = 7; break; case 'H': case 'h': j = 8; break;
case 'I': case 'i': j = 9; break; case 'J': case 'j': j = 10; break; case 'K': case 'k': j = 11; break; case 'L': case 'l': j = 12; break;
case 'M': case 'm': j = 13; break; case 'N': case 'n': j = 14; break; case 'O': case 'o': j = 15; break; case 'P': case 'p': j = 16; break;
}
if(j > 0 && j < 14)
{
i = returnMaxIndex(mainArray, j);
cout << "The year of maximum energy production for " << types[j] << " is " << mainArray[i][0];
}
if(j == 14)
{
i = returnMaxIndex(fossilArray);
cout << "The year of maximum energy production for fossil fuels is " << mainArray[i][0];
}
if(j == 15)
{
i = returnMaxIndex(renewableArray);
cout << "The year of maximum energy production for renewable energy is " << mainArray[i][0];
}
if(j == 16)
{
i = returnMaxIndex(totalArray);
cout << "The year of maximum energy production for total energy production is " << mainArray[i][0];
}
}
break;
case 'C': case 'c':
break;
}
}
int returnMaxIndex(double array[])
{
double temp = array[0];
for(int i = 0; i < 29; i++)
{
if(temp < array[i])
temp = array[i];
}
cout << temp << endl;
for(int i = 0; i < 29; i++)
{
if (temp == array[i])
return i;
}
}
int returnMaxIndex(double mainArray[][14], int j)
{
int k = 0;
double temp = labs(mainArray[k][j]);
for(int i = 1; i < 29; i++)
{
if(temp < labs(mainArray[i][j]))
temp = labs(mainArray[i][j]);
}
for(int i = 0; i < 29; i++)
{
if (temp == labs(mainArray[i][j]))
return i;
}
}
void drawLine()
{
cout << "---------------------------------------------------------------------------" << endl;
}
Energy.dat 的内容
1980 1161562368 245994189 346239900 0 251115575 0 276020970 275366 157797 5073079 0 0 0
1981 1203203232 206420775 345777173 0 272673503 0 260683544 245201 122628 5686163 0 0 0
1982 1192004204 146797490 305259749 0 282773248 0 309212893 195940 124979 4842865 0 0 0
1983 1259424279 144498593 274098458 0 293677119 0 332129735 215867 162745 6075101 0 2668 0
1984 1341680752 119807913 297393596 0 327633549 0 321150245 461411 424540 7740504 5248 6490 0
1985 1402128125 100202273 291945965 0 383690727 0 281149418 743294 639578 9325230 10630 5762 0
1986 1385831452 136584867 248508433 0 414038063 0 290844099 491509 685234 10307954 14032 4189 0
1987 1463781289 118492571 272620803 0 455270382 0 249694973 783088 693941 10775461 10497 3541 0
1988 1540652774 148899561 252800704 0 526973047 0 222939683 935986 738258 10300079 9094 871 0
1989 1562366197 159004961 297295127 454066 529354717 0 269189209 5582109 7742914 14593443 250601 2112043 282046
1990 1572108922 118863929 309486351 621112 576861678 -3507741 289753124 7032446 11499927 15434271 367087 2788600 11913
1991 1568845635 112798164 317773359 719074 612565087 -4541435 286019443 7735675 13853928 15966444 471765 2950951 402581
1992 1597713819 92237912 334274122 1212475 618776263 -4176582 250015684 8491095 15923885 16137962 399640 2887523 479806
1993 1665464154 105425325 342221829 966508 610291214 -4035572 277523663 9151852 16223338 16788565 462452 3005827 407651
1994 1666276091 98676618 385689325 1092023 640439832 -3377825 254004826 9232281 16983843 15535453 486622 3447109 239129
1995 1686056319 68145851 419178592 1926832 673402123 -2725131 305410435 7596774 17985777 13378258 496821 3164253 213275
1996 1771972991 74782864 378757294 1341140 674728546 -3088078 341158836 8386379 17816200 14328684 521205 3234069 201222
1997 1820761761 86479050 399595822 1533366 628644171 -4039905 350647962 8680229 18484565 14726102 511168 3288035 62807
1998 1850193304 122211090 449292578 2314896 673702104 -4467280 317866620 8608130 19233174 14773918 502473 3025696 158942
1999 1858617724 111539127 472995956 1606583 728254124 -6096899 314663058 8960705 19493050 14827013 495082 4487998 138942
2000 1943111290 105192123 517977999 2027956 753892940 -5538860 271337693 8916073 20307087 14093158 493375 5593261 124885
2001 1882826136 119148891 554939683 585791 768826308 -8823445 213749291 8293796 12944430 13740501 542755 6737332 6541565
2002 1910612813 89733266 607683246 1969851 780064087 -8742928 260491387 9009328 13145020 14491310 554831 10354279 9091465
2003 1952713826 113697198 567303392 2647093 763732695 -8535065 271511659 9527678 13807633 14424231 534001 11187467 8607470
2004 1957187710 114678307 627171620 3568233 788528387 -8488210 265063848 9736404 13061787 14810975 575155 14143741 8322440
2005 1992053878 116481854 683828924 3777156 781986365 -6557788 267039777 10569886 13031085 14691745 550294 17810549 6928168
2006 1969737146 59708237 734416872 4253528 787218636 -6557842 286253922 10341481 13927432 14568029 507706 26589137 7112762
2007 1998390297 61306315 814751904 4042131 806424753 -6896352 245842714 10711289 14294304 14637213 611793 34449927 6776960
2008 1976173298 42301486 798574077 3195712 806181935 -6238403 246100140 10901875 14872266 14859238 843054 52025898 6879905
最佳答案
fossilArray
似乎没有在 fossilArray[i] += mainArray[i][j];
行之前初始化。
同样的情况也适用于其他数组。
<小时/>问题出在这一行:
double fossilArray[29];
C++ 标准不保证局部变量已初始化。 Visual Studio 将未初始化的局部变量设置为某个非零值以帮助定位此问题。
关于c++ - 为什么这个c++代码在Linux中可以正常运行,但在Windows中却不能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930533/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!