首页 > 解决方案 > 我必须将我的数组变成 3d 数组吗?

问题描述

我正在创建一个具有以下所需输出的程序:

在此处输入图像描述

我想看看我是否走在正确的轨道上。我的目标是将所有三个数字输入写入一个数组,然后写入 .dat 文件。

我是否需要像这样创建一个 3d 矩阵:numbers[3][5]

如果我这样做,我会遇到一个问题,即我在正确存储、写入和打印数组时遇到很多困难,看起来像下面的结果。不过没关系,如果是这样,我可以自己研究。我只是在寻找一点点方向。

我当前的工作代码:

#include <stdio.h>
#include <stdlib.h>

// function prototypes
void writeToDat(int numbers[5]);
void writeToArray(int number, int numbers[5]);
void displayArray(int numbers[5]);
int getNumber(int number);

// begin main function
int main(void){

    int number;
    int numbers[5]={0,0,0,0,0};

    number = getNumber(number);
    writeToArray(number, numbers);
    displayArray(numbers);
    writeToDat(numbers);

    return 0;

} // end main function

void displayArray(int numbers[5]){

    int i=0;

    for (i=0;i<5;i++){
        printf("%d ", numbers[i]);
    }

} // end displayArray function

// function which gets the array ready to go
void writeToArray(int number, int numbers[5]){

    int i=0;
    int j=0;
    int count=1;

    for(j=0;j<5;j++)
    {
        numbers[j] = (number*count) ;
        count++;

    }

} // end function writeToArray

int getNumber(int number){

    number = 0;

    printf("Please enter a number (0 to terminate): ");
    scanf("%d", &number);

    return number;
} // end function getNumber

// function which writes the current array into the .dat file
void writeToDat(int numbers[5]){

    FILE *file;
    file = fopen("question4.dat","w");
    if(file == NULL)
    {
        printf("question3.dat cannot be opened!\n");
        fprintf(stderr, "Error opening the fil!\n");
    } 

    else{

    int j=0;

        for(j=0;j<5;j++){
            fprintf(file, "%d ,", numbers[j]);
        }
    }
    fclose(file);

} // end function writeToDat

这是我在寻求帮助之前对 3D 阵列的尝试。

#include <stdio.h>
#include <stdlib.h>

// function prototypes
void writeToDat(int numbers[3][5]);
void writeToArray(int number, int numbers[3][5], int *arrayCount);
void displayArray(int numbers[3][5]);
int getNumber(int number, int *arrayCount);

// begin main function
int main(void){

    int number;
    int numbers[3][5];
    int * arrayCount=0;

    number = getNumber(number, arrayCount);

    writeToArray(number, numbers, arrayCount);
    arrayCount++;

    number = getNumber(number, arrayCount);

    writeToArray(number, numbers, arrayCount);
    arrayCount++;

    displayArray(numbers);
    writeToDat(numbers);

    return 0;

} // end main function

void displayArray(int numbers[3][5]){

    int i=0;
    int j=0;


    for (i=0;i<3;i++){
        for (j=0;j<5;j++){

        printf("%d ", numbers[i][j]);
            }printf("\n");
    }

} // end displayArray function

// function which gets the array ready to go
void writeToArray(int number, int numbers[3][5], int *arrayCount){

    int i=0;
    int j=0;
    int count=1;

    for (i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
        numbers[i][j] = (number*count)  ; 
        count++;
    }
    }
} // end function writeToArray

int getNumber(int number, int *arrayCount){


    number = 0;

    printf("Please enter a number (0 to terminate): ");
    scanf("%d", &number);

    return number;
} // end function getNumber

// function which writes the current array into the .dat file
void writeToDat(int numbers[3][5]){

    FILE *file;
    file = fopen("question4.dat","w");
    if(file == NULL)
    {
        printf("question3.dat cannot be opened!\n");
        fprintf(stderr, "Error opening the fil!\n");
    } 

    else{

    int j=0;
    int i=0;
        for(i=0;i<3;i++){

        for(j=0;j<5;j++){
            fprintf(file, "%d ,", numbers[i][j]);
        }
            }
    }
    fclose(file);

} // end function writeToDat

标签: carraysfunction

解决方案


对于一项简单的任务,这似乎需要做很多额外的工作。为什么不在收到输入时将数字附加到文本文件中?这减少了中间人和大量代码:

#include <stdio.h>

int main() {
    FILE *file = fopen("question4.dat","w");
    int n, i;

    for (;;) {
        printf("Please enter a number (0 to terminate): ");
        scanf("%d", &n);

        if (n == 0) {
            break;
        }

        for (i = n; i <= 5 * n; i += n) {
            fprintf(file, "%d ", i);
        }

        fprintf(file, "\n");
    }

    fclose(file);
    return 0;
}

样品运行:

Please enter a number (0 to terminate): 3
Please enter a number (0 to terminate): 5
Please enter a number (0 to terminate): 2
Please enter a number (0 to terminate): 0
$ cat *.dat
3 6 9 12 15
5 10 15 20 25
2 4 6 8 10

值得注意的是,这numbers[3][5]是一个 2d 数组而不是 3d 数组(那是numbers[][][])。

如果您仍然选择阵列方法,请考虑重新设计。您提出的 2d 程序完全基于硬编码数组大小 3。您可能需要覆盖这些数组以履行您的 UI 做出的承诺(“0 终止”)。如果您需要在内存中维护所有输入,请考虑动态内存分配。


推荐阅读