Почему я не могу получить доступ к этим значениям вне цикла for? - PullRequest
0 голосов
/ 09 июня 2018

Я использовал файл .txt (который содержит буквы и цифры в каждой строке) в качестве входных данных.Я помещал эти строки в массив указателей строка за строкой, а затем удалял все буквы в цикле for и помещал все значения в двойной массив, который предназначался для последующего использования в основной программе.Это не работает, хотя.Значения доступны только внутри цикла, если я пытаюсь получить вывод вне цикла, используя cout << Values[0] << endl;, в качестве вывода я ничего не получаю.

Массив "Значения" можно посмотреть, если яиспользуйте cout << Values[i] << endl; внутри цикла for, но я не могу получить к нему доступ вообще за пределами цикла.Как я могу это изменить?Что я не могу получить доступ к значениям?Я попытался переместить значения в массиве указателей, потому что я думал, что это позволит мне получить доступ к этим значениям вне цикла, но это не работает.Я прочитал, что массивы и переменные, объявленные внутри цикла, не доступны вне цикла.Здесь, однако, я объявил двойной массив вне цикла, поэтому для меня нет смысла, что он недоступен вне цикла.

(я хорошо знаю, что этот код действительно неуклюжий ... ноэто [почти] работает)

Мне только что указали, что я должен загрузить сам код, а не его изображение.Итак, вот:

#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 голосов
/ 10 июня 2018

вне цикла for я просто не получаю ничего в качестве вывода ... он даже не отображает 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 указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...