首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我不能在这个for循环之外访问这些值?

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

Stack Overflow用户
提问于 2018-06-10 04:19:26
回答 1查看 220关注 0票数 -3

我使用.txt文件(每行包含字母和数字)作为输入。我将这些字符串逐行放入指针数组中,然后删除for循环中的所有字母,并将所有值放入双精度数组中,以便稍后在主程序中使用。但是它不能工作。只有当我尝试通过使用cout << Values[0] << endl;在循环外获取输出时,才能在循环内访问这些值。我没有得到任何输出。

如果我在for循环中使用cout << Values[i] << endl;,就可以查看数组"Values“,但在循环之外根本不能访问它。我如何才能改变这一点?什么是我不能访问的值?我曾尝试重新定位指针数组中的值,因为我认为这将允许我在循环之外访问这些值,但它不起作用。我读到在循环内声明的数组和变量在循环外是不可访问的。然而,在这里我在循环外声明了双精度数组,这就是为什么在循环外无法访问它对我来说毫无意义。

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

刚刚有人向我指出,我应该上传代码本身,而不是它的照片。所以这里是这样的:

代码语言:javascript
复制
#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;
    }
EN

回答 1

Stack Overflow用户

发布于 2018-06-10 06:19:52

循环之外,我没有得到任何输出...它甚至不会显示0或其他任何东西

这是因为你的程序正在崩溃。

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

代码语言:javascript
复制
char *val[100];  

您尝试在这里初始化这100个指针。

代码语言:javascript
复制
while(Projekt.getline(val[i],100))
{
    i++;
    val[i] = new char[100];
} 

如果Projekt.getline()返回true的次数超过100次,则是在数组外部写入。这是未定义的行为。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档