我使用.txt文件(每行包含字母和数字)作为输入。我将这些字符串逐行放入指针数组中,然后删除for循环中的所有字母,并将所有值放入双精度数组中,以便稍后在主程序中使用。但是它不能工作。只有当我尝试通过使用cout << Values[0] << endl;
在循环外获取输出时,才能在循环内访问这些值。我没有得到任何输出。
如果我在for循环中使用cout << Values[i] << endl;
,就可以查看数组"Values“,但在循环之外根本不能访问它。我如何才能改变这一点?什么是我不能访问的值?我曾尝试重新定位指针数组中的值,因为我认为这将允许我在循环之外访问这些值,但它不起作用。我读到在循环内声明的数组和变量在循环外是不可访问的。然而,在这里我在循环外声明了双精度数组,这就是为什么在循环外无法访问它对我来说毫无意义。
(我很清楚这段代码真的很笨拙...但它几乎是有效的)
刚刚有人向我指出,我应该上传代码本身,而不是它的照片。所以这里是这样的:
#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;
}
发布于 2018-06-10 06:19:52
在
循环之外,我没有得到任何输出...它甚至不会显示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个指针。
https://stackoverflow.com/questions/50778193
复制相似问题