2017-10-18 2 views
0

미안하지만 바보 같은 질문인데 C++을 배우는 초보 프로그래머입니다.포인터를 통한 동적 배열 액세스

필자는 입력 txt 파일에 각 행에 5 개의 숫자가 최대 인 1-5 자리 숫자의 16 줄을 제공하는 과제가 있습니다. main에 사용하는 findmax 함수를 작성하여 각 행의 최대 숫자를 다른 txt 파일로 출력해야합니다.

내 코드에 현재 컴파일 오류가 없습니다. 실제로이 기능을 메인에서 실제로 활용하고 출력 파일에 전달하는 방법에 좀 더 신경을 썼습니다. 이것이 정말로 간단하다면 다시 미안. 모든

#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 (Variable Length Array)를 생성합니다. 인터넷에서 "C++ array dynamic memory new"를 검색하십시오. –

+0

std :: vector를 사용하십시오! –

답변

0

먼저 당신은 당신이 읽고 파일에 쓰기로되어있다하지만 cin를 사용할 때 cout 실제로 표준 입력과 출력을 사용하는 말. C++로 파일을 읽고 쓰는 방법을 살펴 봐야합니다. 두 번째로, findmax 함수에서는 결코 사용하지 않는 5 개의 인수를 전달하며 사용하지 않는 변수 n도 선언합니다. 또한 make 함수의 끝에있는 루프는 의미가 없습니다. 개별적으로 각 행을 읽고 배열에 숫자를 저장 한 다음 해당 배열을 인수로 전달하는 findmax 함수를 사용해야합니다. 그런 다음 해당 행에 대한 결과를 출력 파일에 출력합니다.

관련 문제