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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

7回答

2412閲覧

終わりの見えないC言語

meacrev

総合スコア34

C

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

6クリップ

投稿2021/05/21 02:12

端的に言えば、C言語をマスター出来ません。
何百回、何千回と練習を重ねても、いざ実践になると全く思いつけず、素直に解答を確認するとそのサンプルコードのハチャメチャなカオス状態に意識が遠のきそうになります。
「ここでreturnの登場は早すぎるよ!」や「え、ここでstruct持ってくるの?絶対関係ないでしょ構造体!」、「int(変数等の導入)の配置が不規則過ぎて雑だ」等、覚えても覚えても次々に知らないパターンが出てきて学ぶのにキリがないC言語ですが、皆さんはやはりこの苦境を乗り越えられてきたのでしょうか。
私の現状は、脳内ではソースコードの上書き作業ばかりで、アウトプットがまるで出来ていません。学習開始から2年ほど経過してもなおこの状態なので、個人的には不安が募るばかりです。基礎事項は一通り学習済みです。
何かアドバイス等あれば宜しくお願い致します。

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

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

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

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

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

ozwk

2021/05/21 02:18

何のためにC言語を勉強しているんですか? ロボット動かしたいとか色々あると思いますが。
m.ts10806

2021/05/21 02:19

C#は関係ないのではと
m.ts10806

2021/05/21 02:20

あと、「要件に対して有る程度実装に落とし込める」ができないと「基礎ができた」とは言えないと思います
dodox86

2021/05/21 02:22

「こういうときはこうする」と、WEBの記事などを検索して見つかったパターンを覚えようとすることに終始していませんか。
fana

2021/05/21 03:03

> いざ実践になると全く思いつけず、素直に解答を確認すると… 「実践」ってなんだろう? 「解答」が存在するの問題を解くためにせっせとC言語を学ぶのですか? だとしたら不毛で無意味な取り組みに思えます.(それが趣味だとかいう話なら,まぁ,無意味ではないのでしょうけども)
Munosuke222

2021/05/21 03:10

質問見る限りまだ学生さんなのかな。基礎事項は一通り学習済みで、2年もやってるんだったら一度インターン行くとかなんかしてみたら?不安が絶望に変わるのか、希望に変わるのかは知らんけど、現状のスキル・意識のままだといつまで経っても何の使いもんにもならんと思うよ。
Zuishin

2021/05/21 03:29

身も蓋もないことを言うと、普通はそこまで苦労しません。 典型的な「プログラミングに向いてない人」なので、食うためなら別の道を選ぶのが良いと思います。 壁を一つ乗り越えたらスイスイ進むような、ちょっとした引っ掛かり程度のものには見えません。 https://teratail.com/questions/330200 コンピューターの操作自体は好きで、頭が悪いわけでもないのでしょう。 ならばプログラミング以外でコンピューターに関わっていけばいいではありませんか。 「プログラミング」と「操作」は全く別の作業なので、必要となるスキルも違います。
episteme

2021/05/21 03:42

収束はするでしょうけど「終わり」なんてないですよ?
fana

2021/05/21 04:30

(「実践」する必要に迫られているわけでもないように見えるし,やめてしまう=「終わり」にする,というのも解の候補足り得るかもしれない)
guest

回答7

0

覚えても覚えても次々に知らないパターンが出てきて学ぶのにキリがないC言語ですが

「ソースコードをパターン化して覚えようとする」という間違った手段によっているから、一向にできるようにならないのではないでしょうか。

プログラミングは正解が1つのパズルではなく、(極論を言えば)目的の動作をすればどんなコードを書いても構わないのです。それこそ、IOCCCのような「どれだけ奇抜なコードを書けるか」というコンテストすら存在するぐらいに自由な世界です。

やるべきことはパターン化しての分類ではなく、「この行はこの動作をする」と追いかけて理解することだと考えます。

投稿2021/05/21 02:28

maisumakun

総合スコア145192

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

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

m.ts10806

2021/05/21 02:40

たまにteratailでも大喜利みたいな流れになりますね。 ※質問に書かれた要件がいかようにも取れるケースに多い
meacrev

2021/05/23 16:20

なるほど!それはつまり、C言語プログラムをパターンとして覚える事や基礎で習ったコード記述の順番等を気にする事よりも、一行一行「次にプログラムはどんな作業を必要とするのか」を考えながらコードを記述する事を積み重ねるのが重要であるという事でしょうか?
guest

0

僕は「分解再構築」だと信じています。

問題/課題/要件を分解し、計算機のコトバで再構築する。
自分の知ってるパターンにまで分解できれば再構築は楽ですし、
スキルが上がれば細かく分解しなくても再構築できるようになります。

投稿2021/05/21 03:03

編集2021/05/21 03:04
episteme

総合スコア16614

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

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

0

ある漫画のセリフのやりとりに、こんなのがあります。
「それとも お前 何十年も修行して達人にでもなるのを待ってから戦場にでるつもりか?気の長げぇ話だな。」
「そ そんなつもりはねぇ!!」
「だったら 今手持ちのコマでやりくりするしかねぇだろ」
開発言語は所詮道具で、何かを作るために存在します。道具の持ち方をいくら勉強しても、実際に何か作って見ない事には始まりません。何なら、作りながら勉強しても構わないのです。今の時点の自分の持つ知識と技量で、何かテーマを考えてソースが見苦しかろうが汚かろうが完成させてみる事をお勧めします。出来上がってから反省すれば、次はもっと良いものが出来るようになるでしょう。

自分は開発歴は20年近くになり様々な言語を触りましたが、どの言語もマスターしたとは到底思ってません。上を見たらキリがない世界です。それでも、経験を重ねる事によって、こういうケースではこのやり方が使えるなとか、このやり方はしんどいから次は使わんとこ…とか色々身に付いて、誰かからこういう事やりたいんだけど、と聞いた時に、今まで経験した事が頭の中でピタピタッとパーツのように組み合わさって、この道具とこの設計方法使おうとか実現方法がすぐ出てくるようになります。
時にはパーツが足りない場合もありますが、今はインターネットという便利なものがあるので、足りないパーツをすぐ探してきたり出来ます。便利なものです。

投稿2021/05/22 01:26

編集2021/05/22 01:37
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

質問を見ていると、

  • いつまでも単語帳の作成ばかりしている
  • 「美しい発音」ができていないと思いこんで外国人との会話を怖がる

そんな英語学習者を見ているような感じですね。
そもそも何の目的でC言語を勉強し始めたのでしょうか。あなたの考える、あるべきアウトプットとは?
アウトプットできてないと思うなら、まずはアウトプットしてみればいいのでは?
構造体がどうとかreturnの位置とかは枝葉の問題に過ぎません。そのへんに悩むのは後回しにしたほうがいいです。イギリス王室の人のように格調高くスピーチができるようになることよりは、目の前にいる人にすぐに返事できることのほうが重要です。

投稿2021/05/21 04:40

KojiDoi

総合スコア13671

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

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

KojiDoi

2021/05/22 20:43

zuishinさんのコメントを見て過去投稿も遅ればせながら見てきました。私の回答はちょっとズレていたかもと思いました。 回答したのとは別の意味で構造体云々なんて話にこだわっている場合ではないというか。2年間もそれなりに真面目に勉強してきて、あの質問のレベルの「自己解決」ができないとなると、だいぶん厳しいでしょう。 最終的に何を成し遂げたいのかが依然としてわかりませんが、その手段として「C言語マスター」よりはずっと有効な選択肢がありそうな予感だけは強くあります。
guest

0

C言語をマスター

何がどうなったら「マスター」したことになるのか不明ですが,
そもそも「マスター」する必要があるのか? というところから考え直してみたらどうでしょう?
ある目的のプログラムを構成するのに必要なだけの要素を用いれば,(その他の要素を全く知らずとも)プログラムは完成して,目的を達することができるわけで.
仮にC言語の中に自分が一生使わないかもしれない要素があったとして,その要素について「わかる」とか「わからん」とかあーだこーだ言う必要は全くないのではありませんか?

実際に使うよりも前に覚えようという姿勢が不毛に思えます.
本当に必要な事柄が現れた際に,都度それを調べて理解して使う」のでは問題があるのでしょうか?
そうやって,同一の事柄を調べて使って→でも次にまた使う際にちょっと忘れてて調べなおして…… とかやっていれば,頻出する事柄は結果としてそれを覚えることになるので,それでOKでしょう.
(2年もやっているなら,基礎は「覚えた」でしょう?)

遭遇した事柄のすべてをその場で頑張って覚えておく必要はなく,例えばすぐ見れる箇所にメモっておくとかで十分です.
何も見ないで問題を解くとかいう状況は,せいぜい学校のテストくらいしかないでしょう.
現実にプログラミングを行う際にはカンニングし放題です.

投稿2021/05/21 03:18

fana

総合スコア11663

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

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

fana

2021/05/21 03:22 編集

まぁ,外界と一切遮断されたような空間に連れていかれてプログラムを作れとか言われる場合には,「覚えていること」での勝負になるでしょうけど.(←仕事としてやってると,そういうこともあると言えばある…かな?)
episteme

2021/05/21 03:36

クリーン・ルームでの開発とか、やりたくないけど銀行とか防衛庁/警察庁のおシゴトだと...
stdio

2021/05/21 04:47

私もカンニングし放題でないとプログラムなんてやれていません! クリーン・ルームでの開発も外で作って、中で動作チャックみたいな感じではないと想定されます。
dodox86

2021/05/21 05:03

「カンニングしないとプログラミングできない」と言う悩みではないと思いますよ。問題を理解し、自力でロジックとコードを作り上げることができない、と言うことだと思います。クリーン・ルームのような環境ではできればやりたくないと言うだけの話で、経験者であれば不自由はあれども結果は出せるのだと思います。(最低限のリファレンスはあるのでしょうし)
dodox86

2021/05/21 05:22

私のコメントより: > 問題を理解し、自力でロジックとコードを作り上げることができない、と言うことだと思います。 などと勝手に拡大解釈してコメントしてしまいましたが、間違っていたらごめんなさい。>質問者meacrevさん まぁ、「実践」と書かれているものがどういうレベルのものを想定されているか私も気になりました。過去質問で投稿されているような問題や、有名な「FizzBuzz」のようなものを想定されているのではと思いました。
stdio

2021/05/21 05:29 編集

良いご意見です。単に私がクリーン・ルームのような環境ではやりたくないだけです。 何か自分でアプリでも作ってみるのがいいとは思います。 正直質問者の投稿文を見ていると、非常につまらなさそうな作業をしているだけのように感じました。
Zuishin

2021/05/21 05:31 編集

> 問題を理解し、自力でロジックとコードを作り上げることができない、と言うことだと思います。 過去の質問を見る限りそれで合ってると思いますよ。 これが先月の質問です。 https://teratail.com/questions/333516
stdio

2021/05/21 05:35

単純に私の意見になりますが、それでは身につかないと思います。 私も高校自体にそのような内容の授業を受けていましたが、今思うと本当に無駄な時間だと思います。いつ使うねんとばかり思っていました。
fana

2021/05/21 05:48 編集

> 正直質問者の投稿文を見ていると、非常につまらなさそうな作業をしているだけのように感じました。 そう感じます. なんというか,「問題を用意するために用意された問題」みたいなのよりも,現実問題(っていう言葉でいいのか?)に取り組んだ方が良いんじゃないかなぁ,みたいな.
tacsheaven

2021/05/22 01:28

そもそもプログラミングとはロジックを(プログラミング言語で)書き記すことなのですから、前提のロジックが作れないなら、プログラミングできるはずもなく。 設計図も描けないのに材料と道具だけ与えられて、家具(でも家でもいいですが)が作れるか、ってー話ですね。
Zuishin

2021/05/22 03:07

私のリンクした先月の質問ですが、自己解決で提示されているコードは他の回答者さんの提示したコードとほぼ同じで、数値が一つ違うだけのものです。 つまりこの質問者さんには、この二つのコードが違うものに見えていて、コードを書いたのは自分だと思っているわけですね。 日常生活には問題ないのに、なぜかプログラミングのロジックを認識できない人と言うのがいるようです。 二年間勉強してこれなので、もうモチベーションとか訓練とかいう話ではないようにしか見えません。
guest

0

子供の頃、レゴとかのブロックで遊びませんでしたか?

基本的なパーツのセットには多少の作例がついてたりして、そのとおりに作ればそういうものが出来上がるわけですが、じゃあそれを「覚えて」なにかを作るのか...そうじゃないでしょう? もちろん多少のパターンというかテクニックはあるでしょうが(最近のレゴは結構「これを作る」みたいなパッケージになっているのが多くてアレですね)。

プログラミングだってそんな感じです。特にC言語なんてのはブロックの基本パーツセットみたいなもので、出来合いの成形パーツなんて含まれていないキットです。覚えて作るのではなく、考えて目的の構造を作るのです。そこを勘違いして、「覚える」ことに注力しているとしたらいつまでたっても作例にあるものをトレースすることしかできないのではないでしょうか。

投稿2021/05/21 23:43

thkana

総合スコア7652

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

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

0

自分の場合は先輩方の書いた綺麗なコードを読んで真似する、という方法でしたね。

最初に仕事で書いたコードはC++で関数がすべて値で返していた、という今では恥ずかしいコードなのですが、先輩方のコードを見たり、いろんなサイトを見たりしてコードの書き方のコツがわかってきた感じです。

まずはいろんなコードを見てみたらいかがでしょうか?

個人的には以下がおすすめです。
・LINUXドライバーコード(初級〜中級者向け)
・Cプログラム診断室(http://www.pro.or.jp/~fuji/mybooks/cdiag/)
変な長文コードを綺麗に書き直した例がある。

投稿2021/05/21 02:43

rinjinto

総合スコア170

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問