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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
papkon

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

#1

投稿記事 by papkon » 2年前

以下のように行列の表示を行うプログラムを作りました。
このプログラムを実行すると以下のような表示がなされます。
「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");
}


アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

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

#2

投稿記事 by あたっしゅ » 2年前

東上☆海美☆「
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 言語では動くようです。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#3

投稿記事 by みけCAT » 2年前

行列を読み込む所で scanf に渡している書式に余計な空白が入っているため、
数値と空白を読み込んだ後、また空白以外の文字を読み込むまで次の処理に行かなくなっています。
余計な空白を削除するといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

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

#4

投稿記事 by box » 2年前

列方向に入力させようとしているところに
違和感がぬぐえないのは当方だけ?
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

返信

“C言語何でも質問掲示板” へ戻る