0

ファイル表記とコマンドラインステートメントを使用して、ファイルから入力を取得し、入力を構造体に入力し、入力を別のファイルに保存するプログラムを作成しています。ソート機能もありますが、私の問題とは無関係だと思うので省略しました。ファイル表記を使用するのは初めてで、出力ファイルに出力を取得できません。理由についてのアイデアはありますか?私はすべてを試しましたが、うまくいきません。助けてくれてありがとう。

/* structure declaration */
struct personCatalog {
    char name[50];
    char address[50];
    char cityState[50];
    char zipCode[7];
} ;

/* function prototypes */
void getPerson (struct personCatalog *arrayOfPointers[], int maxNumberOfPeople, FILE      *inputFile);

void sortPerson (struct personCatalog *arrayOfPointers[]);

void putPerson(struct personCatalog *arrayOfPointers[], FILE *outputFile);


int main(int argc, const char * argv[]) {

    int maxNumberOfPeople = 51;

    struct personCatalog *pointerArray[maxNumberOfPeople];


    /* add file streaming*/

    FILE *inFile, *outFile;

    inFile = fopen("/Users/myName/Desktop/inputText.txt", "r");

    /* add command line statements */
    if (( inFile = fopen(argv[1], "r")) == NULL) {
        printf("Can't open the input file");
        exit(1);
    }

    getPerson(pointerArray, maxNumberOfPeople, inFile);

    sortPerson(pointerArray);

    outFile = fopen("/Users/myName/Desktop/outputText.txt", "w");

    if ((outFile = fopen(argv[2], "w")) == NULL) {
        printf("Can't open the output file");
        exit(1);
    }

    putPerson(pointerArray, outFile);

    fclose(inFile);
    fclose(outFile);

    return 0;

}

/* function to fill the structures */
void getPerson (struct personCatalog *arrayOfPointers[], int maxNumberOfPeople, FILE *inputFile){
    struct personCatalog *tempPointer;
    int buffer = 512;
    char stringCollector[buffer];
    int num = 0;


    while ((num < maxNumberOfPeople) && (fgets(stringCollector, buffer, inputFile) != NULL) ) {

        /* dynamic memory allocation */
        tempPointer = (struct personCatalog *) malloc(sizeof(struct personCatalog));

        /* filling the structures */
        strcpy(tempPointer->name, stringCollector);
        fgets(tempPointer->address, buffer, inputFile);
        fgets(tempPointer->cityState, buffer, inputFile);
        fgets(tempPointer->zipCode, buffer, inputFile);

        arrayOfPointers[num] = tempPointer;

        num++;
    }

    /* adding a null character to the end of the pointer array */
    arrayOfPointers[num] = '\0';
}

    /* print function */
void putPerson(struct personCatalog *arrayOfPointers[], FILE *outputFile){

    int num = 0;

    while (arrayOfPointers[num] != NULL) {
        printf("------Person #%d------\n", num);
        fputs(arrayOfPointers[num]->name, outputFile);
        fputs(arrayOfPointers[num]->address, outputFile);
        fputs(arrayOfPointers[num]->cityState, outputFile);
        fputs(arrayOfPointers[num]->zipCode, outputFile);

        /* memory free */
        free(arrayOfPointers[num]);

        num++;
    }

}
4

1 に答える 1

0

メインの正しいコード

int main(int argc, const char * argv[]) {

int maxNumberOfPeople = 51;

struct personCatalog *pointerArray[maxNumberOfPeople];


/* add file streaming*/

FILE *inFile, *outFile;

if (argc != 3) {
    printf("Usage: /Users/myName/Library/Developer/Xcode/DerivedData/progarmName-cglrwvyyabrneocwtllxqdhygaaj/Build/Products/Debug/progarmName /Users/myName/Desktop/inputText.txt /Users/myName/Desktop/outputText.txt\n");
    exit(1);
}


/* add command line statements */
if (( inFile = fopen(argv[1], "r")) == NULL) {
    printf("Can't open the input file");
    exit(1);
}

getPerson(pointerArray, maxNumberOfPeople, inFile);

sortPerson(pointerArray);


if ((outFile = fopen(argv[2], "w")) == NULL) {
    printf("Can't open the output file");
    exit(1);
}

putPerson(pointerArray, outFile);

fclose(inFile);
fclose(outFile);

return 0;

}
于 2012-12-03T00:04:21.847 に答える