코딩 과제 중 질문입니다
글쓴이: 익명 사용자 / 작성시간: 금, 2017/04/28 - 4:36오후
알고리즘 코딩 과제를 진행중입니다.
Visual C++ 컴파일 시 바로 실행할 수 있게 하라는데 바로 실행할 시 input할 텍스트파일을 읽어와야 합니다.
파일을 어느 폴더에서 읽어오는 지를 몰라서 이 환경에서 테스트를 못해보고 있습니다.
해당 프로젝트 폴더의 .exe가 들어있는 debug 폴더에 텍스트 파일을 넣어봐도 읽지 못하고,
심지어 debug폴더 안의 .exe파일을 실행하면 읽고 수행은 되지만 output.txt가 빈 파일로 출력됩니다.
C:\test 를 임시로 만들고 거기다 .exe를 넣고 돌리니까 정상 출력이 됩니다.
Q 1. VB 컴파일 수행 시 어느 폴더에서 파일을 읽어올 수 있는지 궁금합니다.
실행자가 input 파일 이름을 직접 입력한다는 조건도 붙어있어서 코드는 이렇습니다.
printf("input file name? ");
scanf("%s", input_str);
input_file = fopen(input_str, "r");
if (input_file == NULL)
{
fprintf(stderr, "File %s not found\n", input_str);
return 0;
}Q 2. debug 폴더에서는 왜 수행해도 output.txt 가 공백파일인지 모르겠습니다.
코드 원문입니다.
#include <stdio.h>
#include <malloc.h>
#define INFY 987654321;
FILE *input_file, *output_file;
int **M, **P;
int** array_malloc(int n)
{
int** array;
int i, j;
/* array allocate */
array = (int**) malloc(0);
for (i = 0; i <= n; i++)
array[i] = (int*) malloc(sizeof(int) * n);
/* init array */
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
array[i][j] = 0;
return array;
}
void print_order(int i, int j)
{
int n;
if (i == j)
fprintf(output_file, "A%d ", i);
else
{
n = P[i][j];
fprintf(output_file, "( ");
print_order(i, n);
print_order(n + 1, j);
fprintf(output_file, " )");
}
}
void minmult(int n, int* d)
{
int i, j, k, q;
M = array_malloc(n);
for (i = 1; i <= n; i++)
{
for (j = i + 1; j <= n; j++)
{
M[i][i] = 0;
M[i][j] = INFY;
}
}
for (i = n; i > 0; i--)
{
for (j = i; j <= n; j++)
{
if (i == j)
M[i][j] = 0;
else
{
for (k = i; k < j; k++)
{
q = M[i][k] + M[k+1][j] + d[i-1] * d[k] * d[j];
if (q < M[i][j])
{
M[i][j] = q;
P[i][j] = k;
}
}
}
}
}
}
int main()
{
char input_str[100];
int *d;
int input, n, k;
printf("input file name? ");
scanf("%s", input_str);
input_file = fopen(input_str, "r");
if (input_file == NULL)
{
fprintf(stderr, "File %s not found\n", input_str);
return 0;
}
output_file = fopen("output.txt", "w");
fscanf(input_file, "%d", &input);
n = input - 1;
d = (int*) malloc(sizeof(int) * n);
for (k = 0; k < n; k++)
{
if (fscanf(input_file, "%d", &d[k]) == -1)
{
d[k] = 0;
n = k - 1;
break;
}
}
P = array_malloc(n);
minmult(n, d);
print_order(1, n);
fclose(input_file);
fclose(output_file);
return 0;
}Forums:

프로그램을 exe 파일을 실행시키면 exe파일이 있는
프로그램을 exe 파일을 실행시키면 exe파일이 있는 경로가 기본 경로가 됩니다. 따라서 입출력 할 파일명을 입력하면 exe 파일이 있는 곳으로 입출력을 수행합니다.
만약 visual studio로 실행했을 경우 vcxproj 파일이 있는 곳이 기본 경로가 됩니다. 따라서 입출력할 파일명을 입력하면 vcxproj 파일이 있는 곳으로 입출력을 수행합니다.