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
も表示されているでしょう? (これは、clang
がhello.c
のソースコードをa.out
のマシンコードに変換したもので、これは「アセンブラ出力」の略ですが、これについてはまた別の機会に。
さて、以下のように実行してプログラムを実行します。
./a.out
こんにちは、世界よ、確かに!
プログラムの名前付け
さて、a.out
はプログラムの名前として最もユーザーフレンドリーではありませんが、これは、a.out
はプログラムの名前です。 もう一度hello.c
をコンパイルして、今度はマシン・コードをhello
という名前のファイルに保存してみましょう。
clang -o hello hello.c
その中のスペースを見落とさないように注意してください! 次にもう一度実行します。
ls
今度はhello.c
(と先ほどのa.out
)だけでなく、hello
も表示されていますね。 これは、-o
がコマンドライン引数で、フラグやスイッチと呼ばれることもあり、clang
に hello
というファイルを出力する (従って o
となる) ように指示しているためです。
./hello
再びこんにちは!
Making Things Easier
clang
を実行するプロセスを自動化できることを思い出してください、make
が我々のために実行する方法を見つけ出し、それによってキーストロークをいくつか節約することができます。
make hello
make
が clang
にさらに多くのコマンドライン引数を与えて実行することがわかるでしょうか。 これらについてもまた別の機会に!
最後にもう一度、以下のようにプログラム自体を実行してください。
./hello
ふぅ!
Getting User Input
言うまでもなく、このプログラムはどうコンパイルしても実行しても hello, world
としか出力しないんです。
このプログラムを、最初にユーザーの名前を尋ねてから hello, so-and-so
(so-and-so
は実際の名前) を表示するように変更しましょう。
前と同様に、
make hello
でプログラムをコンパイルし、異なる入力で数回テストして、プログラムを実行するようにしてください。
./hello
Walkthrough
Hints
ユーザーに名前を入力する方法を覚えていないですか。
次のように get_string
を使用し、その戻り値を string
型の name
という変数に格納することができることを思い出してください。 ユーザー名と挨拶を結合する方法を思い出せませんか? printf
を印刷するだけでなく、文字列をフォーマットするために使用できることを思い出してください (そのため、printf
の f
があります)。
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