ページ 1 / 1
配列をスキップする方法
Posted: 2017年11月13日(月) 18:06
by peko
プログラミング初心者です。
九九の表を表示させる際にscanfで複数入力した値(例えば2と5)の段の計算を飛ばし、残りの数の計算結果だけを表示させるには、
どうすればよろしいのですか?
よろしくお願いします。
コード:
#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;
}
Re: 配列をスキップする方法
Posted: 2017年11月14日(火) 02:55
by box
コード:
#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;
}
Re: 配列をスキップする方法
Posted: 2017年11月14日(火) 11:35
by shika
コード:
#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;
}
こんなものでいかがでしょうか?
参考になれば幸いです。
Re: 配列をスキップする方法
Posted: 2017年11月15日(水) 12:50
by peko
申し訳ないのですが、shikaさんのコードのskip1,skip2 をskipにするとどのようなコードになるでしょうか?
Re: 配列をスキップする方法
Posted: 2017年11月16日(木) 19:39
by shika
コード:
#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;
}
この様なコードに成りますが、配列にしたい理由は分かりませんが、わざわざ配列にする意味があるでしょうか?
Re: 配列をスキップする方法
Posted: 2017年11月17日(金) 15:26
by peko
回答ありがとうございます。
最終的にスキップさせたい数は2個ではなく、複数個スキップさせたいので、配列にしています。
以下のコードは,
n=3と定義して、3つの配列をスキップさせたいのですが、上手くいきません。
どのようにすればよいでしょうか?
コード:
#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;
}
Re: 配列をスキップする方法
Posted: 2017年11月18日(土) 07:48
by maru
コード:
// 通常マクロは大文字では?
#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;
}
Re: 配列をスキップする方法
Posted: 2017年11月18日(土) 11:20
by かずま
No.2 の box さんの回答で十分だと思うんですが。
コード:
#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;
}
実行例
コード:
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
Re: 配列をスキップする方法
Posted: 2017年11月18日(土) 16:28
by maru
かずま さんが書きました:No.2 の box さんの回答で十分だと思うんですが。
その意見に激しく同意なのですが、自分のコードに固執していたようなので、修正版ということで。
Re: 配列をスキップする方法
Posted: 2017年11月21日(火) 15:35
by peko
わざわざ申し訳ありません。
沢山のご回答ありがとうございました。