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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

2回答

35639閲覧

整列して表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2015/11/12 07:04

大学の課題で、
「引数にMeiboの配列を指定することができ る関数displayを定義し、学生の一覧を出 力できるようにしてください。
▪ 呼び出し:display(students)
▪ 定義: void display(Meibo students[])」
という課題があり、先生から
「名前と数値の位置は揃える事」
と言われました。ここまで完成したのですが画像のように整列できません。どうすれば揃えられますか?

//
// 名簿プログラム
// アルゴリズム応用 第6回課題
//

#include <stdio.h>

/* 学生の構造体 */

typedef struct Meibo {
int number;
char name[10];
int credits;
} Meibo;

/* 一覧表示する */
void display(Meibo students[]){
int i;

printf("------------------------------------------\n"); for (i = 0; i < 4; i++) { printf("%s",students[i].name); printf("%d\n",students[i].credits); printf("------------------------------------------\n"); }

}

int main(void)
{

// 4名分の学生の情報を登録 Meibo students[]={ { 1, "John", 30 }, { 2, "Paul", 28 }, { 3, "George", 20 }, { 4, "Ringo", 40 } }; //メニューの表示と実行 char cmd; printf("a:追加 d:一覧表示 q:終了\n"); while((cmd = getchar()) != 'q'){ switch(cmd){ case 'a': //追加(課題2) break; case 'd': display(students); break; case '\n':case ' ': break; default: printf("不正なコマンドです。\n"); break; } } printf("名簿プログラムを終了します。\n"); return 0;

}

イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

printfの書式に表示桁数が指定できます。
表示桁数は%のあとに桁数を指定します。また、右寄せ・左寄せの指定もできます。
例えば、以下にようなります。

C

1 printf("%15s", "ABC");

ディフォルトは右寄せです。左寄せの場合は桁数の前に"-"を指定します。
本題の場合、名前は左寄せで、数値を右寄せで表示する場合は以下になります。

C

1printf("------------------------------------------\n"); 2 for (i = 0; i < 4; i++) { 3 printf("%d %-15s", i, students[i].name); // 名前を15桁の左寄せで表示 4 printf("%8d\n", students[i].credits); // クレジットを8桁の右寄せで表示 5 printf("------------------------------------------\n"); 6 }

となります。
既に、解決されているようですが、ご参考まで。

投稿2015/11/12 11:52

akiruno-oneone

総合スコア815

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

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

退会済みユーザー

退会済みユーザー

2015/11/12 17:06

すごくわかりやすく参考にかる回答、誠にありがとうございます! 今度はこの方法でやってみます。
guest

0

名前とその次の数字(年齢か点数か?)の間にタブ("\t")を入れるのが一般的ではないでしょうか。
それがダメなら、名前の文字数を数えて、その次の数字が揃うように適当な数の空白を入れるといいのではないでしょうか。

投稿2015/11/12 07:10

swordone

総合スコア20651

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

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

退会済みユーザー

退会済みユーザー

2015/11/12 07:35

見事成功しました!本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問