我正在编写一个c项目,需要用户输入一个N * N的整数平方:也就是说输入N行N个整数。算法很好。
现在我希望用户输入N行N个整数,每个连续的整数用空格分隔。在这里,我没有正确使用scanf,因为我试图声明整数数组,但我无法处理间距。
我尝试过这样的事情,非常不自然而且失败了:
int i=0;
int j=0;
int N;
scanf("%d",&N);
char c[N][2*N-1];
while(i < N){
scanf("%s",&c[i]);
i++;
}
i=0;
j=0;
while (i<N){
while (j<N){
c[i][j]=c[i][2*j]-48;
j++;
}
j=0;
i++;
}
有人可以帮忙吗?
最佳, Newben
答案 0 :(得分:1)
如果我理解了你的原始代码应该做什么,那么这段代码应该实际执行(并再次打印出来以证明它有效)。
你需要动态分配数组,因为它的大小是可变的(在C99中,你可以在堆栈上使用可变大小的数组,但这实际上是一个不同的讨论)。
scanf会自动忽略整数(包括空格和换行符号)之间的空白区域,因此您无需手动解析它。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0, j=0, N;
int **c;
scanf("%d",&N);
c = malloc(N*sizeof(int*));
for (i=0;i<N;i++)
{
c[i] = malloc(N*sizeof(int));
for (j=0;j<N;j++)
{
scanf("%d",&c[i][j]);
}
}
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf("%d ",c[i][j]);
}
printf("\n");
free(c[i]);
}
free(c);
return 0;
}
C99替代品没有malloc / free以获得完整性(我从来没有喜欢过这个C99功能,因为无法检查堆栈上是否有足够的空间):
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0, j=0, N;
scanf("%d",&N);
int c[N][N];
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
scanf("%d",&c[i][j]);
}
}
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf("%d ",c[i][j]);
}
printf("\n");
}
return 0;
}