我想知道是否有任何方法可以使用main调用另一个函数来打开argv []中包含的文件。我主要有两个功能。一个叫做ReadMaze(它会在文本文件中读取并进行错误检查)。另一个叫PrintMaze,这个打印出沿着另一个函数内部读取的迷宫边框。那么我需要做的是能够打开txt文件并让它实际上能够通过它们并打印出来。
添加了代码以显示功能及其正在执行的操作。
#include <stdio.h>
#include <stdlib.h>
typedef struct QQNode {
} QUEUE;
//typedef QUEUE *PQQNode;
typedef struct CEnode {
char cglyph;
char cDir;
short fVisible; //boolean
int iDistance; //not needed
QUEUE *pQXnext;
} CELL;
typedef struct MQnode {
CELL **ppCE;
int iRows, iCols, iGoals, iStarts;
} MAZE;
MAZE *ReadMaze(FILE *fpInput) {
int j, k, c, g, s;
MAZE *pMQRet;
if ((MAZE *)0 == (pMQRet = malloc(sizeof(MAZE)))) {
exit(-1);
}
if (2 != fscanf(fpInput, " %d,%d\n", &pMQRet->iRows, &pMQRet->iCols)) {
exit(-1);
}
if (2 > pMQRet->iRows || 2 > pMQRet->iCols) {
exit(-1);
}
if ((CELL **)0 == (pMQRet->ppCE = malloc(sizeof(CELL *) * pMQRet->iRows))) {
exit(-1);
}
// initialize goals and starts
for (g = 0; g < pMQRet->iRows; g++) {
//Trying to initialize the starts and goals right here
}
for (j = 0; j < pMQRet->iRows; j++) {
if ((CELL*)0 == (pMQRet->ppCE[j] = malloc(sizeof(CELL) * pMQRet->iCols + 1))) {
exit(-1);
}
for (k = 0; k < pMQRet->iCols + 1; k++) {
if (EOF == (c = fgetc(fpInput))) {
exit(-1);
}
pMQRet->ppCE[j][k].cglyph = c;
}
}
return pMQRet;
}
void PrintMaze(FILE *fpout, MAZE *pMQThis) {
int j, k, l;
CELL *pCE;
if ((MAZE *)0 == pMQThis) {
exit(EXIT_FAILURE);
}
for (l = 0; l < pMQThis->iCols + 2; l++) {
fputc('-', fpout);
}
for (j = 0; j < pMQThis->iRows; j++) {
pCE = pMQThis->ppCE[j];
fputc('|', fpout);
for (k = 0; k < pMQThis->iCols; k++) {
fputc(pCE[k].cglyph, fpout);
}
fputc('|', fpout);
fputc('\n', fpout);
}
for (l = 0; l < pMQThis->iCols + 2; l++) {
fputc('-', fpout);
}
}
int main(int argc, const char *argv[]) {
} // end of main
答案 0 :(得分:0)
您可以从main
调用任何函数并传递单个命令行参数argv[i]
或数组本身argv
,甚至是指向其中一个元素的指针。只需定义函数以采用适当的参数类型。
可以通过这种方式从main
调用您的函数:
#include <errno.h>
int main(int argc, char *argv[]) {
FILE *fpin = stdin;
FILE *fpout = stdout;
MAZE *maze;
if (argc > 1) {
fpin = fopen(argv[1], "r");
if (fpin == NULL) {
fprintf(stderr, "cannot open input file %s: %s\n", argv[1], strerror(errno));
exit(1);
}
}
if (argc > 2) {
fpout = fopen(argv[2], "w");
if (fpout == NULL) {
fprintf(stderr, "cannot open output file %s: %s\n", argv[2], strerror(errno));
exit(1);
}
}
maze = ReadMaze(fpin);
PrintMaze(fpout, maze);
fclose(fpin);
fclose(fpout);
return 0;
}