FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

今日はマジメに日記書こう…マジメ、か?



いや、ただダラダラ日々を垂れ流すだけの日記だとアレだろう

オ・トワ・ラヴィー♪

俺はチョイチョイ自社の内定者勉強会に講師として参加してる。

内容はC言語っつ~プログラムだ。
パソコンの構造にも関わるような難しいほうの言語でな。

メッセの知り合い(俺と同じ短大でCを学び、上の大学に行ったヤツ)がメッセで

   ***(ハンドルネーム)@C言語の課題募集中

とか書いてたから問題出したんだよ。
そんときのチャットログを垂れ流そうと思う。


マムルにやられた!? の発言:
  ところで俺からも例題出そうか?
知人S の発言:
  おぉ。実際働いてる人からのってのは
マムルにやられた!? の発言:
  土曜日にC言語の講師しにいったばっかだ
知人S の発言:
  よさげだな
知人S の発言:
  ktkr
マムルにやられた!? の発言:
  ま、実際の業務にCなんて使わんのだけどねw
知人S の発言:
  (・ー・) オワッタナ
マムルにやられた!? の発言:
  んじゃそれなりに普通なのから・・・
マムルにやられた!? の発言:
  業務員の役職・従業員番号・住所・名前を何人分か入力して一覧のファイルをEXCELで読めるよう出力しなさい
知人S の発言:
  うお。これで普通っすか
知人S の発言:
  φ(`д´)メモメモ...
マムルにやられた!? の発言:
  出力書式は各データをTABで区切るようにすればEXCELで読めるぞ
マムルにやられた!? の発言:
  カンマでも良いけどデータ内にカンマ入れられたらジエンドだからな
知人S の発言:
  (((( ;゚д゚))))アワワワワ
知人S の発言:
  そうナノカ・・・
マムルにやられた!? の発言:
  つまり「画面開く~文字出力(名前を入力してくだしあ)~入力~文字出力(番号をにゅう(ry)
マムルにやられた!? の発言:
  これを繰り返して一人分データを取った後に「他の従業員のデータを入力しますか?」と聞いてYESNO
マムルにやられた!? の発言:
  上記処理をループしてNOと入力されたらどっかのフォルダにデータをTAB区切りで出力
マムルにやられた!? の発言:
  EXCELで呼んで区切られてれば成功だ
知人S の発言:
  そんなことまで出来るとは・・・
マムルにやられた!? の発言:
  実業務ではフォルダのパスや書式はレジストリか設定ファイルに退避しておくことが望ましい
知人S の発言:
  これ講師やった時に使ったのか?
マムルにやられた!? の発言:
  ん?生徒のはもっとムズイぞ
マムルにやられた!? の発言:
  全員出来てないけどなw
知人S の発言:
  工エエェェ(´゚д゚`)ェェエエ工
知人S の発言:
  ww
マムルにやられた!? の発言:
  恐らく上の問題で使うCでの技術は
マムルにやられた!? の発言:
  ・「安全な」標準入力の確立
  ・ファイル入出力
  ・ポインタ
  ・非参照型構造体
マムルにやられた!? の発言:
  この4点が解れば楽&綺麗に組めると思う
マムルにやられた!? の発言:
  わかんないのがあれば説明するぞ
知人S の発言:
  俺のあたまの上に白字で9999がでてきたぜ
マムルにやられた!? の発言:
  ww
マムルにやられた!? の発言:
  バグってんじゃね~かw
知人S の発言:
  大ダメージだ
マムルにやられた!? の発言:
  上記4点のドレがわかんないんだ?
知人S の発言:
  ぜ(ry
マムルにやられた!? の発言:
  4点が解ってこの問題を出されたヤツの発言は決まって「タルイっすよ~」なんだが
知人S の発言:
  ぶほ
マムルにやられた!? の発言:
  正直メンドイぜ
マムルにやられた!? の発言:
  んじゃ1点目の安全な標準入力から行こうか?
知人S の発言:
  たのむ~
マムルにやられた!? の発言:
  うい
マムルにやられた!? の発言:
  まずお前はキーボから何か入力するPGを作るとして何の関数を使うよ
知人S の発言:
  関数か・・・printfだっけ?scanfとかそこらへんだっけ
マムルにやられた!? の発言:
  実はscanfをキーボ入力時に使用するとひどい目にあうってのはわかるか?
知人S の発言:
  いや
知人S の発言:
  はじめて知ったぞえ
マムルにやられた!? の発言:
  例えば20文字入力せよ、みたいなことをする場合
マムルにやられた!? の発言:
  20文字以上入力することが可能になってしまう
知人S の発言:
  そんなふうになってしまうとはw
マムルにやられた!? の発言:
  更にscanf("%s", aaa)とPGを書いた場合、ユーザは入力の最後にエンターキーを押すよな?
知人S の発言:
  押すオス
マムルにやられた!? の発言:
  scanfには入力最後の\nを取得する機能がない
知人S の発言:
  オワタ\(^O^)/
マムルにやられた!? の発言:
  つまり、2回目に何か入力させようとした場合、1回目の入力で取り忘れた\nのみを取得してきてしまう
マムルにやられた!? の発言:
  要するにscanfをキーボ入力で使用してはならないってことだ
知人S の発言:
  なる
マムルにやられた!? の発言:
  解決策をgoogleや本で見ても多分載ってないぞ
知人S の発言:
  なんだってーーーーーーー
マムルにやられた!? の発言:
  結構根本を説明することになるし、対応策が多岐にわたるからだ
マムルにやられた!? の発言:
  一つ解決策を教える
マムルにやられた!? の発言:
  scanfでなく、fgetsを使用する方法だ
知人S の発言:
  どっかできいたことある関数だな
マムルにやられた!? の発言:
  fgetsは入力される際、文字数の限界地を指定出来る
マムルにやられた!? の発言:
  ちょっとニュアンスが違うな
マムルにやられた!? の発言:
  「指定された文字数分バッファからデータを取得する」が正しいな
知人S の発言:
  くぅ~
マムルにやられた!? の発言:
  バッファってのはわかるか?
知人S の発言:
  あぁ
知人S の発言:
  動画とかのバッファならw
マムルにやられた!? の発言:
  アレに近いな
マムルにやられた!? の発言:
  キーボードから入力されたものは一旦バッファと呼ばれるタンクに溜められる
知人S の発言:
  ふmふm
マムルにやられた!? の発言:
  scanfやfgetsはバッファからデータを持ってきてるってことだ
マムルにやられた!? の発言:
  で、「指定された文字数分バッファからデータを取得する」って発言を考えてる
マムルにやられた!? の発言:
  つまり、ユーザが「12345aaaaa」と入力したとしよう
知人S の発言:
  (゚д゚)(。_。)(゚д゚)(。_。) ウンウン
マムルにやられた!? の発言:
  バッファには「12345aaaaa\n」と保持される
マムルにやられた!? の発言:
  scanfでデータを取得した場合
マムルにやられた!? の発言:
  取得結果は「12345aaaaa」となり、バッファには「\n」が残ってしまう
知人S の発言:
  !!!
マムルにやられた!? の発言:
  同じプログラムでscanfを2回実行した場合、2回目のscanfでは取り残した「\n」を取得してきてしまい、ユーザが入力出来ない事態が発生してしまうわけだ
知人S の発言:
  なるほど
マムルにやられた!? の発言:
  では、fgetsの場合を書いてみる
マムルにやられた!? の発言:
  取得データは上のと同じな?
知人S の発言:
  おk
マムルにやられた!? の発言:
  1回目のfgetsで5文字取得する、という制限を設けたとしよう
マムルにやられた!? の発言:
  更にこれをループさせる
知人S の発言:
  おおん
マムルにやられた!? の発言:
  1回目のループで取得した値は「12345」、バッファには「aaaaa\n」と残る
知人S の発言:
  んだんだ
マムルにやられた!? の発言:
  2回目のループでは取得した値は「aaaaa」、バッファには「\n」が残る
マムルにやられた!? の発言:
  3回目のループでは\nを取得し、バッファは空
マムルにやられた!? の発言:
  ループの条件を「取得した文字列中に\nがあった場合、ループを終わる」としておけば安全に入力を行える
知人S の発言:
  ぴきーん
マムルにやられた!? の発言:
  だがここで一つ問題がある
マムルにやられた!? の発言:
  際限なく入力出来るってことは際限なくデータを保持しなきゃならんってことだ
知人S の発言:
  あっタンクに限界があるってことか?
マムルにやられた!? の発言:
  つまり名前を入力させた場合、5文字の人もいれば、「寿限無寿限無・・・」な人もいる
マムルにやられた!? の発言:
  いや、タンクに限界は内
マムルにやられた!? の発言:
  C言語内で可変長文字列を保持するにはポインタが不可欠ってことだ
マムルにやられた!? の発言:
  どんな文字列が来ても対応できる配列を持って置く必要がある
マムルにやられた!? の発言:
  そこでポインタだ
知人S の発言:
  おっ、繋がりがでてきた
マムルにやられた!? の発言:
  先刻のループ内には当然、取得したデータを保持するコードを書く必要がある
マムルにやられた!? の発言:
  取得したデータの文字数+今まで取得した文字数 これをメモリ上に確保することになる
マムルにやられた!? の発言:
  ここまで解るか?
知人S の発言:
  ちと脳内処理中
知人S の発言:
  まぁぼやぼやっと感じだがメモリにいろいろ確保が必要だってのは納得
マムルにやられた!? の発言:
  うn
マムルにやられた!? の発言:
  上記処理で領域を取り直す必要が出るってのはわかるか?
マムルにやられた!? の発言:
  つまり、char aaa[100]; これでは100文字をオーバーする可能性が出る
知人S の発言:
  あぁ
知人S の発言:
  何回もループしてたら
知人S の発言:
  あふれる罠
マムルにやられた!? の発言:
  char *aaa;
  *aaa = (char *)malloc(100文字分領域確保)

これでも配列と変わらん
マムルにやられた!? の発言:
  while(先刻のループ){
    fget
    aaa = (char *)realloc(今まで取得した文字数+今回取得した文字数)
    取得した文字列を代入
  }

  コレが正しい
知人S の発言:
  ほほぅ
マムルにやられた!? の発言:
  reallocってのは解るか?
知人S の発言:
  そこで詰んでた、mallocとかreallocってなんぞや
マムルにやられた!? の発言:
  ポインタってのはただ宣言するだけではメモリを保持しないんだよ
マムルにやられた!? の発言:
  ちょっとこれもニュアンスが違うけどな
マムルにやられた!? の発言:
  性格には「ポインタとはint型の変数のこと。ポインタにはアドレスを入れる」これが正しいかな
マムルにやられた!? の発言:
  で
マムルにやられた!? の発言:
  「メモリに任意の量の空きを確保し、先頭アドレスを返す」
  これがmalloc
知人S の発言:
  ちと上の文見直してる
マムルにやられた!? の発言:
  ドレだ?
知人S の発言:
  char *aaa;
  *aaa = (char *)malloc(100文字分領域確保)

マムルにやられた!? の発言:
  ちなみにそのコード間違ってる。2行目の先頭の*を消してくれ
知人S の発言:
  おk
マムルにやられた!? の発言:
  そうすると、だ
  1行目:ポインタを宣言
  2行目:mallocで確保した空きの先頭アドレスをaaaに代入

  こうなるのは解るか?
知人S の発言:
  なんとなく
マムルにやられた!? の発言:
  ま、この辺は結構難解だから時間を掛けて理解すればいいw
知人S の発言:
  おう
マムルにやられた!? の発言:
  で、reallocの場合は先刻話した通りだ
マムルにやられた!? の発言:
  確保したメモリを取り直す
マムルにやられた!? の発言:
  100文字分確保してたけど更に多く必要な場合なんかに使う
知人S の発言:
  なるなる
マムルにやられた!? の発言:
  んじゃコイツを見直してみる
マムルにやられた!? の発言:
  while(先刻のループ){
    fget
    aaa = (char *)realloc(今まで取得した文字数+今回取得した文字数)
    取得した文字列を代入
  }

マムルにやられた!? の発言:
  つまり毎回取り直してるわけだな
知人S の発言:
  うm
マムルにやられた!? の発言:
  ちなみに入力関数scanf_kaiみたいな感じで関数化して置いておくと便利だぞ
マムルにやられた!? の発言:
  毎回処理書かなくて良いからな
マムルにやられた!? の発言:
  で、上記のようにすれば「どんな文字数でも型がどんなものでも取得できる」
マムルにやられた!? の発言:
  1個目の問題がやっと解決出来たわけだ
知人S の発言:
  これでやっと一個かwww
マムルにやられた!? の発言:
  ・「安全な」標準入力の確立
  ・ファイル入出力
  ・ポインタ
  ・非参照型構造体

マムルにやられた!? の発言:
  これだけあるからw
マムルにやられた!? の発言:
  ま、ファイル入出力は普通に出来るだろ
マムルにやられた!? の発言:
  3個目と4個目が混合問題って感じなんだがな
知人S の発言:
  ><
知人S の発言:
  (;^ω^)少しずつやるか・・・




こんな感じ。
ま、俺でプログラマとしては
  「使えね~けどとりあえずキープしとくか」レベル
だと思われるから実際はもっとウマイ方法があるんだろうよ。

ところでガラにもなく現在所持してるトレンチコートに合う帽子を買おうかと思う。

身なりに関しては完全に門外漢っつかどうでもいいって感じで生きてきたしセンスおかしいのも自覚してるんだが欲しい帽子とコートの画像を貼ってみる。

…今更だがコレが似合う20代前半って…ヤバくね?
一応、2,3ヶ月後の体脂肪も筋肉に変わってガタイ良くなった頃に着ようと思うんだが。

冷静に考えたら着るの冬だけだし来年になんのか。
ま、いっかw

comment

Secre

amazon.com
amazon.com(単一商品)



プロフィール

NAME:
マムルにやられた!?

COMMENT:
メインはXBOX360とPSP
後は仕事の愚痴とプログラム

peercast配信を行っております。
平日21:00~0:00
休日はランダム

mail : mamuru820@gmail.com

最近の記事
月別アーカイブ
カテゴリー
RSSフィード
ブログ内検索
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。