2015-09-08 111 views
1

這個賦值要求使用3個輸入文件和3個輸出文件,但現在我只嘗試一個。該程序應該包含一個函數模板,用於按升序對數組值進行排序。該函數將接收一個無序數組並返回一個有序數組。該功能不應該執行任何輸入或輸出。C++輸入輸出排序

我的代碼中存在如下所示:

#include <iostream> 
#include <iostream> 
#include <fstream> 
using namespace std; 

ifstream inNumbers("intTestRead.txt"); 
ofstream outNumbers("intTestWrite.txt"); 

template<typename int[], typename int> void SelectionSort(int[], int); 
void SelectionSort(int v[], int n) 
{ 
    int iMin; 
    for (int i = 0; i < n - 1; i++) 
    { 
     iMin = i; 
     for (int j = i + 1; j < n; j++) 
     { 
      if (v[j] < v[iMin]) 
      { 
       iMin = j; 
      } 
     } 
    int aux = v[i]; 
    v[i] = v[iMin]; 
    v[iMin] = aux; 
    } 
} 

void main() 
{ 
    int data[100]; 
    int i; 
    int length = 0; 

    if (!inNumbers) 
     cerr << "intTestRead.txt file could not be opened" << endl; 

    for (i = 0; i < 100 && inNumbers; ++i) 
    { 
     inNumbers >> data[i]; 
     if (inNumbers) 
     { 
      length += 1; 
     } 

     SelectionSort(data, length); 
     outNumbers << data[i] << endl; 
    } 
} 

我主要程序在Java中,現在纔剛剛開始C++混淆了我使用模板和諸如此類的東西。排序功能是由教授給我們的。我的閱讀文件看起來像這樣:

65 40 84 9 79 90 71 93 39 44 

它應該是這樣的:

9 39 40 44 65 71 79 84 90 93 

但看起來是這樣的:

65 
65 
84 
84 
84 
90 
90 
93 
93 
93 
-858993460 

^^我知道,因爲我使用ENDL導致新行,但相同數字+ -85的多次遞歸正在讓我失望。任何幫助將不勝感激。

+0

** C++不是Java。**除非必要,否則不要使用'new'。 'main'函數總是返回** int ** **。 –

+0

有很多關於閱讀數字的例子,請嘗試搜索「stackoverflow C++讀取文件」。 –

+1

你應該首先閱讀所有的數字,然後一旦閱讀,你排序的數字。你的代碼似乎是讀取第一個數字,排序,讀取下一個數字,排序兩個數字等。所以它看起來像一個基本的邏輯問題,而不是知道Java和不知道C++之間的問題。 – PaulMcKenzie

回答

0

每次輸入後都不要調用排序功能。只需在所有輸入準備就緒時調用它。

是這樣的:

void main() 
{ 
    int data[100]; 
    int i; 
    int length = 0; 

    if (!inNumbers) 
     cerr << "intTestRead.txt file could not be opened" << endl; 

    for (i = 0; i < 100 && inNumbers; ++i) 
    { 
     inNumbers >> data[i]; 
     if (inNumbers) 
     { 
      length += 1; 
     } 
    } 

    SelectionSort(data, length); 

    for (i = 0; i < length; ++i) 
    { 
     outNumbers << data[i] << endl; 
    } 
} 
+0

返回 -858993460 -858993460重複發生。 – Haegely

+0

對於調試,您可以在讀取輸入文件中的值之後添加'cout << data [i] <<「」;'。這些是正確的嗎? – 4386427

0

看着它再次,並用於替代:

#include <iostream> 
#include <iostream> 
#include <fstream> 
#define NUMBERS 10 
using namespace std; 

ifstream inNumbers("intTestRead.txt"); 
ofstream outNumbers("intTestWrite.txt"); 

template <class T> 
void Swap(T& A, T& B) 
{ 
    T temp; 

    temp = A; 
    A = B; 
    B = temp; 
} 

template <class T> 
void SelectionSort(T A[], int N) 
{ 
    T min; 
    int j, k, minIndex; 

    for (k = 0; k < N; k++) { 
     min = A[k]; minIndex = k; 
     for (j = k + 1; j < N; j++) { 
      if (A[j] < min) { min = A[j]; minIndex = j; } 
     } 
     Swap(A[k], A[minIndex]); 
    } 
} 

void main() 
{ 
    int data[100]; 
    int i = 0; 

    if (!inNumbers) 
     cerr << "intTestRead.txt file could not be opened" << endl; 

    for (i = 0; i < NUMBERS && inNumbers; ++i) 
    { 
     inNumbers >> data[i]; 
    } 

    SelectionSort(data, NUMBERS); 

    for (int i = 0; i < NUMBERS; ++i) 
     outNumbers << data[i] << endl; 
} 

輸入:

65 
40 
84 
9 
79 
90 
71 
93 
39 
44 

輸出:

9 
39 
40 
44 
65 
71 
79 
84 
90 
93