我对c语言很陌生并且遇到了一个我认为与指针有某些关系的问题(可能是错误的)。第一个输入显然是(当前)也决定了宽度和高度的输入数量数组。接下来的几个输入应该读取我自己的数组坐标和它的值。在最后一点我试图打印出阵列。出局是非常错误的。关于我做错了什么的提示扫描部分或打印或者两者兼而有之?
(如果st_objects是5,x_cord和y_cord的最大输入为4) 我只是试图将一些值更改为0以外的其他值。首先我需要用0值填充数组?
类似的东西:
0 0 0 2 0
0 2 3 0 0
0 0 0 0 2
0 0 0 1 2
0 0 2 0 3
Ps:对输入使用getchar函数会更好吗?
我的代码是:
#include <stdio.h>
int main(){
int st_objects;
scanf("%d",&st_objects);
int x_cord;
int y_cord;
int array[st_objects][st_objects];
for(int i = 0; i < st_objects; i++){
scanf("%d",&x_cord);
scanf("%d",&y_cord);
scanf("%d",&array[x_cord][y_cord]);
}
for(int i = 0; i < st_objects; i++){
for(int j = 0; i < st_objects; j++){
printf("%d",array[i][j]);
}
printf("\n");
}
return 0;
}
答案 0 :(得分:1)
您的扫描循环仅执行到st_object次(在本例中为5)。所以你只能输5个输入。但是如果你看到,该数组包含5 * 5 = 25个元素。所以这是一个出错的地方。
接下来,有更好的方法来扫描数组元素,比如
for(int i = 0; i < st_objects; i++)
for(int j = 0; j < st_objects; j++)
scanf("%d",&array[i][j]);
答案 1 :(得分:0)
我认为你并不完全了解2-D阵列及其元素&#39;位置。
另一件事,您可能会超出矩阵边界,因此请尝试检查x和y位置。
#include <stdio.h>
int main(){
int st_objects;
printf("Square Matrix length \n");
scanf("%d",&st_objects);
int x_cord;
int y_cord;
int array[st_objects][st_objects];
for(int i = 0; i < st_objects*st_objects; i++){
printf("x-position \n");
scanf("%d",&x_cord);
printf("y-position \n");
scanf("%d",&y_cord);
scanf("%d",&array[y_cord][x_cord]);
}
for(int i = 0; i < st_objects; i++){
for(int j = 0; j < st_objects; j++){
printf("%d ",array[i][j]);
}
printf("\n");
}
return 0;
}
答案 2 :(得分:0)
您的代码中有2个错误.. 1)在第一个for循环中,i必须小于多维数组中的元素总数,即i <(st_objects * st_objects)。 2)for循环中的小错误..
for(int j=0;j<st_objects;j++)
这是你的程序可以修改为(它适用于2x2):
#include <stdio.h>
int main(){
int st_objects;
scanf("%d",&st_objects);
int x_cord;
int y_cord;
int array[st_objects][st_objects];
for(int i = 0; i < (st_objects*st_objects); i++){
printf("Enter x,y coordinate:\n");
scanf("%d",&x_cord);
scanf("%d",&y_cord);
if(x_cord<st_objects&&y_cord<st_objects)
{printf("Enter value at x,y:\n");
scanf("%d",&array[x_cord][y_cord]);
}else printf("\nWrong coordinate\n");
}
for(int i=0;i<st_objects;i++)
{
for(int j=0;j<st_objects;j++)
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
return 0;
}
我希望这会有所帮助:)