为什么我不能在这个for循环之外访问这些值?

时间:2018-06-09 20:19:26

标签: c++ pointers for-loop

我使用.txt文件(包括每行中的字母和数字)作为输入。我将这些字符串逐行放入指针数组中,然后删除for循环中的所有字母,并将所有值放在一个双数组中,以供稍后在主程序中使用。它不起作用。如果我试图通过使用cout << Values[0] << endl;来获取循环外的输出,则只能在循环内访问值。我没有得到任何输出。

阵列&#34;值&#34;我可以看一下,如果我在for循环中使用cout << Values[i] << endl;,但我无法在循环外部访问它。我怎么能改变它?我无法获取价值观? 我已经尝试重新定位指针数组中的值,因为我认为这将允许我在循环外访问这些值,但它不起作用。 我读到在循环内声明的数组和变量在循环外部是不可访问的。然而,我在循环之外声明了双数组,这就是为什么我无法在循环之外访问它。

(我很清楚这段代码真的很笨拙......但它[几乎]有效)

我刚刚向我指出,我应该上传代码而不是它的图片。所以这里:

#include <iostream>
#include <fstream>
#include <algorithm>
#include <stdlib.h>
using namespace std;

int main()
{
    fstream Projekt;                                        //Einlesen der Daten aus Quelldatei
    Projekt.open("Projekt_1.txt",ios::in);                  //
    char *val[100];                                         //Definition eines Pointer-Arrays
    val[0] = new char[100];                                 //
    int i = 0;                                              //
    while(Projekt.getline(val[i],100))                      //Befüllen des Pointer-Arrays mit den 
    {                                                       //einzelnen Zeilen der Quelldatei
        i++;                                                //
        val[i] = new char[100];                             //
    }                                                       //
    string Val;                                             //
    double Values[100];                                     //Zahlen werden als Double in diese Array gespeichert
    int Anz;
    int Steps;
    double Interv;
    double g;
    double x[100];
    double y[100];
    double vx[100];
    double vy[100];
    char a [53] = {' ','a', 'b', 'c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    for (i = 0; i < 100; i++) {                             // ^ Array a[53] zum löschen der Buchstaben aus der Quelldatei (looks stupid but if it works it aint stupid)
        Val.assign(val[i]);                                 //Werte aus dem Poiter-Array werden in das Val Array übertragen
        for (unsigned int j = 0; j <= 52; j++){             //for-Schleife zum entfernen aller Buchstaben
            Val.erase(remove(Val.begin(),Val.end(),a[j]), Val.end());
        }                                                   //
        const char* Help = Val.c_str();                     //"char" Val wird zu const char* Help
        Values[i] = atof(Help);                             //übertragung von cont char* Help zu Double in "Values"-Array
        Val.clear();
        cout << Values[i] << endl;
    }

1 个答案:

答案 0 :(得分:1)

  在for-loop之外的

我只得到输出...它甚至不显示0或任何

那是因为你的程序只是崩溃了。

你在这里声明了100个指针。

char *val[100];  

你试图在这里初始化那100个指针。

while(Projekt.getline(val[i],100))
{
    i++;
    val[i] = new char[100];
} 

如果Projekt.getline()返回true超过100次,则表示您正在编写数组之外。那是未定义的行为。

如果Projekt.getline()返回true的次数少于100次,则代码会取消引用未初始化的指针。那是未定义的行为。

如果您正在访问100个指针,则必须初始化100个指针。