0

私はacプロジェクトをコーディングしています。これは、ユーザーが整数の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++;
}

誰かが助けることができますか?

最高、ニューベン

4

1 に答える 1

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;
 }  

完全性のために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;
 }  
于 2012-07-06T21:05:08.883 に答える