C++打印到带有事例和数组的文件中

C++ to print to a file with cases and arrays

本文关键字:数组 文件 打印 C++      更新时间:2023-10-16

好的,所以这个程序被缩短了,以便于阅读。显然,随着变量的数量,会有更多的案例陈述。我的问题是为什么我的程序每次运行都会出错。当它编译时它很好,但当我运行它时它就不好了

#include <iostream>
#include <fstream>
#include <cmath>
#include <string>
using namespace std;
int main()
{
    string thearray[22960];
    char bigfor[10];
    int arrayvar = 0;
    int finishedarray;
    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    int g;
    int h;
    int i;
    int j;
    // Constants
    int variable1 = 0;
    int variable2 = 1;
    int variable3 = 2;
    int variable4 = 3;
    int variable5 = 4;
    int variable6 = 5;
    int variable7 = 6;
    int variable8 = 7;
    int variable9 = 8;
    int variable10 = 9;


    for (a = 0; a < 36; a++)
    {
        switch (a)
        {
        case 0:
            bigfor[variable1] = '0';
            break;
        case 1:
            bigfor[variable1] = '1';
            break;
        case 2:
            bigfor[variable1] = '2';
            break;
        case 3:
            bigfor[variable1] = '3';
            break;
        case 4:
            bigfor[variable1] = '4';
            break;
        case 5:
            bigfor[variable1] = '5';
            break;
        case 6:
            bigfor[variable1] = '6';
            break;
        case 7:
            bigfor[variable1] = '7';
            break;
        case 8:
            bigfor[variable1] = '8';
            break;
        case 9:
            bigfor[variable1] = '9';
            break;
        }
        thearray[arrayvar] = bigfor[variable1] + bigfor[variable2] + bigfor[variable4] +
                             bigfor[variable5] + bigfor[variable6] + bigfor[variable7] + 
                             bigfor[variable8] + bigfor[variable9] + bigfor[variable10];

        arrayvar = arrayvar + 1;
    }
    finishedarray = arrayvar + 1;
    ofstream myfile;
    myfile.open("codes.txt");
    for (arrayvar = 0; a < finishedarray; a++)
    {
        myfile << thearray[arrayvar] << endl;
    }
    myfile.close();
    return 0;
}

一个问题是您在这里读取未初始化的值:

thearray[arrayvar] = bigfor[variable1]+ bigfor[variable2] + bigfor[variable4] +
bigfor[variable5] + bigfor[variable6] + bigfor[variable7] + bigfor[variable8] + 
bigfor[variable9] + bigfor[variable10];

这是未定义的行为。在程序的这一点上,只有bigfor[variable1]被初始化。

无论你想做什么,我都觉得有一种更简单的方法。

问题在于您正在进行的添加。加法只会将ASCII字符的整数编码值相加,并产生一个整数。这将导致错误,因为您无法将整数分配给std::string

除了@juancopanza的回答之外,您的代码还可以得到实质性的改进。例如,您可以在For循环中这样做,而不是手动列出索引:

std::string bigfor;
for (int a = 0; a < 36; ++a)
{
    bigfor += (a + 48);
}
std::ofstream myfile("codes.txt");
for (int i = 0; i < bigfor.size(); ++i)
{
    myfile << bigfor[i] << std::endl;
}