2016-04-20 19 views
0

Hallo, ich bin Student des ersten Jahres das ist, warum ich Probleme mit solchen einfachen Aufgabe habe. Ich arbeite derzeit auf Matrix-Rechner aber in dem sehr Betteln aufgetreten ich einige Probleme mit dem Lesen Zahl aus einer Textdatei und drucke auf dem Bildschirm Hier ist mein Code:C++ Lesen von Zahlen aus einer Textdatei in ein Array

#include <iostream> 
#include <fstream> 
#include <cstdlib> 

using namespace std; 
int main() 
{ 
    ifstream infile; 
    infile.open("matrix.txt", ios::in); 
    //check for an error 
    if(infile.fail()) 
    { 
     cerr<<"Error opening file"; 
     exit(0); 
    } 
    //char sign; 
    int n = 0; 
    double matrix[n]; 
    while(!infile.fail()) 
    { 
     infile >> matrix[n]; 
     n++; 
     //if(infile.eof()) {break;} 
    } 

infile.close(); 


    for(int i = 0;i<9;i++) 
    { 
     cout << matrix[i]<<endl; 
    } 
return 0; 
} 

In der Verknüpfung über das gesamte Programm es soll aus einer Textdatei lesen und eine Determinante von 2x2 Matrix oder 3x3 Matrix berechnen. Wenn Sie mir irgendwelche Ideen geben können, die in der Zukunft nützlich sein werden, zum Beispiel wie ich prüfen kann, ob die Zeile in der Textdatei beendet ist, würde ich dankbar sein. Aber meistens möchte ich wissen, was ich falsch mache. Danke von oben.

+0

Was ist das Problem mit diesem Code? –

+1

doppelte Matrix [n] ist falsch ... seit n = 0, war dieser Code kompilierend – Varun

Antwort

0

Betrachten Sie die folgenden Zeilen Ihres Codes.

int n = 0; 
double matrix[n]; 
while(!infile.fail()) 
{ 
    infile >> matrix[n]; 
    n++; 
    //if(infile.eof()) {break;} 
} 

Sie müssen die Dokumentation Ihres Compilers lesen, um festzustellen, ob er Arrays variabler Länge unterstützt. Sie sind nicht in Standard-C++ erlaubt, also wenn Sie möchten, dass Ihr Programm portabel ist, müssen Sie aufhören, sie zu benutzen.

Zweitens, Sie reservieren ein Array der Größe 0, die nicht erlaubt ist (wieder könnte Ihr Compiler es als ein nicht-Standard-Feature zulassen). Wenn die Größe matrixn ist, wird matrix[n] überlaufen.

Viertens, das Überprüfen des Fehlerbits vor dem Extrahieren des Werts mit infile >> matrix[n] ist eine schlechte Idee. An einem bestimmten Punkt möchten Sie herausfinden, wie viele gültige Werte Sie gelesen haben. Sie werden feststellen, dass es einfacher ist, nach der Extraktion zu testen, ob die Extraktion erfolgreich war.

+0

Vielen Dank für all Ihre Tipps, ich mache immer noch einen Ton von Fehlern. Das Programm begann ordnungsgemäß zu funktionieren –