ページ 11

for文とscanf関数を用いて行列計算プログラムをうまく作れない

Posted: 2022年2月11日(金) 15:55
by papkon
以下のように行列の表示を行うプログラムを作りました。
このプログラムを実行すると以下のような表示がなされます。
「1行1列:」の時に「6535」を入力した後に、44を「2行1列:」の前に入力しなくてはならなくて、しっかりとした計算ができません。
このプログラムの問題がわかる人はいますでしょうか?
(拙い説明で申し訳ございません!!)


(モニターの表示画面)
============================================
n × n 行列を表示します
n = 3
1列目を入力してください ↓
1行1列:6535
44
2行1列:653
3行1列:764
2列目を入力してください ↓
1行2列:42
2行2列:642
3行2列:57
3列目を入力してください ↓
1行3列:535
2行3列:67
3行3列:4
以下の 3 × 3 の行列が入力されました ↓
6535 764 57
44 42 535
653 642 67


Program ended with exit code: 0
============================================

(以下がコードです)

コード:


#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    printf("n × n 行列を表示します \n");
    printf("n = ");
    
    int n;
    scanf("%d",&n);
    
    
    int s[n][n];
    
    
    for (int k = 1; k <= n; k++)
    {
        printf("%d列目を入力してください ↓ \n",k);
        for (int i = 1; i <= n; i++)
        {
            printf("%d行%d列:",i,k);
            scanf("%d ",&s[i-1][k-1]);
        }

    }
    
    printf("以下の %d × %d の行列が入力されました ↓ \n",n,n);
    
    for (int i = 1; i <= n; i++)
    {
        for (int k = 1; k <= n; k++)
        {
            printf("%d ",s[i-1][k-1]);
        }
        printf("\n");
    }
    
    
    printf("\n\n\n");
}


Re: for文とscanf関数を用いて行列計算プログラムをうまく作れない

Posted: 2022年2月11日(金) 18:08
by あたっしゅ
東上☆海美☆「
https://www.onlinegdb.com/ で C 言語モードで修正してみた所

コード:

#include <stdio.h>
#include <string.h>
#include <math.h>

int main()
{
    printf("n × n 行列を表示します \n");
    printf("n = ");
    
    int n;
    scanf("%d",&n);
    
    
    int s[n][n];
    
    
    for (int k = 1; k <= n; k++)
    {
        printf("%d列目を入力してください ↓ \n",k);
        for (int i = 1; i <= n; i++)
        {
            printf("%d行%d列:",i,k);
            scanf("%d",&s[i-1][k-1]);  // scanf("%d ",&s[i-1][k-1]); %d の後に空白文字が入っていた。
        }

    }
    
    printf("以下の %d × %d の行列が入力されました ↓ \n",n,n);
    
    for (int i = 1; i <= n; i++)
    {
        for (int k = 1; k <= n; k++)
        {
            printf("%d ",s[i-1][k-1]);
        }
        printf("\n");
    }
    
    
    printf("\n\n\n");
}


// end.
なんとか動いたようです。

コード:

    int s[n][n];
は、今の C 言語では動くようです。

Re: for文とscanf関数を用いて行列計算プログラムをうまく作れない

Posted: 2022年2月12日(土) 02:21
by みけCAT
行列を読み込む所で scanf に渡している書式に余計な空白が入っているため、
数値と空白を読み込んだ後、また空白以外の文字を読み込むまで次の処理に行かなくなっています。
余計な空白を削除するといいでしょう。

Re: for文とscanf関数を用いて行列計算プログラムをうまく作れない

Posted: 2022年2月12日(土) 23:43
by box
列方向に入力させようとしているところに
違和感がぬぐえないのは当方だけ?