为什么二维数组在我用 C 打印时会重复结果?
Why 2d array repeats the results when i print it in C?
这里是我写的代码:
#include <stdio.h>
void ReadData_and_Print(int r, int c, double pin[r][c]);
int main(){
int p[0][0];
ReadData_and_Print(0,0,p[0][0]);
}
void ReadData_and_Print(int r, int c, double pin[r][c])
{
int i=0,j=0;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("give number:");
scanf("%d",&pin[i][j]);
}
}
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("%d ",pin[i][j]);
}
}
输出:
give rows2
give columns3
give number1
give number2
give number3
give number4
give number5
give number6
3 4 5 6 3 4 5 6
当我给出 1 2 3 4 5 6 结果是 3 4 5 6 3 4 5 6.Ι 应该期望 1 2 3 4 5 6。
我知道这是一个非常简单的问题,但它的麻烦 me.I 不排除我缺乏关于数组的知识并且 for.I 做了研究但我找不到解决方案。
提前致谢。
您创建了一个维度为 0 的数组。这在数组声明中违反了约束,因此调用了undefined behavior。
您不需要在 main
中定义数组或将其传递给 ReadData_and_Print
。只需将 r
和 c
声明为 ReadData_and_Print
的本地,读取它们的值,然后在之后声明数组,这些值作为大小。
int r, c;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
int pin[r][c];
...
欢迎来到 C 的世界!
请允许我先回答一下:
#include <stdio.h>
#include <stdlib.h>
void ReadData_and_Print(int r, int c, int ** pin){
int i = 0 ,j = 0;
// Get rows and columns
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
// Initialize the pin array
pin = (int **) malloc(sizeof(int*) * r);
for (i=0; i<r; i++){
pin[i] = (int *)malloc(sizeof(int) * c);
}
// Scan all the number and store them
for (i=0; i<r; i++){
for (j=0; j<c; j++){
printf("give number:");
scanf("%d",&pin[i][j]);
}
}
// Print them all
for (i=0;i<r;i++){
for (j=0;j<c;j++){
printf("%d ",pin[i][j]);
}
}
}
int main(){
int ** p = NULL;
ReadData_and_Print(0, 0, p);
}
这里是我写的代码:
#include <stdio.h>
void ReadData_and_Print(int r, int c, double pin[r][c]);
int main(){
int p[0][0];
ReadData_and_Print(0,0,p[0][0]);
}
void ReadData_and_Print(int r, int c, double pin[r][c])
{
int i=0,j=0;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("give number:");
scanf("%d",&pin[i][j]);
}
}
for (i=0;i<r;i++)
{
for (j=0;j<c;j++)
{
printf("%d ",pin[i][j]);
}
}
输出:
give rows2
give columns3
give number1
give number2
give number3
give number4
give number5
give number6
3 4 5 6 3 4 5 6
当我给出 1 2 3 4 5 6 结果是 3 4 5 6 3 4 5 6.Ι 应该期望 1 2 3 4 5 6。 我知道这是一个非常简单的问题,但它的麻烦 me.I 不排除我缺乏关于数组的知识并且 for.I 做了研究但我找不到解决方案。 提前致谢。
您创建了一个维度为 0 的数组。这在数组声明中违反了约束,因此调用了undefined behavior。
您不需要在 main
中定义数组或将其传递给 ReadData_and_Print
。只需将 r
和 c
声明为 ReadData_and_Print
的本地,读取它们的值,然后在之后声明数组,这些值作为大小。
int r, c;
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
int pin[r][c];
...
欢迎来到 C 的世界!
请允许我先回答一下:
#include <stdio.h>
#include <stdlib.h>
void ReadData_and_Print(int r, int c, int ** pin){
int i = 0 ,j = 0;
// Get rows and columns
printf("give rows:");
scanf("%d",&r);
printf("give columns");
scanf("%d",&c);
// Initialize the pin array
pin = (int **) malloc(sizeof(int*) * r);
for (i=0; i<r; i++){
pin[i] = (int *)malloc(sizeof(int) * c);
}
// Scan all the number and store them
for (i=0; i<r; i++){
for (j=0; j<c; j++){
printf("give number:");
scanf("%d",&pin[i][j]);
}
}
// Print them all
for (i=0;i<r;i++){
for (j=0;j<c;j++){
printf("%d ",pin[i][j]);
}
}
}
int main(){
int ** p = NULL;
ReadData_and_Print(0, 0, p);
}