This is CS50x

Getting Started

CS50 IDE は Web ベースの「統合開発環境」で、ローカルにソフトウェアをインストールせずに「クラウド」でプログラミングを行うことができます。 実際、CS50 IDE は、独自のファイルやフォルダー(別名、ディレクトリ)を保存できる独自の「ワークスペース」(つまり、ストレージ スペース)を提供します。

ログイン

ide.cs50.io に向かい、「GitHub でログイン」をクリックして、CS50 IDE にアクセスします。 IDE がロードされると、(デフォルトでは)3 つの部分に分かれていることがわかります。 CS50 IDEの一番上にあるのが “テキストエディタ “で、ここにすべてのプログラムを書き込みます。 ワークスペースのファイルやディレクトリの探索、コードのコンパイル、プログラムの実行、新しいソフトウェアのインストールを行うことができます。 そして、左側は「ファイル ブラウザー」で、IDE に現在あるすべてのファイルとフォルダーを表示します。

ターミナル ウィンドウの中をクリックすることから始めます。

~/ $

ターミナルウィンドウをクリックし、

mkdir ~/pset1/

と入力し、Enterキーを押してホームディレクトリに pset1 というディレクトリ(=フォルダー)を作成します。 mkdir~/pset1の間のスペースや、その他の文字を見落とさないように注意してください。 ~ はホームディレクトリ、~/pset1~ の中の pset1 というディレクトリを表します。

以下、コマンドを実行するというのは、ターミナルウィンドウに入力して Enter キーを押すことです。 コマンドは「大文字と小文字を区別する」ので、小文字を意味するときに大文字で入力したり、その逆をしないように注意してください。

では、

cd ~/pset1/

と入力してそのディレクトリに移動(つまり、開く)します。

~/pset1/ $

そうでない場合は、手順をたどって、どこで間違ったのかを判断します。

次に、

mkdir ~/pset1/hello

を実行して pset1 ディレクトリ内に hello という新規のディレクトリを作成します。 そして、

cd ~/pset1/hello

を実行して、そのディレクトリに自分を移動させます。 ファイルメニューの新規ファイルをクリックし、~/pset1/helloディレクトリの中にhello.cという名前で保存します(ファイルメニューの保存オプションで)。

#include <stdio.h>int main(void){ printf("hello, world\n");}

CS50 IDEが入力時に「構文強調表示」(つまり色)を付けていることに注目してください(CS50 IDEの色の選択はこの問題集のものと異なるかもしれませんが)。 この色は、実際にはファイル自体に保存されているのではなく、特定の構文を目立たせるためにCS50 IDEが追加しているだけです。

Listing Files

次に、ターミナルウィンドウで、プロンプト(~/pset1/hello/ $)のすぐ右に、実行

ls

hello.cとだけ表示されているのが見えますか。 それは、helloフォルダの中のファイルをリストアップしただけだからです。 特に、あなたは ls というコマンドを実行(つまり、実行)しました。 (これは頻繁に使われるコマンドなので、作者はキーストロークを節約するために単に ls と呼んでいます)。

プログラムのコンパイル

さて、hello.cプログラムを実行する前に、コンパイラ(例えばclang)でコンパイルして、ソースコードからマシンコード(すなわち0と1)に変換しなければならないことを思い出してください。

clang hello.c

そして、もう一度このコマンドを実行してください:

ls

今度は、hello.cだけでなくa.outも表示されているでしょう? (これは、clanghello.cのソースコードをa.outのマシンコードに変換したもので、これは「アセンブラ出力」の略ですが、これについてはまた別の機会に。

さて、以下のように実行してプログラムを実行します。

./a.out

こんにちは、世界よ、確かに!

プログラムの名前付け

さて、a.outはプログラムの名前として最もユーザーフレンドリーではありませんが、これは、a.outはプログラムの名前です。 もう一度hello.cをコンパイルして、今度はマシン・コードをhelloという名前のファイルに保存してみましょう。

clang -o hello hello.c

その中のスペースを見落とさないように注意してください! 次にもう一度実行します。

ls

今度はhello.c(と先ほどのa.out)だけでなく、helloも表示されていますね。 これは、-o がコマンドライン引数で、フラグやスイッチと呼ばれることもあり、clanghello というファイルを出力する (従って o となる) ように指示しているためです。

./hello

再びこんにちは!

Making Things Easier

clang を実行するプロセスを自動化できることを思い出してください、make が我々のために実行する方法を見つけ出し、それによってキーストロークをいくつか節約することができます。

make hello

makeclang にさらに多くのコマンドライン引数を与えて実行することがわかるでしょうか。 これらについてもまた別の機会に!

最後にもう一度、以下のようにプログラム自体を実行してください。

./hello

ふぅ!

Getting User Input

言うまでもなく、このプログラムはどうコンパイルしても実行しても hello, world としか出力しないんです。

このプログラムを、最初にユーザーの名前を尋ねてから hello, so-and-so (so-and-so は実際の名前) を表示するように変更しましょう。

前と同様に、

make hello

でプログラムをコンパイルし、異なる入力で数回テストして、プログラムを実行するようにしてください。

./hello

Walkthrough

Hints

ユーザーに名前を入力する方法を覚えていないですか。

次のように get_string を使用し、その戻り値を string 型の name という変数に格納することができることを思い出してください。 ユーザー名と挨拶を結合する方法を思い出せませんか? printf を印刷するだけでなく、文字列をフォーマットするために使用できることを思い出してください (そのため、printff があります)。

error: use of undeclared identifier 'string'; did you mean 'stdin'?

get_string を使用するには、cs50.h (get_string が宣言されている) を次のようにファイルの先頭に含める必要があることを思い出してください:

#include <cs50.h>

How to Test Your Code

以下の作業を行い check50を使って作ったコードの正当性を評価してみてください。 ただし、必ず自分でコンパイルしてテストしてください!

check50 cs50/problems/2020/x/hello

以下を実行して、style50を使ってコードのスタイルを評価してください。

style50 hello.c

投稿方法

以下を実行し、GitHub のユーザー名とパスワードでログインしてプロンプトを出してください。 セキュリティのため、パスワードの実際の文字の代わりにアスタリスク (*) が表示されます。

submit50 cs50/problems/2020/x/hello

コメントする