c - 我必须将我的数组变成 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
解决方案
对于一项简单的任务,这似乎需要做很多额外的工作。为什么不在收到输入时将数字附加到文本文件中?这减少了中间人和大量代码:
#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 终止”)。如果您需要在内存中维护所有输入,请考虑动态内存分配。
推荐阅读
- ios - iOS swift 中的 OneSpan 示例应用程序理解
- abap - 何时使用 FIELD-SYMBOLS
- python - Python中的多处理for循环在一段时间后停止,程序继续使用单线程运行
- r - 使用 googlesheets4 或任何其他 R 包在 google sheet 中命名工作表版本
- android - 带有复选框的警报对话框
- javascript - ./src/Components/ContactForm.jsx 第 37 行:'sendEmail' 未定义 no-undef
- kubernetes - calico-kube-controllers 和 calico-node 未准备好 (CrashLoopBackOff)
- java - criteriaBuilder.greaterThanOrEqualTo 比较没有时间的日期
- javascript - 当用户完成绘制多边形时如何监听事件?
- c# - 接受 ASP.NET 端点中的 int 或对象