gpt4 book ai didi

c - 使用 scanf() 输入整数的平方

转载 作者:行者123 更新时间:2023-11-30 15:56:19 25 4
gpt4 key购买 nike

我正在编写一个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++;
}

有人可以帮忙吗?

最好,纽本

最佳答案

如果我理解你的原始代码应该做什么,那么这段代码实际上应该做到这一点(并再次打印出来只是为了证明它有效)。

您需要动态分配数组,因为它是可变大小的(在 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;
}

为了完整性而没有 malloc/free 的 C99 替代方案(我从来不喜欢这个 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;
}

关于c - 使用 scanf() 输入整数的平方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com