2016-07-05 5 views
-1

ファイルから数値を読み込み、配列内の数字の順序を逆にして逆の数値を別の数値に出力するプログラムを作成しようとしていますファイル。私はすでにファイルにいくつの番号があるのか​​知っていたときにプログラムを動作させることができましたが、私のループをEOF(ファイルの終わり)を検出しようとすると切り替えるのが難しいです。このコードを実行すると、ファイルから2つの数値が出力され、残りはガベージ値になります。どんな助け?ガベージ番号を返す理由が分かりません

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

const int NUMS = 5; 

void reverseArray(int number[], int first, int last) 
{ 
    int temp; 

    if (first >= last) 
    { 
     return; 
    } 

    temp = number[first]; 
    number[first] = number[last]; 
    number[last] = temp; 

    reverseArray(number, first + 1, last - 1); 
} 

int main() 
{ 
    //Create file objects 
    ifstream inputFile; 
    ofstream outputFile; 
    string inputName; 
    string outputName; 

    //Prompt user for file names 
    cout << "What is the name of the input file?" << endl; 
    getline(cin, inputName); 

    cout << "What would you like the output file to be called?" << endl; 
    getline(cin, outputName); 

    //open user named files 
    inputFile.open(inputName); 
    outputFile.open(outputName); 

    int numsFromFile; 

    int numbers[NUMS]; 

    int fileCount = 0; 

    /* 
    //read in numbers from a file ********THIS WORKS BUT WHEN I CHANGE IT BELOW IT DOES NOT****** 
    for (int count = 0; count < NUMS; count++) 
    { 
    inputFile >> number[count]; 
    } 
    */ 

    //Try to read numbers in detecting the EOF 
    while (inputFile >> numsFromFile) 
    { 
     inputFile >> numbers[fileCount]; 
     fileCount++; 
    } 

    //print numbers to screen 
    for (int count = 0; count < fileCount; count++) 
    { 
     cout << numbers[count] << endl; 
    } 

    //reverse array 
    reverseArray(numbers, 0, 4); 

    cout << "Reversed is: " << endl; 

    //print reversed array 
    for (int count = 0; count < NUMS; count++) 
    { 
     cout << numbers[count] << endl; 
    } 

    //output numbers to a file 
    for (int count = 0; count < NUMS; count++) 
    { 
     outputFile << numbers[count] << endl; 
    } 

    outputFile.close(); 
    inputFile.close(); 

    return 0; 
} 
+0

本当に配列を逆にする必要はありますか?なぜそれを逆の順序で出力できないのですか? 1,2,3,4を配列に読み込むと、最後から始まり4,3,2,1が出力されます。 –

+0

私は再帰関数を使って練習していますので、これは配列を逆にする再帰関数です –

答えて

2

バグがラインである:

while (inputFile >> numsFromFile) 
{ 
    inputFile >> numbers[fileCount]; 
    fileCount++; 
} 

あなたはそれを変更するなど第一の数、3番目の数、5番目の数を、読み、捨ててしまう:

while (inputFile >> numsFromFile) 
{ 
    numbers[fileCount] = numsFromFile; 
    fileCount++; 
} 
+0

はい!ありがとうございました!あなたが投稿した直前に私は実際にそれを見つけましたが、すばやい返信に感謝します! –

+0

@EvanMace、よろしくお願いします。ハッピーコーディング:) –

関連する問題