質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1179閲覧

配列の数を順番に表示していく際に、最後に表示された数だけ","をつけないようにしたい

bafubafu_

総合スコア16

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/11/11 16:21

思った通りに実行することはできましたが、もっと簡単に書くことはできないのでしょうか。
最初の数を表示して、それ以降を,%dと置いていて、for文が2個ずつに分かれてしまいコードが長く感じてしまいます。

実行例↓
Input Data No. 1 : -1
Input Data No. 2 : 1
Input Data No. 3 : 2
Input Data No. 4 : 4
Input Data No. 5 : 4
Input Data No. 6 : 7
Input Data No. 7 : 7
Input Data No. 8 : 10
Input Data No. 9 : 10
Input Data No.10 : 15

Input a search value: 7

<< Results >>
search value: 7
data smaller than search value: -1,1,2,4,4
searched data: 7,7
data larger than search value: 10,10,15

#include <stdio.h> #define SIZE 10 int main(void){ int i,i1,i2,i3,search; int array[SIZE]; for(i = 0;i<SIZE;i++){ printf("Input Data No.%2d : ",i+1); scanf("%d",&array[i]);**ボールドテキスト** } printf("\n"); printf("Input a search value: "); scanf("%d",&search); printf("\n"); printf("<< Results >>\n"); printf("search value: %d\n",search); printf("data smaller than search value: "); for(i = 0;i<SIZE;i++){ if(search > array[i]){ printf("%d",array[i]); break; } } i1 = i+1; for(i = i1;i<SIZE;i++){ if(search > array[i]){ printf(",%d",array[i]); } } printf("\n"); printf("searched data: "); for(i = 0;i<SIZE;i++){ if(search == array[i]){ printf("%d",array[i]); break; } } i2 = i+1; for(i = i2;i<SIZE;i++){ if(search == array[i]){ printf(",%d",array[i]); } } printf("\n"); printf("data larger than search value: "); for(i = 0;i<SIZE;i++){ if(search < array[i]){ printf("%d",array[i]); break; } } i3 = i+1; for(i = i3;i<SIZE;i++){ if(search < array[i]){ printf(",%d",array[i]); } } printf("\n"); return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

試してないですが、

c

1for(int i=0, j=1; i<SIZE; i++){ //j の 1 はセパレータの文字(バイト)数 2 if(search > array[i]){ 3 printf(",%d"+j, array[i]); 4 j = 0; 5 } 6}

は如何でしょう。

i と j のように同じ型であれば for の初期化に書けますので、ローカルな変数のスコープをループ外まで広げなくて良くなります。

投稿2021/11/11 17:15

編集2021/11/11 17:38
jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2021/11/11 17:18

かぶってしまいました(^_^;
melian

2021/11/11 17:32

なるほど!
bafubafu_

2021/11/11 17:57

めっちゃスッキリしました!
guest

0

こんなのはいかがでしょうか?

c

1#include <stdio.h> 2 3#define SIZE 10 4 5void print(int search, int array[], int comp(int, int), const char *msg) 6{ 7 printf("%s", msg); 8 for (int j = 1, i = 0; i < SIZE; i++) 9 if (comp(array[i], search)) printf(",%d" + j, array[i]), j = 0; 10 putchar('\n'); 11} 12 13int gt(int a, int b) { return a > b; } 14int eq(int a, int b) { return a == b; } 15int lt(int a, int b) { return a < b; } 16 17int main(void) 18{ 19 int search, array[SIZE]; 20 21 for (int i = 0; i < SIZE; i++) { 22 printf("Input Data No.%2d : ", i + 1); 23 scanf("%d", &array[i]); 24 } 25 printf("\n" 26 "Input a search value: "); 27 scanf("%d", &search); 28 printf("\n" 29 "<< Results >>\n" 30 "search value: %d\n", search); 31 print(search, array, lt, "data smaller than search value: "); 32 print(search, array, eq, "searched data: "); 33 print(search, array, gt, "data larger than search value: "); 34}

投稿2021/11/11 17:03

編集2021/11/11 17:06
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bafubafu_

2021/11/11 18:02

行数が半分になっててめちゃくちゃスッキリしてますね... まだまだわからないことがいっぱいなので勉強します...
guest

0

ベストアンサー

C

1char *sep; 2printf("data smaller than search value: "); 3sep = ""; 4for (i = 0; i < SIZE; i++) { 5 if (search > array[i]) { 6 printf("%s%d", sep, array[i]); 7 sep = ","; 8 } 9} 10printf("\n");

とか。

投稿2021/11/11 16:30

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bafubafu_

2021/11/11 16:51

凄くスッキリしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問