合計 昨日 今日

配列をスキップする方法

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: peko
[URL]
Date: 2017年11月13日(月) 18:06
No: 1
(OFFLINE)

 配列をスキップする方法

プログラミング初心者です。
九九の表を表示させる際にscanfで複数入力した値(例えば2と5)の段の計算を飛ばし、残りの数の計算結果だけを表示させるには、
どうすればよろしいのですか?
よろしくお願いします。 

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int main(void){
 
    int x,y;
    int skip;
 
 
    printf("スキップする数を入力\n");
 
    setvbuf(stdout,NULL,_IONBF,0);
    scanf("%d",&skip);
 
    printf("%d\n",skip);
 
    for(x=1;x<=9;x++){
        for(y=1;y<=9;y++){
        printf("%d\t",x*y);
        }
        printf("\n");
    }
    return 0;
}

Name: box
[URL]
ハッカー(264,359 ポイント)
Date: 2017年11月14日(火) 02:55
No: 2
(OFFLINE)

 Re: 配列をスキップする方法

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
int main(void)
{
    int skip[10] = { 0 };       // skip[n] == 1のとき、その段をスキップする
    int s, i, j;
 
    do {
        printf("スキップする段を入力してください(0または1~9以外で終了)。\n");
        scanf("%d", &s);
        if (s == 0) break;
        if (1 <= s && s <= 9) skip[s] = 1;
    } while (0 <= s && s <= 9);
 
    for (i = 1; i <= 9; i++) {
        if (skip[i] == 0) {
            for (j = 1; j <= 9; j++) {
                printf("%2d ", i * j);
            }
            putchar('\n');
        }
    }
    putchar('\n');
    return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Name: shika
[URL]
Date: 2017年11月14日(火) 11:35
No: 3
(OFFLINE)

 Re: 配列をスキップする方法

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
int main(void)
{
    int x,y;
    int skip1, skip2;
 
    puts("スキップする数を入力");
 
    setvbuf(stdout,NULL,_IONBF,0);
    scanf("%d %d",&skip1, &skip2);
 
    printf("%d %d\n\n",skip1, skip2);
 
    for (x=1;x<=9;x++)
    {
/**/
        if (x == skip1 || x == skip2)
            continue;
/**/
           
        for (y=1;y<=9;y++)
        {
/*
            if (y == skip1 || y == skip2)
                continue;
*/
            printf("%d\t", x*y);
        }
        printf("\n");
    }
 
    return 0;
}


こんなものでいかがでしょうか?
参考になれば幸いです。

Name: peko
[URL]
Date: 2017年11月15日(水) 12:50
No: 4
(OFFLINE)

 Re: 配列をスキップする方法

申し訳ないのですが、shikaさんのコードのskip1,skip2 をskip[i]にするとどのようなコードになるでしょうか?

Name: shika
[URL]
Date: 2017年11月16日(木) 19:39
No: 5
(OFFLINE)

 Re: 配列をスキップする方法

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
 
int main(void)
{
    int x,y;
    int skip[2];
 
    puts("スキップする数を入力");
 
    setvbuf(stdout,NULL,_IONBF,0);
    scanf("%d %d",&skip[0], &skip[1]);
 
    printf("%d %d\n\n",skip[0], skip[1]);
 
    for (x=1;x<=9;x++)
    {
/**/
        if (x == skip[0] || x == skip[1])
            continue;
/**/
           
        for (y=1;y<=9;y++)
        {
/*
            if (y == skip[0] || y == skip[1])
                continue;
*/
            printf("%d\t", x*y);
        }
        printf("\n");
    }
 
    return 0;
}


この様なコードに成りますが、配列にしたい理由は分かりませんが、わざわざ配列にする意味があるでしょうか?

Name: peko
[URL]
Date: 2017年11月17日(金) 15:26
No: 6
(OFFLINE)

 Re: 配列をスキップする方法

回答ありがとうございます。
最終的にスキップさせたい数は2個ではなく、複数個スキップさせたいので、配列にしています。

以下のコードは,
n=3と定義して、3つの配列をスキップさせたいのですが、上手くいきません。
どのようにすればよいでしょうか?

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#define n 3
int main(void)
{
    int x,y,i;
    int skip[n];
 
    puts("スキップする数を入力");
 
    setvbuf(stdout,NULL,_IONBF,0);
 
    for(i=0;i<n;i++){
        scanf("%d\n",&skip[i]);
        printf("%d\n",skip[i]);
    }
 
 
 
 
    for (x=1;x<=9;x++){
        if (x == skip[x]){
            continue;
        }
 
        for (y=1;y<=9;y++){
            if (y == skip[y]){
                continue;
            }
            printf("%d\t", x*y);
        }
        printf("\n");
    }
 
    return 0;
}

Name: maru
[URL]
中級者(14,574 ポイント)
Date: 2017年11月18日(土) 07:48
No: 7
(OFFLINE)

 Re: 配列をスキップする方法

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// 通常マクロは大文字では?
#define n 3
 
int main()
{
    int x, y, i;
    int skip[n];
 
    puts("スキップする数を入力");
 
    setvbuf(stdout, NULL, _IONBF, 0);
 
    for (i = 0; i<n; i++) {
// 普段 scanf 系使わないので正しい使い方をよく分かっていないのだが、"%d\n" -> "%d" では?
// VCでは"%d"だけにしないとだめ
        scanf("%d", &skip[i]);
        printf("%d\n", skip[i]);
    }
 
    for (x = 1; x <= 9; x++) {
// 以下3行削除(コメントアウト)
//      if (x == skip[x]) {
//          continue;
//      }
// 以下10行追加
        int flag = 0;
        for (i = 0; i<n; i++) {
            if (x == skip[i]) {
                flag = 1;
                break;
            }
        }
        if (flag) {
            continue;
        }
 
        for (y = 1; y <= 9; y++) {
// 以下3行削除(コメントアウト)
//          if (y == skip[y]) {
//              continue;
//          }
            printf("%d\t", x*y);
        }
        printf("\n");
    }
   
    return 0;
}

Name: かずま
[URL]
Date: 2017年11月18日(土) 11:20
No: 8
(OFFLINE)

 Re: 配列をスキップする方法

No.2 の box さんの回答で十分だと思うんですが。

コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(void)
{
    int x, y, skip[10] = { 0 };
 
    while (1) {
        puts("1~9: スキップする段, その他: 入力終了");
        if (scanf("%d", &x) != 1 || x < 1 || x > 9) break;
        skip[x] = 1;
    }
    for (x = 1; x <= 9; x++)
        if (!skip[x]) {
            for (y = 1; y <= 9; y++) printf("%3d", x * y);
            putchar('\n');
        }
    return 0;
}

実行例
コード[Text]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
1~9: スキップする段, その他: 入力終了
2
1~9: スキップする段, その他: 入力終了
5
1~9: スキップする段, その他: 入力終了
0
  1  2  3  4  5  6  7  8  9
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81

Name: maru
[URL]
中級者(14,574 ポイント)
Date: 2017年11月18日(土) 16:28
No: 9
(OFFLINE)

 Re: 配列をスキップする方法

かずま さんが書きました:No.2 の box さんの回答で十分だと思うんですが。
その意見に激しく同意なのですが、自分のコードに固執していたようなので、修正版ということで。

Name: peko
[URL]
Date: 2017年11月21日(火) 15:35
No: 10
(OFFLINE)

 Re: 配列をスキップする方法

[解決!]

わざわざ申し訳ありません。

沢山のご回答ありがとうございました。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[10人]