こんにちは。watnowのゆいぴです。
[アドベントカレンダー][link-1] やろうよと言われたので何書くか悩んで血迷った挙句の記事です。
[link-1]:https://qiita.com/advent-calendar/2021/watnow-calendar
一年くらい大学でC言語やってて、長期休暇挟むたびにどうやって書くか忘れるポンコツです。
この前大体あってそうなプログラム書いてるのになんかうまくいかないな、と思って先生に聞いたら初歩的なミスすぎて「勉強足りないんじゃないの?w」と煽られて確かにその通りだったんだけど普通に悔しくて泣きました。(あと普段ならそんなことやらんわと家に帰ってブチギレました。)
その自戒の意味も込めて、
・C言語でうまくいかないときによくあること
・初心者の時によく間違えたこと
・私が今でも時々間違えていること(これは自戒)
みたいなのをまとめた記事を書くことにしました。
ポンコツなので初歩的なミスばっかりしているので『C言語大学でやり始めたけどなんかうまくいかんしわからんわ』みたいな人にも多少参考になると思います。読んでみて『そんな簡単なことで間違えてるのはお前だけやぞ』と思ったらすみません。
ちなみに開発環境はVisual Studio Codeです。VSCodeしかほとんど触ってないので途中他の環境だとこれはできないよみたいなのもあるかもしれません。井の中の蛙ちゃんなので許してください。
#目次
1.コンパイラの確認(特にMacの人)
2.括弧の数とセミコロンを確認
3.includeしてない問題
4.dやらsやらどれ使うんだ問題
5.おわりに
#1. コンパイラの確認(特にMacの人)
コンパイラの確認をしてください。
同じコードを書いていてもたまにコンパイラが違うと動かないことがあります。
私のおすすめはgccです。大学でも大体gccなら動作確認してますって言われることが多い気がする。gccで動かなかったことあんまりないです、やはり井の中の蛙、、、。
特にMacと書いたのは、C言語の実行を楽に行いたいと思ってコンパイラをlldbに変えたらうまくいかなかった経験があるからです。(Windowsを使用していたときはgccで普通にショートカットで実行できてたのにMacだと毎回コマンド打たなきゃいけなくてそれが嫌でlldbに変えたら動かなくなっちゃった。つらい。)
ちなみにじゃあC言語の実行を楽にするのはどうやるねんって興味持った人はこの記事参考にしてみると良いかも。同じアドベントカレンダーに参加してる後輩の記事です(宣伝)。普通にlldbで動くプログラムならこれ設定しとくとかなり快適になるのでおすすめです。
https://qiita.com/F-lapin/items/cb59f0406295009227dc
#2. 括弧の数とセミコロンを確認
これは多分あるあるなんですけど()や{}がちゃんと数揃っているか確認してください。割と揃ってないことある気がする。私はコピペしてちぎって貼ってを繰り返してると時々ぐちゃぐちゃになって無駄に赤線黄色線を大量に引かれて怒られます。
あと文末にセミコロンがついてるかどうかも確認してください。
余談ですが他の言語(特にPythonとか)も書いてる友達とかは久しぶりにC書くとセミコロン書き忘れる〜とぼやいてました。。。
括弧が足りているか手っ取り早く確認する方法としては 右クリック>ドキュメントのフォーマット
とするとなんかいい感じにプログラムの体裁を整えてくれるのであとはちゃんと目視で確認してください。でも多分このフォーマットするやつはVSCodeでしかできないやつかもしれない。知らんけど
#3. includeしてない問題
ライブラリ関数って便利ですよね。
でも最近私がよくやらかすのがこのincludeしてない問題です。
色々やりたい処理をmainの中につらつらと書いて、いざコンパイルするとめっちゃ怒られる。
なんでだろうと思ってみてみると
implicit declaration of function '〇〇' is invalid in C99
これが出てる。(〇〇の中は怒られている該当箇所とかが入ります。)
ヘッダファイルとかいうのがあって、それを書いてないと関数を使わせてもらえないらしいです。
(ヘッダファイルっていうのはstdio.h
みたいなやつのことらしい。)
何をincludeすればいいかはまあ関数名ググれば大体出るんですけど、
「いちいちブラウザを開きたくないんだが?」という横着な人は
関数を選択>右クリック>定義へ移動
(これもVSCode限定かも?わからん)
とすると大体ヘッダファイルが開かれるのでそれみてこれが欲しいのね〜と書いてあげることもできます。
#4. dやらsやらどれ使うんだ問題
これは変数の宣言が何型の時にどれを使うんだよ〜と詳しくここに書くと長くなるので私が雑に覚えていることを書いておきます。
(本当はもっとちゃんとしたルールがあるけれど、大学の課題くらいだとあんまり使わなかったり、初心者がざっとみてわかりやすいことを優先したかったり、という事情で書いてないです。詳しいことが知りたければ他の優しい人が丁寧にまとめてくれてるからそっちみてね。)
雑な覚え方
数字→%d
小数点→%f
文字→%s
あとscanf
でうまくいってない人は引数のところに&
があるかを確認するといいと思います。
#5. おわりに
こんな雑な覚書のような記事を見てくださりありがとうございました。
少しでもC言語うまくいかへんわみたいなのが解消されたら嬉しいです。
また、大学の課題でC言語やっている程度の素人ですので、きちんと勉強されている方からすると解釈や表記等が間違っていたりする場合もあると思いますが、その場合は優しく教えていただけると私の糧となりますのでよろしくお願いします。