2017-10-18 3 views
0

申し訳ありませんが、これは愚かな質問ですが、私はC++を学ぶ初心者のプログラマです。ポインタによる動的配列へのアクセス

私は、入力txtファイルには、各行に最大5つの数字を持つ16行の1-5桁の数字が割り当てられています。 mainに使うfindmax関数を書いて、各行の最大値を別のtxtファイルに出力することになっています。

私のコードには現在のコンパイルエラーはありません。私は、実際にmainでこの関数をどのように利用して出力ファイルに渡すのか、もっと悩んでいます。これが本当にシンプルなら、再び申し訳ありません。すべての

#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を使用してください! –

答えて

0

まず、あなたは、ファイルの読み書きになっているが、あなたはcinを使用したときにcoutあなたが実際に標準入力と出力を使用していると言います。 C++でファイルの読み書きを調べる必要があります。 第2に、findmax関数では、決して使用しない5つの引数を渡しています。また、決して使用しない変数nを宣言します。また、make関数の最後のループも意味をなさない。それぞれの行を別々に読み込み、数値を配列に格納してから、その配列を引数として渡して関数findmaxを使う必要があります。その行の結果を出力ファイルに出力します。

関連する問題