我正在尝试编写一个程序,允许用户将正整数输入到一个12的一维数组中,并捕获小于1的输入,然后程序将值小于30的整数复制到第二个三维数组中,同时将值大于或等于30的整数复制到第三个三维数组中。
它将以表格形式显示三个数组。程序将使用三个数组,1个单数组和2个三维数组。
我是这么做的:
#include <stdio.h>
#define N 12
int main() {
int a[N], b[2][2][3], c[2][2][3];
int i, j, k, l;
for(i = 0; i < N; i++){
printf("Input %d: ", i);
scanf("%d", &a[i]);
if(a[i] < 30){
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
b[j][k][l] = a[i];
}
}
}
}
if(a[i] >= 30){
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
c[j][k][l] = a[i];
}
}
}
}
while(a[i] < 1){
if (a[i] < 5){
printf("\nInvalid Input\nEnter 1 or greater than 1 only\n\n");
printf("Input %d: ", i);
scanf("%d", &a[i]);
if(a[i] < 30){
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
b[j][k][l] = a[i];
}
}
}
}
if(a[i] >= 30){
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
c[j][k][l] = a[i];
}
}
}
}
}
}
}
printf("\nArray 1: \n");
for(i = 0; i < N; i++)
printf("a[%d] = %d \n", i, a[i]);
printf("\n\nArray with less than 30: \n");
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
printf("b[%d][%d][%d] = %d \n", j, k, l, b[j][k][l]);
}
}
}
printf("\n\nArray with greater than or equal to 30: \n");
for(j = 0; j < 2; j++){
for(k = 0; k < 2; k++){
for(l = 0; l < 3; l++){
printf("c[%d][%d][%d] = %d \n", j, k, l, c[j][k][l]);
}
}
}
}
然而,当我试图运行程序时,它显示了错误的值。有人能告诉我我的代码有什么问题吗?谢谢。
编辑:我已将索引更改为从0而非1开始。
当我试着输入这个的时候:
Input 0: 1
Input 1: 2
Input 2: 3
Input 3: 4
Input 4: 5
Input 5: 6
Input 6: 31
Input 7: 32
Input 8: 33
Input 9: 34
Input 10: 35
Input 11: 36
它显示了数组1中所需的结果:
Array 1:
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5
a[5] = 6
a[6] = 31
a[7] = 32
a[8] = 33
a[9] = 34
a[10] = 35
a[11] = 36
但是,在这两个三维数组中,它只显示我输入的最后一个符合条件的整数:
Array with less than 30:
b[0][0][0] = 6
b[0][0][1] = 6
b[0][0][2] = 6
b[0][1][0] = 6
b[0][1][1] = 6
b[0][1][2] = 6
b[1][0][0] = 6
b[1][0][1] = 6
b[1][0][2] = 6
b[1][1][0] = 6
b[1][1][1] = 6
b[1][1][2] = 6
Array with greater than or equal to 30:
c[0][0][0] = 36
c[0][0][1] = 36
c[0][0][2] = 36
c[0][1][0] = 36
c[0][1][1] = 36
c[0][1][2] = 36
c[1][0][0] = 36
c[1][0][1] = 36
c[1][0][2] = 36
c[1][1][0] = 36
c[1][1][1] = 36
c[1][1][2] = 36
我想得到的是在三维数组中"小于30的数组:"显示小于30的ALL
同样在"大于或等于30的数组:"中显示ALL大于或等于30。
就像这样:
Array with less than 30:
b[0][0][0] = 1
b[0][0][1] = 2
b[0][0][2] = 3
b[0][1][0] = 4
b[0][1][1] = 5
b[0][1][2] = 6
b[1][0][0] = 0
b[1][0][1] = 0
b[1][0][2] = 0
b[1][1][0] = 0
b[1][1][1] = 0
b[1][1][2] = 0
Array with greater than or equal to 30:
c[0][0][0] = 31
c[0][0][1] = 32
c[0][0][2] = 33
c[0][1][0] = 34
c[0][1][1] = 35
c[0][1][2] = 36
c[1][0][0] = 0
c[1][0][1] = 0
c[1][0][2] = 0
c[1][1][0] = 0
c[1][1][1] = 0
c[1][1][2] = 0
是否有可能做到这一点?或者是否有任何类似的替代办法?
1条答案
按热度按时间ycl3bljg1#
下面的例子可以说明如何使用更少的代码来实现你的目标。请注意,
b[]
和c[]
的打印可以在一个函数中调用两次(而不是重复的代码)。不要使用复制/粘贴来编写代码。并且,在停下来编译和测试你所编写/修改的代码之前,不要编写超过几行的代码。"增量开发"。
在迫使操作员编写更少的代码来完成这项工作之后,似乎应该改进上面的产品。这仍然使用3D阵列进行存储。