2016-08-02 38 views
0

Ich versuche, ein Programm für einen Caesar Cipher zu schreiben, und gerade arbeite ich an der Funktion, um den Schlüssel zu finden, um die Chiffre zu verschieben.Problem beim Lesen von Dateien durch Funktion

Nun stellt sich das Problem, dass, während es die Datei liest, das Programm bricht und ich den Fehler:

Ausnahme bei 0x89012914 in ConsoleApplication11.exe geworfen“: 0xC0000005:. Zugriffsverletzung Ausführung Lage 0x89012914 Wenn ist ein Handler für diese Ausnahme, das Programm kann sicher fortgesetzt werden. "

Hier ist der Code, den ich bisher habe, gibt es etwas offensichtlich, dass ich übersehe?

int findKey(string& file); 

int main() 
{ 

    string inputFileName; 


    cout << "Input file name: "; 
    getline(cin, inputFileName); 

    findKey(inputFileName); 




} 

int findKey(string& file) 
{ 
    string reply; 
    ifstream inFile; 
    char character; 
    int count[26] = { 0 }; 
    int nGreatest = 0; 

    inFile.open(file.c_str()); 

    if (!inFile.is_open()) 
    { 
     cout << "Unable to open input file." << endl; 
     cout << "Press enter to continue..."; 
     getline(cin, reply); 
     exit(1); 

    } 

    while (inFile.peek() != EOF) 
    { 
     inFile.get(character); 
     cout << character; 

     if (int(character) >= 65 || int(character) <= 90) 
     { 
      count[(int(character)) - 65]++; 
     } 
     else if (int(character) >= 97 || int(character) <= 122) 
     { 
      count[(int(character)) - 97]++; 
     } 
    } 

    for (int i = 0; i < 26; i++) 
    { 
     if (count[i] > nGreatest) 
      nGreatest = count[i]; 

    } 

    cout << char(nGreatest) << endl; 

    return 0; 
} 
+0

[Schauen Sie sich das an] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – Rakete1111

Antwort

1
if (int(character) >= 65 || int(character) <= 90) 

Da ein Newline-Zeichen, ist '\n'ASCII 10, die auf 90 kleiner oder gleich ist, diese if Aussage wahr ausgewertet wird, und ...

count[(int(character)) - 65]++; 

.. Versuchen Sie, count[10-65] oder count[-55] zu erhöhen. Von diesem Punkt an gehen die Dinge ziemlich verloren (da jedes Zeichen entweder mindestens 65 oder weniger als oder gleich 90 ist, wird dies immer auf true ausgewertet).

P.S. Ich brauchte nur ein paar Minuten, um diesen Fehler zu finden, indem ich einen Debugger benutzte, indem ich den Code Zeile für Zeile durchging (ich konnte ihn nicht sofort selbst sehen) und alle Variablen untersuchen. Sie sollten etwas Zeit investieren, um zu lernen, wie Sie mit Ihrem Debugger arbeiten. Erleichtert das Finden eigener Bugs, ohne fremde Fremde auf Hilfe zu bitten.

+0

Okay, das macht sehr viel Sinn , würde es jetzt von einem OR zu einem UND ändern, um das Problem zu beheben? – WittyUsernameHere

+0

Nun, hast du es versucht, und wenn nicht, warum nicht? Sie benötigen keine Erlaubnis, Ihren eigenen Code zu ändern und zu überprüfen, ob er korrekt funktioniert. –