我使用.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;
}
答案 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个指针。