2017-10-18 156 views
0

對不起,如果這是一個愚蠢的問題,但我是一個學習C++的新手程序員。通過指針訪問動態數組

我有一個任務,其中輸入的txt文件提供16行1-5位數字,每行最多5個數字。我們應該編寫一個函數findmax在main中使用,以將每行中的最大數字輸出到另一個txt文件中。

我的代碼沒有當前編譯錯誤我更堅持如何在main中實際使用此函數並將其傳遞到outout文件。對不起,如果這真的很簡單。所有的

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

int *make(int n) 
{ 
#if 0 
    int *a = new int[n]; 
#else 
    int a[n]; 
#endif 
    for(int i=0; i < n; ++i) a[i] = i; 

    return a; 
} 

int findmax(int x1,int x2,int x3,int x4, int x5) 
{ 
    for(int i=0;i<5;i++) 
    { 
     int n, temp; 
     int a[i]; 
     if(a[i]>temp) 
      temp=a[i]; 
     return temp; 
    } 

} 
int main() 
{ 
    int n; 
    int x1, x2, x3, x4, x5, y1, y2, y3, y4, y5; 
    cout << "Enter number of lines n in the input file." << endl; 
    cin >> n; 
    int *a = make(n); 

    for(int i = 0; i < n; ++i) cout << a[i] << " "; cout << endl; 

    ifstream infile; infile.open("/home/labs/lab4/lab4_input.txt"); 
    ofstream outfile; outfile.open("/home/labs/lab4/lab4_output.txt"); 
    if(!infile.is_open()) cout << "open infile failed\n"; 

    infile >> x1 >> x2 >> x3 >> x4 >> x5; 
    findmax(x1, x2, x3, x4, x5); 
    outfile << y1 << " " << y2 << " " << y3 << " " << y4 << " " << y5 << endl; 
    infile.close(); 
    outfile.close(); 
    return 0; 
} 
+2

你需要破解你的C++教科書並閱讀關於數組的章節。這個網站不能教你這樣的基本概念。你的程序純粹意外編譯(因爲你使用錯誤的編譯標誌)。 –

+1

在你的'make'函數中,int a [n];是創建一個不是標準C++語言一部分的可變長度數組(VLA)。在互聯網上搜索「C++ array dynamic memory new」。 –

+0

使用std :: vector! – 2017-10-18 20:13:38

回答

0

首先,你說你應該讀取和寫入到文件中,但是當您使用cincout你實際上是使用標準的輸入和輸出。你需要研究閱讀和寫入C++文件。 其次,在findmax函數中,您傳遞了5個參數,您從不使用它們,並且還聲明瞭一個永遠不會使用的變量n。此外,make函數末尾的循環也沒有意義。您需要分別讀取每行,將數字存儲在數組中,然後使用將該數組作爲參數的函數findmax。然後在輸出文件中輸出該行的結果。