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

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

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

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

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

解決済

5回答

1960閲覧

C言語で入力した3つの数字を昇順にソートするコードの改善に関して

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

0クリップ

投稿2017/11/22 07:46

###前提・実現したいこと
C言語で入力した3つの数字を昇順にソートするコードを以下のサイトを参考に書いています。
参考サイト

###発生している問題・エラーメッセージ
現状のコードで動くのですが、結果が以下のようになり、以下の点に困っています。
①「After:」の最後の数字の後ろの「,」を表示させないようにするにはどのようにコードを書き換えたら良いのか
②結果が表示された行にすぐ「コマンドプロンプト%」が表示されるので、次の行に表示させるにはどうしたら良いか

input a=15 input b=12 input c=10 Before: 15, 12, 10 After:10,12,15,%

###該当のソースコード

C

1#include<stdio.h> 2int main(){ 3 int a; 4 int b; 5 int c; 6 7 printf("input a="); 8 scanf(" %d", &a); 9 printf("input b="); 10 scanf(" %d", &b); 11 printf("input c="); 12 scanf(" %d", &c); 13 14 int number [3] = {a, b, c}; 15 16 int i, j, tmp; 17 for(i = 0; i<3; ++i){ 18 for(j =i+1; j<3; ++j){ 19 if(number[i]>number[j]){ 20 tmp = number[i]; 21 number[i] = number[j]; 22 number[j] = tmp; 23 } 24 } 25 26 } 27 28 printf("Before: %d, %d, %d\n", a, b, c); 29 printf("After:"); 30 for(i = 0; i<3; ++i){ 31 printf("%d," , number[i]); 32 } 33 34}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答5

0

ベストアンサー

毎回コンマを出力してしまっているので、うまく当てはまるところだけ出すようにする必要があります。あと、最後に改行したいならそれも実装する必要があります。

C

1 printf("After:"); 2 for(i = 0; i<3; ++i){ 3 // 数が増えても初回を飛ばすのは変わらないので、ここに入れるほうが管理しやすい 4 if(i > 0) printf(","); 5 printf("%d" , number[i]); 6 } 7 printf("\n");

投稿2017/11/22 07:53

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 07:56

①、②ともにご回答いただきましてありがとうございました。
guest

0

やり方はいろいろありますが、Beforeがその形式なら、Afterも倣っていいのでは。

C

1printf("Before: %d, %d, %d\n", a, b, c); 2printf("After: %d, %d, %d\n", number[0], number[1], number[2]);

投稿2017/11/22 07:51

LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 07:57

ご回答いただきましてありがとうございました。
guest

0

afterの部分のみですが、こんな感じでしょうか

c

1 printf("Before: %d, %d, %d\n", a, b, c); 2 char p=':'; 3 printf("After"); 4 for(i = 0; i<3; ++i){ 5 printf("%c %d" ,p, number[i]); 6 p=','; 7 } 8 printf("\n"); 9

投稿2017/11/22 08:04

編集2017/11/22 08:11
A.Ichi

総合スコア4070

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 08:12

ご回答いただきましてありがとうございます。 様々な書き方で実装できることがわかりました。
guest

0

①「After:」の最後の数字の後ろの「,」を表示させないようにするにはどのようにコードを書き換えたら良いのか

それはすべての数字の後ろに「,」が印字されるようにコーディングしているためです。印字したものを後戻りで消すのは面倒なので、「,」を出すべきか否かを判断してやればできます。

C

1 printf("After:"); 2 for(i = 0; i<3; ++i){ 3 printf("%d" , number[i]); 4 if (i < 2) 5 printf(", "); // 最後の数字でなければカンマを出力 6 }

②結果が表示された行にすぐ「コマンドプロンプト%」が表示されるので、次の行に表示させるにはどうしたら良いか

main関数を抜ける前に"\n"を出力すればOKです。

C

1 printf("\n");

投稿2017/11/22 07:58

PineMatsu

総合スコア3579

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 08:12

ご回答いただきましてありがとうございます。 様々な書き方で実装できることがわかりました。
guest

0

①表示を行うfor文のループ内で「,」を表示する条件を指定する
for(i = 0; i < 3; ++i){
printf("%d" , number[i]);
if(i < 2) {
putchar(",");
}
}
②ループ処理が終わった後に改行を行う
putchar('\n'); or printf("\n");

他にもきれいな書き方等あると思いますが、そこはご自身で考えてみてください。
ちなみにご存じだとは思いますが、putcharは一文字のみ表示する文です。分からなければググってみてください。

投稿2017/11/22 07:57

tmn

総合スコア13

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

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

退会済みユーザー

退会済みユーザー

2017/11/22 08:12

ご回答いただきましてありがとうございます。 様々な書き方で実装できることがわかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問