今からC言語の勉強を始めます。
4月から入社する会社の命令で5月に基本情報技術者の資格をとるためです。
これから一日1回にないし、2回ここに覚えたプログラムを貼り付けます。
見守っていてください。
sage推奨
2 :
李 暴威:02/01/26 01:20 ID:???
がんがれ
ok
2
5 :
みそしれる:02/01/26 01:21 ID:???
る
6 :
がんがん:02/01/26 01:21 ID:???
がんばれ。
dat逝きそうです!!!
ヤバいです隊長!!!!
俺も参加
9 :
名無しさん?:02/01/26 01:22 ID:7xV6hZVF
COBOL頑張ります
ベーーーーーーーシックにしろ
かちゅお気に入りにしてみた。面白くなることを祈る
12 :
課長。:02/01/26 01:23 ID:RCOxsTJx
#include<stdio.h>
int main(void)
{
printf("警報!!\a警報!!\a\n");
}
なぜラウンジ?説明を
「CプログラミングFAQ」
これ最強
後、UNIX板かプログラミング板に移ることを進める。
ここはかなり危険
指摘があれば、2ch的なことであれ、プログラム的なことであれ、歓迎です。
じゃー酸化。
>>15 専門板で、こういうのってボコボコに叩かれそうじゃない?
厨房とか何とか言われてさー いいんじゃんsage進行だし
どうせだからみんなで勉強しようぜ
まだ指摘もクソもないだろ
>>19 イイ事言った。
誰か優しい先生は居ないもんかねぇ
24 :
名無しさん?:02/01/26 01:37 ID:7xV6hZVF
私は優しいですが知識はありません
while(1)
{
printf("ゴルァ!!");
}
これ最強
ちなみに基本情報技術者は5月じゃなくて4月だゾ
プログラマですがヘボです。
漏れが会社入った時に言われた事
漏れ「俺C言語なんかprintf位した分からないっすよ?」
上司「恐らくprintfはこの業務じゃ一度も使うことは無いよ」
漏れ「・・・。」
上司「そもそもC言語なんか言葉に過ぎないから教えてるヒマなんか無いよ」
それから4ヶ月、確かにprintf一度も使ってません。
学生時代に憶えた事ほとんど使えねえぞ、業務じゃ。
や、現場のノウハウって大事なんだねやっぱ。
ちなみに俺高卒。いわゆるDQNです。
>>13 return(0);
つけましょう。
ワーニング出るよ
わし高専卒。いわゆるクソヲタです。
そもそもvoidで切っとけばいいだろ。
>>31 メモ帳で編集してコンパイル→リンク→実行
#include<stdio.h>
void main()
{
while(0)
{
printf("ゴルァ!!");
}
}
もしくは
void main()
{
int a;
while(1)
{
a++
}
}
まちがってたらごめんねー
いきなりごめん
a++のあとに;付けといて
あとwhile(0)じゃなくてwhile(1)だから
#include <stdio.h>
void main(void){
printf("Hell World!");
}
なつかしいやね。
おいおい、これいつまで煽られれば終了ですか?
そうですね、ヘルワールド。
>>28 Cが修得できないのは
一番始めにprintf("オマエモナー");
にしちゃったからですか?
#include<stdio.h>
void saiki();
void main(void){
saiki();
}
void saiki(){
saiki();
}
一番初めにコレを作ったせいだと思います
いいよ(←偉そう)
47 :
名無しさん?:02/01/26 03:05 ID:G3UI0BEl
俺も勉強始めます。
無職板にこういうスレあったなぁJAVAの奴どうしたんだろう
2種情報で権語問題にCを選択したけどかんたんだったべ
K&Rに普通に出会える人間なら、言語に関しては勉強する必要ないべ
アリゴリズムの有名どころ数十個を頭に入れておいたほうがいいべ
知識問題は暗記するしかないべ
これから一日2問やって、全出題パターンを網羅すれば
合格は簡単だべ
コンパイル→リンク→実行
これなんでつか?
#define TRACE(arg, fmt) printf("Trace: " #arg "=" #fmt, arg)
資格やらを持っているからと逝って、その個人が仕事できるとも限らない
基本情報みたいな入門検定?だと尚更だ
かく言う漏れは、2種は持ってるが仕事は出来なかった奴の口だ
ソフト会社なら、新技術についてけるようそっちの勉強もがんがれ
授業で習うこと、Cの入門書に書いてあることと
業務でつかうレベルの乖離は凄いな
オススメ:「Cプログラミング診断室」
54 :
ねぇ? ◆w.CBecv2 :02/01/26 03:41 ID:ia6wxaCl
void main()はDQN。
バッチ屋が困る。
>>53 C診断室はオンラインで無料公開してるよね。
あれは面白くてためになるから一度読んだ方がいいよな。
>>55 同意。
あれの作者 藤原氏の著作は、どれも一読の価値ありだよね。
逆に読む時間がもったいないのは、Cマガでまだ連載してる結城の本。
>>54 フィルタ作ってやってけてるソフト会社ってあるんすか?
58 :
名無しさん?:02/01/26 04:10 ID:S8XuLAjN
#include<stdio.h>
main()
{
printf("こんにちは");
}
これぐらいしか分からん。
<stdio.h> って何だ。standard i/o =標準入出力ってなもんか
60 :
ざき:02/01/26 04:17 ID:???
あ 今日(正確には昨日)漏れもCはぢめようとおもって本かったんだった
(C++だけど)
やったことある言語はPerlとJSぐらいしか。。。。
がんがろう
つーかc#やるわ
OMANKO=&chinpo;
63 :
信州人:02/01/26 06:57 ID:???
1 が間違ったこと覚えると困るので
>>54 に補足させてもらう
main()
int main()
int main(int argc, char *argv[]) ←他、同型の宣言もあり
が、有効な形式
void main()
は、組み込み以外では絶対にだめ
65 :
cc:02/01/26 10:43 ID:???
>>49さん
正確には「アリゴリズム」というのですか?
私はずっと「アルゴリズム」だと思っていました
もう少し勉強します
66 :
名無しさん?:02/01/26 13:52 ID:WCHNQKo6
頑張れよ
俺も勉強しなきゃ。
基本情報受けようか迷ってる。
_EOF_
70 :
原 哉文:02/01/26 14:51 ID:B9GrLiT5
-SEX-
#include<stdio.h>
main()
{
int no;
puts("整数を入力してください:");
scanf("%d",&no);
switch(no%2){
case 0:puts("偶数");break;
case 1:puts("奇数");break;
}
}
「こんぱいる」ってどうやってやるの?
何かソフトみたいなの使う?
>>72 コンパイラならベクターあたりに落ちてるよ。使い方はそれぞれのコンパイラの説明書を参照。
>>72 Microsoft Visual C++
とか
いいなあこのスレ。ラウンジでやるあたりが。
俺も趣味でもっと勉強しよう。1はがんがれ。
76 :
名無しさん?:02/01/26 15:18 ID:Bsbat1oH
>>73-74 やっぱメモ帳に貼り付けて拡張子をhtmlに変えるとhtmlができるのとは違うんだね
漏れも勉強してみるか
>>77 俺もこのメモ帳に張ってみたりしてたw
ソフトが必要なんだーね
>>72 >>77 >>78 --------------------------------------------------------------------------------
LSI C-86 v3.30c 試食版
http://www.vector.co.jp/soft/maker/lsi/se001169.html LSI C-86 Ver 3.30 試食版は、当社の製品である MS-DOS 用セルフCコンパイラ LSI
C-86 Ver 3.30 から、「試食」のためには不必要と思われるファイルをはずしたサブセットで
す。サブセットとはいえ、コンパイラ自体の制限は S モデルしかコンパイルできなくなってい
るだけで、その他の機能は製品版とまったく同じです。
また、機種依存になるようなコードは生成しませんので、MS-DOS Ver 2.11以上、メモリ
384KBytes 以上の環境であれば、たいていのマシン上で動作するはずです。
LSI C-86 超簡単セットアップ
http://www.vector.co.jp/soft/win95/prog/se037541.html このプログラム(?)は エル・エス・アイ ジャパン(株)の 無償で配布されているC言語コンパイラ
LSIC-86 Ver 3.30c 試食版をMS-DOSの知識がない人でも簡単にWindows95 上でセットアップが
できるようになっています。
もちろんシステムファイルなどはまったくいじっていませんのでシステムに悪影響を与えること
は全くありません。さらにコンパイルもとても簡単に行うことができるようになりますのでC言語を
これから勉強しようと思っている人には最適だと思います。
手っ取り早く言うと、「だれでもC言語開発環境が持てる」ということです。
--------------------------------------------------------------------------------
とかはどう?あんまり突っ込まないでね。
>>74 よく知らんけど、CとC++は違うんだろ?
同じコンパイラーで通るのかな?
C++はCが拡張されたの?
>>80 >>81 C++はCのスーパーセット。わずかに互換性のないところもあるけどね
そいやーーーーー
>>32 なんだ、こいつ高卒かよ。どうりでな・・・・
85 :
名無しさん?:02/01/26 17:51 ID:Y4LTZzrA
基本情報処理とるだけなら、アセンブラが一番簡単だよ。
素人はvbでもやってなさいってこった
#include <stdio.h>
void main(void)
{
int a,b,c;
float sum avg;
[ @ ]
sum=a+b+c;
avg=sum/3;
printf( A );
printf( B );
}
キーボードから3つの整数を入力し、その合計と平均を表示するプ
ログラムなんだけど、@ A Bわかる人いる??
>>86 VisualBasicってのは駄目なの?
理由を教えてくん
>>87 @使ってるようじゃプログラムは書けねえ!
>>1 UZEEEE!!! ここでやるんじゃねーよ!! ここで!!
あとなぁ ちょっとC言語の知識あるヤシが調子こいて自慢げにレスすんじゃねー!!
91 :
:02/01/26 17:55 ID:???
main
つーかVBくれ。そしてらやる。
Prind
問題
int a=0;
a=a++;
a=?
>>90 uzeeeeeeeeeeeeee!!!!!!!!邪魔スンナ糞ボケ!!
a=a++;??
無視かよっ!!
どうせ、言えねーんだろ!
素人は口出すんじゃねー!
>>94 先生!そういうのを待っていたんだ。
答えはわかりません。 1?
いや、だから
a=a++ってのはどういう意図があっての事?
VBは糞という定説をよく聞くが。
VBなんて誰でも使えるべ
a=a++;と
a=++a;では違うんだな
sageでキレている人がいますな。
vbを貶すのは分かるけど、ビジネスアプリならCまで必要ないことが多い。
つーか理系ゴリゴリはこれだから歯車で終わるんだ
VBを馬鹿にしちゃいけないよ。
VBってつまりVirusBastardのことか!
だから糞なんだ
でもVB欲しい。VC++よくわからんです。
>>101 使えるVBよりは
使えないC言語の方が糞
エラソーな事言わずに、書ける言語をひたすら書けや
VB=お子さま向け
VBマンセーなやつ=クソ
VBクソとゆうやつ=もっとクソ
なんか、いいな。
俺も勉強してみよ。
>>101 俺もよく知らんが、自分のためになんか作る分には便利だって知り合いが言ってた。
え?
メモ帳でやってるの?
ツワモノだなぁ。
vbなら、Excelとかwordがあれば、まぁ練習できる。あとvbsでも
>>104 ウキィーー---------------!!!!!!!!!!キサマタガチネ!!!!!!!!!!
VB使うなんて見てらんない
参考図書まで紹介してあるな。
いいスレだね。
ま、がんばって。
で、ウィルスバスターのことは無視ですか?
>>111 そりゃBasic時代じゃねーのかオヤジ
おいらも会社の課題やらねば
えくせるでまくろのべんきょうちゅう。
129 :
名無しさん?:02/01/26 18:03 ID:qeBLiFuM
>>94が未だにわかんない
a=a++でもa=++aでも同じじゃないの?
b=a++とb=++aは違うのわかるけど・・・
131 :
(・∀・)カルメン ◆kuukifL. :02/01/26 18:04 ID:SBWNveao
あれだろ、VBってのはインタプリタ言語で、
C言語はコンパイラ言語なんだろ!
だから書くプログラムによって言語は選んだ方が良いんだろ!
お、はまみじゃん。
やっぱこの時代
Java言語でしょw(逝け
勉強中なんだわ。
つうか、言語なんて所詮道具
その場で最も効率のいい言語を選択していけば良いだけなのでは?
>>131 おまえ、なんかのプログラミングの本、
2,3ページで挫折したクチだろ?
>>135 今、学校で習ってるんだよね、
I-APPのNTT特許のコードだけど
C言語なんて一つもしらないなぁ・・・
勉強しようかな・・・
必要なさそうだ、やめよう
お前ら言語ソフトにしか頼れねぇーのかよ
俺なんてバイナリで直だぜ
vbはver5かver6でネイティブ・コンパイルになったような記憶が
ランタイムは見に行くからその分は遅いらしいけど
CよりC++のほうがわかりやすいんだが
最初に始める言語ってPerlが良くない?
Cにも意向しやすいし
聞ける相手が沢山いるし
フラッシュってソフトないと作れないんでしょうか?
つーか、Cを勉強しようぜ
>>131 昔のVBはインタプリタをEXEに含んでたけど
いまは違うですよん。ま、ネイティブコード出力を
選択しないこともできるけど・・・
むしろ悩ましいのはランタイムライブラリのジレンマ。
その点はでるふぁい(スペル忘れちった)の方が偉い。
僕は断然Java(オブジェクト指向)がお勧めだな。
手続き型言語にはもう戻れそうにない・・・
pearlなんて糞
学ぶ順番はどうでもいいのでは?
必要なものを勉強するのがよろし。
UNIXはどうよ?
158 :
(・∀・)カルメン ◆kuukifL. :02/01/26 18:08 ID:SBWNveao
>>149 違うのかよ!ゲーム制作技術板で聞いて来た話なのに
ということは今はVBでも結構なスピードが出せるのかしら
一太郎はどうですか?
花子の方が高機能
>>150 目を覚ませ! Javaの現状をしってるんか?
金銀パール、プレゼントォ♪
while(1)
printf("激しく同意\n");
Perlはサーバサイドの言語としては最高!
ま、よっぽどパフォーマンスが要求されるときはCでこちこち書きますけど・・・
javaはほら・・・携帯とかで使えるよ
荒れてきたな。
169 :
cc:02/01/26 18:10 ID:???
整数型の選び方
32767より大 or −32767より小の値が必要→long使用
メモリ効率不安→short使用
どーでもえー→int使用
訂正あったらおながいします
C#てなんすか
171 :
150:02/01/26 18:10 ID:???
>>162 うげっ、知らない。なになに?
マジレス希望。
一つ聞くがWindowsXPってCで作ってるのか?
/⌒~~~⌒\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ ( ゚>t≡ )y─┛~~ <
>>153どうも。
(_ ノγ U ∩_∩ ) \________
α___J _J
175 :
名無しさん?:02/01/26 18:11 ID:V8NPzJ8U
オレはPTOSが得意だよ
まあ俺はPerlしか出来ませんけどNE!
まあ実はPerlも出来ませんけどNE!
WindowsNTはC++で作ったと本で読んだ
178 :
cc:02/01/26 18:12 ID:???
>>177 ほー
Windowsのソースってどこで手にはいるの?
>>170 MicroSoftの新しい言語だよ C++より生産性が高くて高速・・・とか
プログラマって何で態度でかいんですか?
>>158 別にウソつかれたわけじゃないと思うけど、
そのあたりちゃんとしたことを知らない人が多いのは事実。
もっとも、よほど処理速度を重要視するならCでコアを作って
GUIだけVBで用意するほうが良いです。
やべぇ。sage推奨だった。
185 :
cc:02/01/26 18:14 ID:???
>>181 プログラマでないけど態度でかくてスマソで首吊って逝ってきます
>>181 自分の思い通りに動かすことができるのがプログラム。
思い通りにいかないのが人間関係。
気に食わないので文句を言う。
∴態度がでかい
プログラムが動かないときの、プログラマの言い訳ベスト20
20.それは妙だ…
19.その操作は、誰も試したことがなかったんだよ
18.昨日は動いたよ
17.そんなはずないよ
16.ハードウェアの問題に違いない
15.クラッシュしたときに、何かタイプミスしなかった?
14.君のデータの方がおかしいんだよ
13.そこのコードは、もう何週間も触ってないよ
12.君の使っているのは、変なバージョンのやつだろ?
11.単に不運な偶然が重なっただけだ
10.そんなに全部のことをテストできるわけないじゃないか
9.これがあれの原因であるわけがない("THIS can't be the source of THAT.")
8.それはちゃんと動くんだけど、いままでテストされてなかっただけなんだ
7.誰かが私のコードをいじったに違いない!
6.ウィルスのチェックをちゃんとしたかい?
5.仮にそれがちゃんと動かなかったとしても、何かまずいことがあるかい?
4.君のOSで、そのバージョンを使ってはいけないんだよ
3.君の使い方が悪い。何故君のそのやり方で使わなきゃならないんだ?
2.プログラムが壊れたとき、君はどこにいたんだ?
そして、プログラムが動かないときのプログラマの言い訳ナンバー1は:
1.私のマシンではちゃんと動くよ
ちんこデカイ。
test
190 :
171:02/01/26 18:18 ID:???
>>182 量が多いのでまたゆっくり見たいと思います。
ありがとう。
でも、少し見るのが怖いな・・・
あの、CとかVC使える人は具体的にどんな風に覚えたのですか?
やっぱり本とか読んでですか?なんて本がいいですか?
おすすめの本は、このスレにもいくつか挙がってたよ
>>193 おれはさいしょに”はじめて読むC言語”よんだ。
覚えたところで使わないって・・・
Cプログラミング診断室はよかったです。
>>53 さんありがとうございます。
201 :
:02/01/26 18:25 ID:???
VBでも独学は厳しいyo・・・
だれかおせーてください
技術評論社のはじめてのCも入門書としてはオススメ
>>201 何がわからないか書け
そうしたら親切な人が教えてくれるはず
>>201 まずは脱いでもらおうか
話はそれからだ
>>193 C言語は覚えなきゃいけない約束が少なくてとっても
勉強しやすいですよん。
その上非常に大事な要素が多いしね。
WindowsとかのGUIを扱うのはまた別の知識が
必要なので切り離して考える方が混乱がなくてイイです。
コンソールアプリケーションから始めてみたら?
身近なところで自分の生まれた日の「曜日」の計算でも・・・
C覚えたら何ができるの?
207 :
94:02/01/26 18:28 ID:???
いや、これはa++,++aの違いを学ぶ問題には適さない、ただのネタです。
Cの場合、環境によって答えが0だったり1だったりします。
Perl, Java, JavaScriptは共にaは0です。C言語は定まりません。
ちなみにJavaScriptでの確認↓
<script type="text/JavaScript"><!--
var a = 0;
a=a++;
document.write( "a="+a );
//-->
</script>
VBで使える物ください
$|=1;
みたいのがダラダラ続くやつ
あと「手続き型プログラミング」と「オブジェクト指向プログラミング」が
比較して論じられることが多いけど、「手続き」の逆は「イベント駆動」です。
以上、日常生活に役に立たない知識でした。
213 :
名無しさん?:02/01/26 18:41 ID:3gK/MrbH
おれも来年から就職でCを勉強してるんだけどなかなかつづかないよね
とりあえず頑張れ1
やっぱ、CやPascalの壁はポインタだろうな。
こればっかりは本だけだとなかなか理解が難しいと思いますね。
かと言ってこれが出来ないとC言語経験者とは多分に言えない。
頑張れ
>>1
なんかなつかしいけど、独断によるCを勉強するときのポイント
・標準関数を暗記するのは時間の無駄遣い。
受験勉強じゃないんだから必要なときにリファレンスを読むのが正解。
・ポインタの概念は徹底的に身につけましょう。これは暗記じゃダメ。
・グローバル変数にはできるだけ頼らないコーディングスタイルを
覚えましょう。また、参考書を買うときはサンプルコードをみて
まずその点をチェックするのが吉。(高いもんねぇ・・・)
>>214 あ。かぶった(w
(ご指摘のとおりですね)
俺の場合ポインタよりも構造体の方がわかりにくかった
ネタじゃないんですけど・・・
マジでVBで使える$|=1;みたいなのください
なんでもいいです
つか、未だに共用体の意味がわからん
>>218 標準出力のバッファリング抑制の話題とVBと
どのような関係が??
>>220 共用体っていうのは同じデータ領域を型の異なるメンバーから
バッファレベルで柔軟に参照するための便宜ですね。
プロのプログラマさんはどんな業務をやってらっしゃるんですか?
差し支えなければお願いします。
再帰、覚えると面白いよね!
ネストが深すぎますいはhふぁsdぎhdv
>>222 やっぱりそういうことで良いんだよね
最初、メモリをケチるために使うとか教わってて、全く意味不明だった
>>223 なんだか恥ずかしいですが・・
MS-DOS全盛期にはCでアプリを一杯書いていました。
Windows3.1が出た頃からはVC++をVBを、WWWが騒がれだした
ころからUNIXでCやらPerlやらでサーバプログラミングをやり
現在はそれなりに融通のきくSE兼PGとして楽しく働いていますです。
Cの勉強を始めた工房ですが、引数の意味がわからないんです。入門書も
買ってみたのですが載ってませんでした。
どなたか意味を教えてください。
>>228 引数の解説のない入門書ってどんなのよ?
関数に関する記述が一切無いの??
>>224 うん。再帰処理をきちんと書けるかどうかが
プログラマ適性を判断するためのひとつの
指針になると思う。
>>227 尊敬します。 ボキのアニキになってください
>>227 おい!俺の勘違いかも知れんが、
SEってプログラマーにプログラムを注文するんだよな?
しかしSE拳プログラマってことは、自分で自分に注文するってことか!
じゃあもしかして職業二つ分の給料がもらえるのか!?
>>228 int myfunc( int number ); の、「int number」のことを
「関数の引数」といいます。
>>232 ヴァカ! ヴァカ! ヴァカ! ヴァカ!
235 :
228:02/01/26 19:13 ID:???
236 :
232:02/01/26 19:14 ID:???
くそ!あからさまにバカっぽい書き込みをしてみたが、
いざヴァカと言われると結構傷付くな!
237 :
228:02/01/26 19:14 ID:???
>>232 あはは。これは完全に私見+経験論ですが、
コードの書けないSEというのはどこか気の毒なものです。
でもそういうSEさんもいます。
それはそれでちゃんとSEの仕事ができるのならOKだけどね。
(もっとも、どこまでがPGでどこからがSEかっていうのは
日本の場合もっぱら単価計算のためにあるようですが)
コーディングレベルのことと顧客対応・仕様調整をふくめ
それなりに全部やれるのは、仕事としては結構やりやすいですよ。
プログラムの書けないSEがいるんだろうか・・・
ちゅうか居たら(・A・)イクナイ
>>235 正直、最初は僕も意味がわかりませんでした。
ガンバレ!
>>236 すっげーよく分かる(笑)
でも、
>>234ぐらいは全然マシ。
マジレスで長々と書かれるとかなりショック!
俺の書き込みが悪かったんだと反省しましたが。
おぉ、なんかレスが増えてる。
>>201 ちなみに漏れは小学校の頃にVB独学で始めましたが?
プログラムできるかできないかは適性の問題
247 :
232:02/01/26 19:25 ID:???
>>239 じゃあSEでプログラムが書けるのは、至って普通のことだったのか。
そりゃ人に注文して間違ったものを作られるより、
自分でイメージを形にする方が楽だもんな!
俺が世間知らずだっただけかよ。ちぇ。
>>233 もっとわかりやすく教えてやれよ
お前プログラマーなんだろ?
そんな教科書みてーな事教えんだったらお前の好きな参考書でも薦めてやれ
>>247 でも、大きな会社だと入社1年目からSEになることも
あるよ。(コード書けなくても仕事のよくできるSEもいるしね)
問題は、どっちもできたとするとサラリーマンである以上
単価の稼げる方の比重が高くなることかもしれません(笑
コーディング出来ないSEも恥ずかしいと思うけど。
少なくとも
>>245と俺は肌が合いそうにないな。
小学校からプログラムやってたってどんな奴?キモイ.
253 :
cc:02/01/26 20:12 ID:???
独学、これに尽きる
間違いあっても責任の押しつけようがない。
オマエラ1を無視しすぎ。別に悲惨な1でもないのに、
クダラネー煽りごっこなんかでスレ潰すな。
>>254 (゚Д゚)ハァ? (゚Д゚)ハァ? (゚Д゚)ハァ?
mes"逝って良し"
<? php_info(); ?>
Msgbox "逝って良し", vbCritical, "
>>1は"
>>254 リア厨ですか?
別に
>>1に煽りくれた覚えは全くないのですが。
漏れは無視した覚えありませんが?
漏れが思うにね、最近のヤツは憶測が多すぎると思うんですよ。
VBがダメだのなんだのってさ。declareも使ったこと無いヤツがVBについて
どうのこうの言うなっつーの。
そろそろ今日の1の勉強の成果が気になるところだが
1はひょっとして立て逃げしたんじゃないのか?
ああ、そうか今日はもう一個出してるのか…
どうでも良いが偶数奇数判定でモジュロ演算子使うのはいかがなものか?
難しくなってきました
>>71に関して
Cっ偶数奇数判定に no&1 って使える?
すみません。私は
>>1じゃないのですが、質問があります。
今、Cで電卓をなんとか自力で作っている最中なのですが
「1.2+1.8=3」という風に、小数点以下がない場合がうまくできません。
「1.2+1.8=3.0」となっている状態です。
最善の方法はなんでしょうか?
#include<stdio.h>
main()
{
int i,j,height;
puts("ラウンジのみんなでピラミッド作ろうよ!");
printf("何段ですか?");
scanf("%d",&height);
for(i=1;i<=height;i++){
for(j=1;j<=height-i;j++)
putchar(' ');
for(j=1;j<=i*2-1;j++)
putchar('*');
putchar('\n');
}
}
これで手持ちの参考書の、
1、まずは慣れよう
2、演算と型
3、流れと分岐
4、流れと繰り返し
の4つが終わりました。明日は
5、配列
6、関数
をやります。かなりハイペースかもしれないです。もつかな?
分岐ってif文とかはやんないの?
お、1登場!
で、これはどんなプログラムなんだ?
なにやら楽しげだが…
もうCOBOLはダメですか?
1結構がんばってるな
この調子でドンドンソース書いて行け
配列は最高に面白いぞ!!!!!!!!!!
関数はもっと面白いぞ!!!!!!!!!!
そういや配列とか行ったらポインタやらないとまずいんでない?
1の書いてるソースって、参考書丸写しだね
楽しい?
>>279 おまい、1のやる気を削ぐような事言うなよ…
>>280 いや、確かに丸写しは面白くないと思う。
俺も今更新しい言語学ぶときに
とりあえず丸写しで動作確認するのは非常にだるかった。
覚えたての頃、分岐だけのテキストアドベンチャーを作ろうとして
面倒くさくなったやめた。
今考えるとくだらない事をやろうとしてたんだなぁ。
テキストだけのゲーム作るの結構勉強になるよね
Hi&Lowの数字当てゲームとか昔作ったよ
>>280 だね。
1はただ、puts("ここを教科書と変えてるだけ");
ヴァカでもできる
もう一つ、1を本当に初心者だと思ってる奴は痛すぎ
昨年12月30日午後、秋田県能代市内の長時間停電はパチンコ店もパチンコ台がストップした。
同市内のあるパチンコ店では当時160人ほどが遊技していた。
この停電の直後10数人が店をあとにしたが、残りの約150人はじっと台が動くのを待った。
この店では貯玉方式を取っていない為、玉・コインを一時預かることにして対応。徐々に客は減ったものの、それでも午後4時の段階で約40人が暗い店内で再開を待っていた。
店側は「お客に対して申し訳ないが、どうすることもできない」と困り果てた様子だった。
おまえら、これ見てどうよ?
この40人の中に自分がいたら、死にたくねーか?
一、スレ建て宣言…………
>>1 一、開会の辞………………
>>2-5 一、煽 り………………住人有志
一、逝ってよし……………
>>5-10 一、御前もな………………住人有志
一、決意表明………………
>>1 一、祝電披露………………
>>1の家臣
一、来賓挨拶………………
>>1の母親
一、来賓挨拶………………
>>1の主治医
一、余興……………………おむすび隊
一、送辞……………………住人代表
一、答辞……………………
>>1 一、板歌斉唱………………全員
一、閉会の辞………………スレッドストッパー
一、終了宣言………………不束ながら私
PHSのICE使ってEメール着信した時に「禿げちゃったよ!」って表示するように
アセンブラでいたずらしましたが何か?
>>1よ
漏れも会社入るまではCなんか全く出来なかったが会社入るとそれなりに出来る
様になるぞ。せっぱ詰まると人間はなんでも出来る様になるのだ。
焦らずのんびりやれYO!
それともし
>>1が「参考書丸写しなんかしてねーYO!」って思ってるなら
ラウンジの誰かに課題出してもらえ。そして組んだソースを晒せ。
重要なのは丸暗記じゃないんだ。プログラムを組むに当たってどうい
う構造にすれば良いのか、そしてその構造に必要なパーツ(関数とかね)の
情報をどうやって調べればいいのかって事なんだよ。
暗記は機械に任せりゃいいんだ。漏れ達プログラマーは機械が理解出来ない事
を変わりに理解してやらなきゃいけないんだよ。
長文&マヂレスゴメンナサイ
Cなんて二年くらい触ってないなぁ
つうことで、簡単な問題だすよ?
nを入力してΣi を求めるプログラムを考えよ(i=1→n)
簡単だべ?
一、スレ建て宣言…………
>>1 一、開会の辞………………
>>2-5 一、煽 り………………住人有志
一、逝ってよし……………
>>5-10 一、御前もな………………住人有志
一、決意表明………………
>>1 一、祝電披露………………
>>1の家臣
一、来賓挨拶………………
>>1の母親
一、来賓挨拶………………
>>1の主治医
一、余興……………………おむすび隊
一、送辞……………………住人代表
一、答辞……………………
>>1 一、板歌斉唱………………全員
一、閉会の辞………………スレッドストッパー
一、終了宣言………………不束ながら私
292 :
ざき:02/01/27 15:21 ID:???
vectorクラスでつまずく。。
294 :
ざき:02/01/27 15:36 ID:???
C++の本に載ってたよ、、、。
うん、だからそれC++でそ
1は偏差値55?
298 :
ざき:02/01/27 18:48 ID:???
>>60でC++やるっていってるぽ
誰も見てないと思うけど
保c
300 :
ほしゅ:02/01/28 09:36 ID:???
300get
301 :
45:02/01/28 23:05 ID:???
今日のお勉強。
ifとelseでした。
#include <stdio.h>
main()
{
int res;
printf("スレが立ちました。\nレス数はいくつですか?→");
scanf("%d",&res);
if(res<2){
printf("2get!!!!!!!!!!!!!!!\n");
}
else{
printf("糞スレ立てんなヴォケ!!!!!!!!!!\n");
}
return 0;
}
保c
303 :
信州人:02/01/29 05:06 ID:???
>>301 せっかくだからキリ番ゲットー版もやってみて
>301
ワラタけど、resが0<res<1000の場合以外の処理もしなきゃね
306 :
45:02/01/29 18:22 ID:???
1はどうしたのかな?
308 :
45:02/01/29 22:22 ID:???
ifとelseって
if(){
}
else(){
}
if(){
}
else(){
}
っていうふうに連続して使ってもいいんですか?
309 :
228:02/01/29 23:54 ID:???
なあ、俺のソースも見てくれよ。スレの流れと関係ないけどさ
#include <stdio.h>
void main(void)
{
int i,j;
i = 0; j = 0;
printf("浜崎あゆみは逝って良し? 0or1 %d\n",i);
scanf("%d",&i);
switch(i) {
case 1: printf("嘘にきまってるだろ? 0or1%d\n",i);
scanf("%d",&j);
while(1==j){
for(j=1;j<=100;j++){
printf("(`・ω・´) シャキーン %d\n",j);
}
}
while(0==j){
printf("teste%d\n",j);
j++;
}
break;
case 0: printf("キタ━━━(゚∀゚)━━━!! 。%d\n",i);
break;
default: printf("0or1で答えろ(゚Д゚)ゴラァ!!%d\n");
}
}
>228
printfのとこに0と1、どっちがyesかnoを表すかかいてくれないと・・・
>45
if(){
}
else if(){
}
else{
}
が一般的だと思う
保c
保c++
313 :
45:02/01/30 22:43 ID:???
#include <stdio.h>
main()
{
int rikai;
printf("なぜ強制IDなのか理解できましたか?\n");
printf("1:はい 2:いいえ\n");
printf("番号で入力してください→");
scanf("%d",&rikai);
if(rikai=1){
printf("2ちゃんにどっぷりですね!(^O^*)\n");
}
else if(rikai=2){
printf("2chと出るまで頑張ってください!(^O^*)\n");
}
else{
printf("
ttp://www.geocities.co.jp/Milano-Cat/1568/placard.swf?b64=lrOXnYFC\n");
}
return 0;
}
314 :
45:02/01/30 22:44 ID:???
↑これじゃあダメでした・・・
age
そもそもif〜の場合=じゃなくて==だよね。
それとscanfは使わない方が(・∀・)イイ!!よ
%d求めてるのに%sなモノを入れると飛びます。
getsとsscanfを使いませう
317 :
45:02/01/30 23:17 ID:???
おおそうだ!==だ!
教科書的にはscanfで構わないんだろうけど
言われてみればそうですね。
getsとsscanfを使うようにします〜。
明日は繰り返し文というページをやってみます。
ありがとう詳しい人!
Aはキッス
Bはペッティング
Cはセックス
319 :
名無しさん?:02/01/30 23:23 ID:ztr2FlvW
>>71 モジュロ使って奇数、偶数を求めるくらいなら
論理演算子の方がC言語っぽい。
if((no&0x01) == 0x01){
fprintf(stderr,"奇数\n");
}
else{
fprintf(stderr,"偶数\n");
}
>>319 確かにそうだよね。
ようは1ビット目が立ってるか立ってないかで判断出来るもんね。
なんか良いねこのスレ、基本に返ってる。
良スレ良スレ
>319
論理演算子つかったほうがいいんですか?
おれ、VCのC++から始めたからprintfとかputs, gets知らないんだよねー。でも参加したい。
324 :
名無しさん?:02/01/31 03:18 ID:ZlgAHDfZ
>>319-322 「速い」って・・・(゚Д゚)ハァ?
現在のマシンスペックを前提にするなら、極端に冗長な書き方(好例を
すぐに思いつかないけど)でさえなければむしろ読みやすさを優先して
素直なコードを書くようにしましょう。
案外それがプロとアマの大きな違いだったりします。
誤解されやすいことですが、単純なものを複雑にするのは簡単で、
その逆は結構難しいです。おぼえておいてね。
>>1
325 :
ラウンコ:02/01/31 03:24 ID:t5zkBRG/
あー、ボクアセンブラで取ったなー。
今思うとなんて応用の利かないものを
習わされたんだと思うけど。
ボクも今度ソフ開に挑むよ。頑張ってね。
>>324 ??
読みやすさが、そんなに違うのか?アレで??
まぁ、実際仕事で使う際、たかだか数個、偶数、奇数判定するのにつかうなら
どっちでも良いかもしれないけど
数十万とか数百万オーダーの判定がいくつも出てくるときはモジュロで判定なんて遅すぎてやってらんないぞ
327 :
324:02/01/31 04:06 ID:TJtK316X
>>326 >数十万とか数百万オーダーの判定がいくつも出てくるときは
ま。そりゃそうだ(w
すいません勇み足でボーランドのフリーのコンパイラを
落としてインストしてみたんですが
何をやっていいのかさっぱりです。何かいい飴をください
329 :
328:02/01/31 07:52 ID:???
あっ勉強できそうなページみつけました
今シコシコ見てます。
シコシコヽ(´ー`)ノ
>>324 ハゲ堂。
簡単なことをわかり難く書いて可読性を落とすのは、お仕事上では悪とされますよね。
チームで仕事する場合、可読性 >>> 実行効率 ですよ
>>1さん
>320
> ようは1ビット目が立ってるか立ってないかで判断出来るもんね。
>
> なんか良いねこのスレ、基本に返ってる。
( ´_ゝ`)<ふーん
最近のコンパイラのオプティマイザも賢いよ。任せたら
332 :
45:02/01/31 22:15 ID:???
繰り返し文forのお勉強。
#include <stdio.h>
main()
{
int i;
printf("名前:名無しさん? 投稿日:02/01/31 21:00 ID:9so/Sure\n");
printf("つーかまんこ\n");
for(i=1; i<=1; i++){
printf("\n名前:名無しさん? 投稿日:02/01/31 21:00 ID:???\n");
printf("IDも糞スレ\n\n");
}
return 0;
}
>>2で終了のスレッド
c
>>331 コンパイラには任せられません。つかそんなこと行ってる時点で
ダサダサ。
c
337 :
名無しさん?:02/02/03 02:00 ID:???
ageて保守
sageて保守
>>308,
>>310 この二つは意味が違うので注意
if (i==0){
(1)
}else{
(2)
}
if (i==1){
(3)
}else{
(4)
}
と
if (i==0){
(1)
}else if(i==1){
(2)
}else{
(3)
}
の場合iがいくつだとどこを通るかを考えてみよう
上だと0の場合(1)と(4)、1の場合(2)と(3)、それ以外は(2)と(4)だ
下だと0の場合(1)、1の場合(2)、それ以外は(3)となる
>>319-
可読性が問題になるのは例えば人の入れ替わりがあったときに保守しきれないからだ
その場合他人が読んで解かるコードを書くことが重視される
プログラムは状況によって読みやすさより速度を重視する場合もある
例えば高速画像処理をベタCで書くなんて時は論理演算子ばりばりで書く
つまり
>>326が正しい立場と言えるかも知れない
ただしその場合はコメントを充実させることで可読性を上げるのが常識
今回の場合トラフィックを考慮しないかつ勉強のためなら可読性を重視
そういう意味でmod(%)使うほうが理に適っているという考え方もある
漏れはどちらでも大した違いはないと思う
その一行前に/* 偶数か奇数かによって分岐 */という一文を入れるならという条件付でな
>>332 特に記述しない場合intを返す関数とみなされるがreturn 0を使うなら明示的にint mainと記述すべき
return値に何も返さないならvoidを使うこと
/*注意:プレフィックスのため全角空白使用している*/
#include <stdio.h>
int main()
{
int i=1; /*レス番号*/
int s=2; /*終了数*/
printf("%d:名無しさん? 投稿日:02/01/31 21:00 ID:9so/Sure\n",i);
printf("つーかまんこ\n");
for(i=2; i<=s; i++){
printf("\n%d:名無しさん? 投稿日:02/01/31 21:00 ID:???\n",i);
printf("IDも糞スレ\n\n");
}
return 0;
}
とすると番号が表示できて良い感じ
int s=2を適当な数字に変えてみよう
343 :
45:02/02/04 22:10 ID:???
>>342 ありがとうございます。
もっともっと最初の頃に書いたものが
return 0;を入れないと、ソフトが「フェッ」とエラーだとか言ったもので
なんとなくクセで書くようになってしまいました。
344 :
45:02/02/04 22:56 ID:???
というわけで、毎日やるつもりがサボってしまいました・・。
whileです。
#include <stdio.h>
int main(void)
{
int res=1,plus;
while(res<=1000){
printf("このスレッドは現在%dレス。\n",res);
printf("このスレッドにふさわしい獲得レス数は?=");
scanf("%d",&plus);
res=res+plus;
}
printf("1001 名前:1001 投稿日:Over 1000 Thread\n");
printf(" このスレッドは1000を超えました。\n");
printf(" もう書けないので、新しいスレッドを立ててくださいです。。。\n");
return 0;
}
345 :
45:02/02/04 22:58 ID:???
sscanf、ヘルプで調べたのですが読んでも良く分からず・・・
getsを使ったら、intにできませんなどとエラー。
またscanfで申し訳ないです・・。
試しにアルファベット入れたら、おかしなことになるんですね(;´Д`)
今日の勉強は無事終了です。
346 :
45:02/02/04 22:58 ID:???
無事、じゃないか・・。
getsはget stringの略と思われる
よってstring(文字列型)しか取得できないのだ
そこで、getsで文字列を取得してsscanf(もちっと簡単にやるならatoi)でint(数字型)に変換する
コードを書いてしまうと勉強にならないのでコードまでは書かないので調べてくれ
なおatoiはstdio.hではなくstdlib.hにあるのでincludeを忘れずに
348 :
45:02/02/04 23:33 ID:???
はい。お忙しい中マジレスありがとうごじあます。
感謝でタイプも乱れて青い升。
頑張って自分で調べます。
350 :
45:02/02/05 23:51 ID:???
今日はsscanfの使い方が分からず終了してしまいましたw
ネットで調べてたんですが。
明日、もうちょっとマシな本を買うか借りるかしてきます。
負け犬。
入力はバッファにfgetsで入れてから
sscanfで読み取るのが吉
#include <stdio.h>
int main(){
char buf[50];
int num;
printf("数字入れて: ");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&num);
printf("%dいれたろ\n",num);
return 0;
}
>>28 超遅レスだが
printfデバッグさえしないの?
Cは基本だとよく言われるけど
それでも全くの0から始めるのは難しいよ
ぼちぼち行きましょ
暇だから問題出しとこ
「数字を一つ入力から受け取り、それを八進数、十進数、十六進数で
それぞれ出力せよ」
簡単すぎかな?printfがわかってれば楽勝でしょ
書式のもんだいだね
み、みなさまありがとうございます(;´Д`)
>>353 #include <stdio.h>
int main(void)
{
int sen=1000;
printf("昨年大ヒットした宮崎監督のアニメ、\n");
printf("「千と千尋の神隠し」ですが\n");
printf("八進数だと「%oと%o尋の神隠し」\n",sen,sen);
printf("十六進数だと「%xと%x尋の神隠し」になります。\n",sen,sen);
printf("TV解禁までに鯖がパワーアップしてるといいですね!\n");
return 0;
}
こんな感じで良いでしょうか(;´Д`)
357 :
45:02/02/06 21:59 ID:???
ナマエ、ナマエ・・・
プログラム勉強してる者同士で情報交換とか出来たらいいなーなんて思ってるんですが
一緒にやってみても(・∀・)イイ!! って人いませんですかね
最初のうちは皆で勉強して、力がついてきたらネットでプログラムを発表していくとか
実現したら面白いと思うんだけど、どうでしょ?
>>358 もし本気でやりたいなら応援するぞ
一応漏れは某フリーソフト工房の代表なんぞしているし
>>351は非常に礼儀正しいプログラムだ
何故引数の少ないgetsではなくわざわざ引数の多いfgetsを使うのか
それがわかるとプログラムはもっと楽しくなるぞ
ただし
>>1はまだfile入出力まで逝ってないようだが・・・
360 :
45:02/02/06 23:04 ID:???
>>351 #include <stdio.h>
int main(void)
{
char buf[80];
int tall;
printf("貴方の身長は何cm?\nex:160(数字で入力してね!)→");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&tall);
if(tall>=200 && tall<=299){
printf("ダー!の人ですか?\n");
}
else if(tall>=300){
printf("こちらへどうぞ→
ttp://choco.2ch.net/test/read.cgi/kao/1012932587/\n");
}
else{printf("貴方の身長は%dcmです。\n",tall);}
return 0;
}
こうだっ!い、一応これで良いのでしょうか・・
361 :
45:02/02/06 23:15 ID:???
ぬおー(;´Д`)ハァハァ
今日はここまでで・・
>>358-359 参加できるようになるといいなぁ・・
なるべく末永く続けてください、15年とか。
>>360 一点だけ
これはほとんど趣味の世界だが
例え順序を理解していてもif文中に条件を2つ以上入れる場合は括弧でくくるほうがいい
つまり
if( (tall>=200) && (tall<=299) ){
とする
なぜ、fgetsやらsscanfを使う必要があるのですか?
普通にscanfのほうがはやいような
>>364 ユーザは何を入力するかわからないのだよ
安全のためだ
と言ってもわからんかもしれないので考えてみてくれ
(1)
int nData=0;
scanf("%d",&nData);
これで文字列を入力する
(2)
char pzData[5];
gets(pzData);
これで8桁程度の数字を入力する
わかったかな?
>>352 >>29のミスだと思うが
printfデバッグはかなりベタなデバッグで普通やらないだろうな
特にWindowsでGUI関係に入ると標準入出力は使うことがない
コンソールアプリでない限り標準出力は表示されないからな
368 :
45:02/02/08 00:49 ID:???
ああ・・今見ているページがやっと理解できました(;´Д`)
かなり時間がかかったので「不向きなのでは?」という
新しい疑問が生まれましたがw
まぁ解決したので良しとしますか・・
>>362 分かりました、次回よりそうさせていただきます。
マジレスありが・・・というよりも、トリップいいですね・・w
>>45 トリップ生成アルゴリズムに興味ある?
これはすでに公開というか既知です。ただし、トリップからパスワードを逆に生成するアルゴリズムは存在しません。
この状況で自分の欲しいトリップを得るアルゴリズム、これを考えてみるのはどうかな。
パスワードからトリップを得る関数を
void GetTrip(char* password, char* buf) /* この関数は小惑星が地球に落下しても成功する。 */
(password引数には、英小文字4文字を受け付けることにしましょう。)
として、先頭が"45"のトリップを得るにはどうしたらよいでしょう。それが出来たら、だれかやさしい先輩がGetTrip()関数を実装してくれるよ!!
(Tripper使えというのは無しでね(ハート))
いいな、またC勉強しようかな
Cやりたかったのになぜかハード屋になって
VHDLとかやらされてるし
>>369 そのインターフェース
void GetTrip(
const char * pzKey, /* In :#以下の文字列 */
char * pzTrip /* Out:得られるTrip */
);
でいいのかな?
372 :
369:02/02/08 11:30 ID:???
そのつもりっす。constとか使うと混乱するかなーと思いましてあえて使いませんでした。
もちろん、「初心者だからこそより正しく、美しいプログラムを」という考え方もあるとは思いますですが。
いきなりdll作るなよう
始めの一歩から機種依存になるじゃないか
アカン、アカンよ
>>374 つかTRIPをコードレベルで見てわかるか?
dllにせざるを得なかったのだよ
とりあえず人参は用意したので検索するロジックを作ってみてくれ
多重forでできるはずだ
インターフェースは
const char * __stdcall SyGetTrip(
const char * pczKey /* input after # */
);
だ
ようはトリップキーを入れるとトリップを返すと考えてくれ
377 :
45:02/02/09 13:41 ID:???
む・・
そういえば2ちゃんねるって、何の言語で構築されてるんだっけ?
peal、それともCだろうか、、?
それともコピペw
379 :
:02/02/09 19:06 ID:???
それ言うならperlだろ(w
鳴り響いてどないすんねん
>>378 実はC言語
perlのようなスクリプト言語じゃ重くてやってられない
>>376 自己レスですまんが
ようは何も考えずchar * pzOut=SyGetTrip(char *pzIn)として
pzInにトリップキーを入れるとpzOutにトリップが入る関数だと思ってくれ
あとcryptのコードを解析して最適化してオープンソースにするかも
>>381 pzOutのバッファは誰が確保するのだ?
>>383 インターフェースに注目してほしい
戻り値にconstがついているだろ?
SyGetTrip内でstaticにcharを確保しているのだ
保守
387 :
名無しさん?:02/02/11 13:42 ID:5rjuE9s6
あはは。あげ
わはは。あげ
>>386 なにそれ?どうみても背伸びしたドシロウトのコードじゃん(w
45氏へ
>>386のプログラムはcryptのほうは無視してGetTrip.cとmain.cだけ見てくれ
・一切キャストを行っていない
・ポインタは出来るだけ排除した
例えばchar * pzDataに対してもpzData+3ではなく&pzData[3]を使うなど
・特殊な関数は一切使っていない
よく使うと思われる関数だけを厳選して使用している
・論理演算も排除した
ビットシフト系も含めてまったく使っていない
つまり充分理解できるはずだ
このスレでまだ出ていない関数はstr(n)cpyとstrcatくらいだと思う
#これはてっきり既出だと思っていた漏れのミスだ
この関数はstring系でも頻繁に使う関数のはずなので勉強してくれ
392 :
45:02/02/11 20:41 ID:???
はい。頑張ります(;´Д`)
休日いなくて申し訳ないです・・。
補足
#defineも
>>51のマクロ定義で出てきたきりだったな
物凄く簡単に説明するとコンパイラレベルで置き換えをしてくれる命令だ
例えば#define SETTRIP_MAXSTRING 256
とするとコンパイラはプログラム中のSETTRIP_MAXSTRINGを256に置き換えてくれる
本来はもう少し色々できるのだが45氏の目的の情報処理試験レベルならこの認識で構わないだろう
394 :
45:02/02/11 21:40 ID:???
>>393 情報処理試験というのを受けたいのは
>>1さんです。
私は
>>45で勝手に参入して、
>>301から書いてるだけなんです(;´Д`)
当然Cなんて仕事で使うことはなくw
仕事で必要なら・・・ということで教えていただいてるのなら
申し訳ないです。
とりあえず
>>373と
>>386、ありがたくいただきました。
>>394 それは失礼
ではdefineに関しては誰かのソースを見たりしてわからないときに聞いてくれ
あくまでこのスレは勉強するスレだからな
396 :
45:02/02/11 23:11 ID:???
>>395 実は
>>301で自分勝手にうpして、そこまでのログは
すっ飛ばしてたのでw、今見ていました。
で、
>>71のcaseをやってみたのですが
#include <stdio.h>
int main(void)
{
char buf[80];
int kiri;
puts("あなたのレス番号は?:");
fgets(buf,sizeof(buf),stdin);
sscanf(buf,"%d",&kiri);
switch(kiri/111){
case (1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9):puts("おめでとうございます\n");break;
case (!(1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9)):puts("普通\n");break;
}
return 0;
}
ではマトモに動きませんでした。
||とか使ったらいかんのでしょうか、caseは・・。
などと言ってる場合でもないんでしょうか、鯖の状態は・・・w
寝る前にチェックしてよかった
case文では||などは使えない
そういう場合は
case 1:
case 2:
case 3:
(略)
case 9:
としそれ以外は
default:
とするのだがこれでも問題がある
例えば112を入れた場合switch(112/111)は整数型なので1になる
つまり110以上1109以下は全ておめでとうになってしまうぞ
一通りCの勉強終わって、C++の勉強をVisualC++の箱に入ってあった本で勉強してるけど、
プログラムどこから始まるかで挫折シソウダヨ
人知れずよんひゃくげっちょー!
そして人知れず脱兎オチ。
>>389 わはは。さげ
エアホの、鮮やかな一本勝ち
402 :
45:02/02/12 20:23 ID:???
>>397 お休みになる前に、ありがとうございました(;´Д`)
floatで、case 1.0:putsにしてみましたが
caseは整数のみ、という意味らしいメッセージが出ました。
この辺は勉強の余地あり、いや余地しかない現状w
403 :
45:02/02/12 20:32 ID:???
>>87はいまやりました。
float sum avg;はfloat sum,avg;でいいんですよね。
あとsumはfloatじゃなくても、この問題的には大丈夫ですよね?
たぶん・・。
>>401 それは違うと思うな
プロ意識というのは人によって異なる
CMMレベル3以上をプロと思う人もいるだろうしバグが無ければプロと
いう考え方もあるだろう
それだけのことだ
漏れにとってのプロとはその状況に応じたコードが書けることだ
あまりにコードが違いすぎれば理解できないコードになるだろう
それはコード自慢やオナニーに過ぎないというのが漏れの考えだ
だから漏れにとって
>>389というのは最高の賛辞なのだよ
>>402 今回何がまずいのか?
それは手段のために目的を選んだことにある
whileという手段のためには今回のプログラムは不向きなのだ
例えばもしどうしても同様のことを行いたいなら割り算は不要だろう
switch(kiri){
case 111:case 222:case 333:case 444:case 555:case 666:case 777:case 888:case 999:
printfうんちゃら;break;
default:
printfなんちゃら;break;
}
でも同じことだ
ではどうすればいいのか
>>403 実はsumもまたfloatのほうがいいだろうな
何故ならキャストするか工夫しないと正しい結果が得られないだろうからだ
試しに
int a=1;
float b=a/3;
printf("%f",b);
を実行してみてごらん
結果が0.0000・・・になるから
>>404の自己レス
漏れは今回のこのスレのレベルを文系学科を卒業した大学生に対する
ソフトハウス新人研修レベル未満と定義した
とすれば今の時点で必要なことはこれくらいだろう
・マジックナンバーの除去
・最低限のエラーチェック
・アクセスバリデーションを起こさない
・変数名に規則を持たせる
・コメントの充実
これでも多すぎるくらいだと思わないか?
>>399 C++はわかりにくいよな
オブジェクトはコンストラクタで生成されデストラクタで終了する
プログラム自体はGUIでないならmainから始まるのに変わりは無い
ちょっと例文を出してみよう
かなり無駄でうそ臭いが例文なので許せ
/*クラスの宣言*/
#include <stdio.h>
class IntAddPrinter
{
public:
IntAddPrinter(); /*コンストラクタ*/
~IntAddPrinter(); /*デストラクタ*/
int AddData(int nData); /*データ加算*/
private:
int m_nData; /*内部データ*/
};
/*メンバ関数の処理*/
IntAddPrinter::IntAddPrinter()
{
●m_nData=0;
}
IntAddPrinter::~IntAddPrinter()
{
●printf("last=%d\n",m_nData);
}
int IntAddPrinter::AddData(int nData)
{
m_nData+=nData;
return m_nData;
}
/*メイン文*/
void main()
{
int i,s;
/*クラスの生成*/
●IntAddPrinter * pIAP = new (IntAddPrinter);
for (i=1;i<5;i++){
s=pIAP->AddData(i);
printf("now=%d\n",s);
}
/*クラスの解放*/
●delete pIAP;
}
●の部分にブレークポイントを置いて動作を確認してみよう
newでコンストラクタが実行されdeleteでデストラクタが実行されるのが確認できるだろう
例によって全角空白でインデントを行っているのでコピペするときは注意
411 :
45:02/02/12 21:35 ID:???
>>405 まさにその通り、不向きでした(;´Д`)
割り算も不要ですね・・・勉強になります。
>>406 確かにおかしくなりました。
>>411 これは有名なので本にも出ていると思うが暗黙のキャストによる現象だ
例えばint/floatやfloat/floatはfloatになる
しかしint/intはintにしかならない
>>406だとint型であるaをint型である3で割るため結果がint型として端数が
切り捨てられてしまうのだ
そして求めたint型をfloat型に代入する
ではどうするかというとaをfloatにしてfloat/intにするか3を3.0にして
int/floatとすれば結果はfloatで得られることになるわけだ
413 :
45:02/02/13 00:23 ID:???
>>412 なるほど、良く分かりました。
気をつけます。微妙なものなんですね〜。
で、
>>205をやってたのですが、案の定動きませぬw
あまりに動かないので恥かしくてアレです・・・(;´Д`)ハァハァ
というわけで、寝た頭で明日見なおしてみます。
ところでsizeofというのはなんでしょうか?
sizeofとはその名のとおりメモリサイズを返す関数
例えば
char a[256]; size_t size=sizeof(a);
とするとsizeは256になる
long a; size_t size=sizeof(a);
とするとsizeは4になる(longが32bit=4byteの場合)
>>413 何故はまっているのか
それは設計ができていないからと考えられる
プログラミングにおいて最も重要なこと
それは設計だ
俗に1に設計2に設計34も設計5にテストというくらい設計が重要なのだ
ある日にちの曜日を求めるプログラムの設計を考えてみよう
非常に無駄なアルゴリズムだが考えをわかりやすくするためにこうしてみる
ある年の1月1日の曜日を求める
その年のn月の1日の曜日を求める
その月のm日の曜日を求める
さて今年(2002年)の1月1日は火曜日だった
1年前の1月1日はその年がうるう年でない限り曜日はどうなるか
うるう年の場合どうなるか
月ごとの1日の曜日はうるう年でないとき1月から見てどのくらいずれるか
うるう年の場合はどうか
419 :
45:02/02/14 23:10 ID:???
ありがとうございます。
頭の悪い生徒で申し訳ないです・・・。
一応、曜日計算のやり方はネットでみたのですが。
キタロ━━━━━( ◎ )━━━━━ !!!!
とりあえず動かないコードを見せてくれれば指摘できるんだが
427 :
45:02/02/18 01:11 ID:???
お恥かしいのですが、うpしてしまいます。
if elseまでは出来てると思うのですが・・・
#include <stdio.h>
int main(void)
{
char xyear[80],xmonth[80],xday[80];
int year,month,day;
printf("あなたが生まれた西暦の、下二桁を入力してください→");
fgets(xyear,sizeof(xyear),stdin);
sscanf(xyear,"%d",&year);
printf("あなたが生まれた月を入力してください→");
fgets(xmonth,sizeof(xmonth),stdin);
sscanf(xmonth,"%d",&month);
printf("あなたが生まれた日を入力してください→");
fgets(xday,sizeof(xday),stdin);
sscanf(xday,"%d",&day);
year=year+1900;
if((year != 1900) && (year%4 == 0) && (month == 1 || month == 2)){
year=(year-1900)/4-1;
}
else{
year=(year-1900)/4;
}
428 :
45:02/02/18 01:11 ID:???
switch(month){
case 1:year=year+0;break;
case 2:year=year+3;break;
case 3:year=year+3;break;
case 4:year=year+6;break;
case 5:year=year+1;break;
case 6:year=year+4;break;
case 7:year=year+6;break;
case 8:year=year+2;break;
case 9:year=year+5;break;
case 10:year=year+0;break;
case 11:year=year+3;break;
case 12:year=year+5;break;
}
year=(year+day)/7;
switch(year){
case 0:puts("あなたの誕生日は日曜日です");break;
case 1:puts("あなたの誕生日は月曜日です");break;
case 2:puts("あなたの誕生日は火曜日です");break;
case 3:puts("あなたの誕生日は水曜日です");break;
case 4:puts("あなたの誕生日は木曜日です");break;
case 5:puts("あなたの誕生日は金曜日です");break;
case 6:puts("あなたの誕生日は土曜日です");break;
}
return 0;
}
前から言っているようにコメントさえ入れていれば避けられた
バグ入りのコードだな
すまんが漏れにはこれがまったく理解できない
何をしているロジックだ?
year=year+1900;
if((year != 1900) && (year%4 == 0) && (month == 1 || month == 2)){
year=(year-1900)/4-1;
}
else{
year=(year-1900)/4;
}
恐らく1900年以降にあったうるう年の数を数えているのだとは思うが・・・
それが何の役に立つのだろう
実を言うとyearの使いまわしも気に入らない
この値は年だけを扱うべきだ
別途int totaldaysのような変数を用意すべきだろう
それならまだ理解できる
例えば98年なら98にうるう年の数を加算すれば週差が求まるからな
にしてもわかりにくくコメント無しでそれが判断できる人はほとんどいないだろう
漏れなら
int i;
int counter=4; /* 1899/12/31が木曜日のため */
を追加した上でちと無駄ではあるが
/* 前年までの曜日差を数える */
for (i=1900;i<year;i++){
if(year%4 == 0) /* うるう年は+2 */ counter+=2;
else /* その他の年は+1 */ counter++;
}
/* 判定年がうるう年の場合、3月以降は+1する */
if( (year%4 == 0) && (year != 1900) && (month >2) ) counter++;
としてそれ以降のyearをcounterに変えるぞ
さて最大の問題にいこうか
たった一行のコメントを省いたため見つからなくなったバグだ
cookeyが飛んでたので名無しになっていたようだ失礼
問題は
year=(year+day)/7;
だ
これはyear+dayが55を越えると何もしないだろう
しかも7日間毎日同じ曜日になるという困った判断だ
一文コメントで/* 求めた日数の曜日余りを求める */とでもしておけば
間違えることはなかっただろうな
さてこのコードであっても中途半端にロジカルで漏れにはお勧め出来ない
ノーコメントでコードを書くつもりならわかりやすさを重視したロジックを
起こすべきであり逆に変にロジカル(yearの計算など特にそうだ)に書くなら
コメントを確実に入れるべきだ
きついことを言うようだが新人の研修をしている立場から言わせてもらうと
それが出来なければ今回のようにしょうもないバグで永遠と悩むことになり
いつまで経っても進歩しないぞ
ではコメントを入れないノーテクニックのコードを記述してみよう
/*最初省略*/
year=year+1900;
for (i=1900;i<year;i++){
if(i%4 == 0) totaldays+=366;
else totaldays+=365;
}
if( (year%4 == 0) && (year != 1900) && (month >2) )totaldays++;
switch(month){
case 1:break;
case 2:totaldays=totaldays+31;break;
case 3:totaldays=totaldays+31+28;break;
case 4:totaldays=totaldays+31+28+31;break;
case 5:totaldays=totaldays+31+28+31+30;break;
case 6:totaldays=totaldays+31+28+31+30+31;break;
case 7:totaldays=totaldays+31+28+31+30+31+30;break;
case 8:totaldays=totaldays+31+28+31+30+31+30+31;break;
case 9:totaldays=totaldays+31+28+31+30+31+30+31+31;break;
case 10:totaldays=totaldays+31+28+31+30+31+30+31+31+30;break;
case 11:totaldays=totaldays+31+28+31+30+31+30+31+31+30+31;break;
case 12:totaldays=totaldays+31+28+31+30+31+30+31+31+30+31+30;break;
}
totaldays=(totaldays+day);
switch(totaldays%7){
/*以降省略*/
最後に訂正
古いコードを修正し損なっていたようだ
>>432 int totaldays=6に訂正
if(i%4 == 0) /* うるう年は+2 */ counter+=2;
に訂正
>>434では直した後のコードが入っているのだが・・・
さてではコメントを入れないとわからないようなロジックだが
うるう年をカウントするロジックを残したままでプログラムを起こすとすると
どうなるだろうか
ヒントは書きまくったが課題として残しておく
一応誤解が無いように書いておくが
コメントを一切入れないなら
>>434程度のコードを書かないとならないということだ
これは非常に面倒くさい
むしろコメントを入れたほうがすっきりするしわかりやすくなるだろう?という意味
言うまでもないが
>>434のようなコードを書くなよということ
438 :
45:02/02/18 23:19 ID:???
ありがとうございます。
439 :
45:02/02/18 23:22 ID:???
良く分かりました。
良スレだ。
445 :
45:02/02/20 23:24 ID:???
とりあえず直してみました。
コメントをちゃんと入れる、というのはこんな感じで宜しいのでしょうか?
#include <stdio.h>
int main(void)
{
char xyear[80],xmonth[80],xday[80];
int year,month,day,corn;
/*生まれ年、月、日を入力します*/
printf("あなたが生まれた西暦の、下二桁を入力してください→");
fgets(xyear,sizeof(xyear),stdin);
sscanf(xyear,"%d",&year);
printf("あなたが生まれた月を入力してください→");
fgets(xmonth,sizeof(xmonth),stdin);
sscanf(xmonth,"%d",&month);
printf("あなたが生まれた日を入力してください→");
fgets(xday,sizeof(xday),stdin);
sscanf(xday,"%d",&day);
/*1:西暦年の下2桁に、その4分の1(端数切捨て)を足します。*/
corn=year+(year/4);
/*例外:うるう年(西暦年(の下2桁)が4で割り切れる年…但し1900年を除くの
1月、2月の場合のみ、1の答えから1を引きます*/
if((year != 00) && (year%4 == 0) && (month == 1 || month == 2)){
corn=corn-1;}
446 :
45:02/02/20 23:25 ID:???
/*2:cornに求める月に応じて次の数を足します*/
else{switch(month){
case 1:corn=corn+0;break;
case 2:corn=corn+3;break;
case 3:corn=corn+3;break;
case 4:corn=corn+6;break;
case 5:corn=corn+1;break;
case 6:corn=corn+4;break;
case 7:corn=corn+6;break;
case 8:corn=corn+2;break;
case 9:corn=corn+5;break;
case 10:corn=corn+0;break;
case 11:corn=corn+3;break;
case 12:corn=corn+5;break;
}
447 :
45:02/02/20 23:25 ID:???
/*2の答えに,日の数を足します*/
corn=corn+day;
/*以上で出た数をを7で割った余りが0の時は日曜日、1〜6の時は月〜土の各曜日に対応します*/
switch(corn%7){
case 0:puts("あなたの誕生日は日曜日です");break;
case 1:puts("あなたの誕生日は月曜日です");break;
case 2:puts("あなたの誕生日は火曜日です");break;
case 3:puts("あなたの誕生日は水曜日です");break;
case 4:puts("あなたの誕生日は木曜日です");break;
case 5:puts("あなたの誕生日は金曜日です");break;
case 6:puts("あなたの誕生日は土曜日です");break;
default:puts("入力に誤りはありませんでしたか?");break;
}
}
return 0;
}
448 :
45:02/02/20 23:28 ID:???
>>202で紹介されてるはじめてのCを買ってみました。
今まで見てた薄っぺらいのと大違い・・・色々書いてあるのかしらん。
caseが好きなのね
450 :
45:02/02/21 00:08 ID:???
いや、、、、知らないだけで・・・
こういうことが出来るのは、まだif-elseかcaseしか知りません。。
まぁまだまだこれからです、たぶん。
コメントがおかしい・・・
たしかにやっていることは書いてあるがそれはソースを見ればわかる
コメントはソースを見てもわからないこと(もしくは概略)を書く
>/*1:西暦年の下2桁に、その4分の1(端数切捨て)を足します。*/
/*:うるう年の数だけ年を加算*/
>/*例外:うるう年(西暦年(の下2桁)が4で割り切れる年…但し1900年を除くの
1月、2月の場合のみ、1の答えから1を引きます*/
/*入力された年月がうるう年の1〜2月なら1を引く*/
のように
おまけにコメントが間違ってるぞ
>/*2:cornに求める月に応じて次の数を足します*/
と書くなら
>/*1:西暦年の下2桁に、その4分の1(端数切捨て)を足します。*/
は/*1:cornに西暦とうるう年分の+1日を加算*/
とかするべきだろう・・・
とはいえかなり良くなった
漏れなら/*1:の前にこうする
/*曜日=1899年12月31日からの経過日数差/7の余り
曜日は年に1つずれるがうるう年のときは2つずれる*/
こうすれば後のコメントは
>>451のように簡潔に書けばいい
お、すすんでるね
456 :
45:02/02/21 21:49 ID:???
>>451-452 なるほど・・・。
お手数おかけしております・・・。
ありがとうございます。
457 :
45:02/02/21 21:59 ID:???
>>290の書きこみなんですが、Σとはなんでしょう・・・
あと適性があるかどうか、というのはどう調べれば・・?
ないとダメですか、やっぱり。
>>457 高校の数学の教科書の数列の項をみてごらん
459 :
45:02/02/21 22:47 ID:???
>>459 プログラムと全く関係ないとこでつまづいててもしょうがないから
Σは和を求めるもの
4
Σi
n=1
だったら
1+2+3+4を求めると言うこと
数学は分野によるんだろうけどなぁ
例えば3Dをやりたかったら
ベクトルのこと知ってないといけないだろうし
>>460 いや、プログラムやるならどうしても不可分だと思う。
逆に、最近は、センター試験の数学でもプログラム選択できるんだっけ?
俺は消防の頃からBASICやってたけど、数学の概念が分からず行き詰まってたよ。
絶対値とかわからんかった
462 :
プロのプログラマ:02/02/21 23:50 ID:v5vKUPjk
>>459 数学の素養の必要な業務分野はたしかにありますが、
それは全体の一部にすぎません。逆に、数学が得意でも
プログラミングが極端に下手だったり、自分の考えを
ドキュメント化する能力が欠落した技術者も大勢います。
463 :
45:02/02/21 23:58 ID:???
>>460 なるほど!無知に即レスありがとうございます。
3Dは・・・いまのところやる予定はないです。
>>461 では高校数学の参考書など買ってきて
ぼちぼちやってみます。
お金はないけどきっと古本屋で売ってるし。
>>462 適性って気になります。
実は以前、まったくの素人でプログラマーに応募して
適性テストで落とされたようなので・・・(;´Д`)
プログラミング、楽しいんですが・・・向いてないのかなぁ・・
向いてないなら本職は諦めて、趣味にするのですが・・。
>>463 シグマぐらいなら図書館に逝って調べれば分かると思うよ。
俺も適性テスト受けたよ。かなり高得点だったらしい。
仕事としてやるのなら、ああいう素質は重要なんじゃない?
そこは
>>462さんの指摘どおりだと思う。
趣味でやるならそれほど気負わなくてもいいでしょ。
ラウンジ1訳が分からないスレだが温もりはあるようだ。
そんな臭いがした。そして去る
468 :
460:02/02/22 15:30 ID:???
>>461 あぁ、そうか
math.hの関数くらいは知ってて欲しいから
やっぱり高校程度の数学は知ってないといけないか
>>463 今、見たら
>>460の所間違ってた
n=1じゃなくてi=1だった
スマソ
469 :
45:02/02/22 21:42 ID:???
新しい本を買ったので、はじめから読んでみました。
#include <stdio.h>
int main()
{
printf("警報のテスト\a\n");
printf("改行のテスト\n改行のテスト\n改行のテスト\n改行のテスト\n");
printf("水平タブテスト\v水平タブテスト\n");
printf("バックスペーステスト\bバックスペーステスト\n");
printf("復帰テスト\r復帰テスト\n");
printf("改頁テスト\f改頁テスト\n");
printf("そのほか記号\?\'\"\n");
printf("エンド・オブ・ストリングのテスト\0\n");
printf("八進数のテスト10進数12→\12\n");
printf("16進数のテスト10進数12→\x12\n");
printf("テスト終了\a\n");
return 0;
}
これを実行すると
470 :
45:02/02/22 21:43 ID:???
警報のテスト/*音が鳴る*/
改行のテスト
改行のテスト
改行のテスト
改行のテスト
水平タブテスト /*四角くの中に×模様の記号*/水平タブテスト
バックスペーステスャoックスペーステスト
復帰テスト
改頁テスト 改頁テスト
そのほかの記号?'"
エンド・オブ・ストリングのテスト八進数のテスト10進数12→
16進数のテスト10進数12→/*上下両方を指す矢印*/
テスト終了/*音が鳴る*/
となってしまうのですが・・。
>>470 正しいな
もっともやったことに意味があるかどうかはわからんが
それから一部違うような気もする
水平タブは\tじゃないか?
バックスペースは全角文字にバックスペースかませばそうなる
全角文字というのは2バイトのデータだ
char1個分バックスペースで戻れば不完全に文字が残る
\b\bとすればきちんと消えたはず
復帰テストだが\rというのはその行の先頭に戻る命令だ
だから最初の復帰テストという文字列の上に後の復帰テストが上書きされたわけだ
EOSに関してはこれは文字列の終端を意味する記号なので\0の後ろの改行が無効になったわけだ
16進数や8進数に関しては漏れはそんな使い方をしたことがないので知らん
472 :
45:02/02/23 00:10 ID:???
>>471 確かに水平タブは\tでした。垂直タブが\vですね。失礼しました。
\bについては納得です。
頂いたGetTrip、分かるようになるまで頑張ります。
本日もありがとうございました。
適正の話だが漏れが見た結果わかったことがある
5年以上プログラマを続けられる人は両極端だ
仕事のプログラムで溜まったストレスを家に帰って趣味のプログラムで癒すヘビーな人
プログラムは仕事と割り切って家ではパソコンすら置かない人
このどちらかだな
正直適正などあてにならない
例えば漏れは新人研修の手伝いをしているがほとんどが文系でプログラムは初めてという人が多い
彼らにほんの1ヶ月ほどで教えるがほとんどの人がそれで新米プログラマになれる
適正がない人を敢えて上げるなら
・何度言われても同じミスをする人
・枝葉末節にこだわりすぎて何をすべきかがわからない人
・状況判断が出来ていない人つまり大丈夫といっておいてできていない人
これのうち2つ該当すると危ない
数学的知識だが例えば画像処理のプログラムをベタで書くなら必要だ
だが一般的なプログラムを組むのに必要かといわれるとノーだ
これは
>>462氏の言うとおりだ
ただし設計に関しては本来はシステムエンジニアの仕事でプログラマの仕事かと言われると微妙
で45氏に一つ苦言を呈させてくれ
printfを極めてどうするつもりだ?
C言語には覚えなければならないことが山ほどある
まだファイル関連もやっていないし構造体もやっていない
ポインタもまだだしリスト構造も再帰も始まっていない
にも関わらずprintfにいつまでこだわるのだ?
英国人が日本語を覚えようとしてIを習った状況を考えてみよう
英語でのIつまり「私」には色々な言い方がある
「俺」「僕」「わたくし」「おれ」「おいどん」「拙者」「それがし」・・・・
その全ての使い方を確かめようとしているのが今の45氏の状態だ
なぜ「私」と「俺」と「僕」を知ったところで次に進まないのか?
何故「私」の言い方を極めようとする?
知らない「おいら」という言葉(printfの使い方)が出てきたら辞書(ヘルプ)で調べればいいだろう
477 :
45:02/02/23 00:34 ID:???
なるほど。精進します。
>>477 うん。それでいいんですそれで。
人間、必要に迫られればそれなりの力を発揮します。
本当に必要なときに必要な力が出せるかどうか?
乱暴だけど、それが「適性」ってことだと思いますです・・・
>478氏ではないが言われてやれるなら適性は充分だと思うよ
>>467では無いがいい地下スレだ
時々見に来よう
、
490 :
45:02/02/26 19:02 ID:???
現在、以前の薄っぺらい本で勉強したところまで
新しく買った厚い本を読み進めています・・・
課題出そうか?
例の如くポインタでつまづいた
簡単に教えてくれ
494 :
AirHold ◆airHoLDE :02/02/27 01:16 ID:/XmTqEu7
>>492 一応アマチュアで21年ちょっとプロとして6年ほど経験がある
>>493 ポインタという概念はCにおいては必須といえる概念だが難しいよな
ポインタを比喩してみよう
このスレッド全体をcharとして考えてみる
ポインタとはレスを表し実体とはあるレスのある文字を表していると考えてみよう
そうするとこのスレッドは例えばchar **bunと表現できる
bun(つまりchar **)にはスレッドIDつまり1011975646が格納されている
*bun(つまりchar *)にはレス1つまり
>>1が格納されている
**bun(つまりchar)はレス1の1文字目('今'という文字の左半分)が格納されている
もう少しまともな説明は後日
失礼
ageてしまった・・・
えらいなぁ
>>1 コンピュータ専門学校に1年いるのに
C言語よく分からんよ
>>494 スマソ、正直分からなかった
ポインタを理解できるか不安だ
AirHoldさんはもしかして書○さん?
お疲れ様です
499 :
45:02/02/27 06:48 ID:???
ええ、お願いします。
前の本と進め方が違うので、通して読むことは読みたいのですが
ラウンジのスレが保守だけで生き残っているのを見るのは
なんだか忍びないですし。
あんまり読んでばかりでも上達しないでしょうし・・。
ていうか、とっくに巡回から外されてると思ってましたw
お手数をおかけします。
>>498 書○というコテハンがいるのだろうか
とりあえず漏れでは無さそうだな
ポインタの説明は難しいので比喩よりもむしろモロにそのものを考えてもらうほうが良いと判断した
そういうわけでちょっとだけリアルなポインタの話をしよう
メモリ空間がこんな感じだとする
アドレス/値
B0 0
B1 1
B2 2
つまりアドレスB0には値として0がB1には値として1がB2には値として2が入っている
本来はアドレスはWin32なら32bit値だがこんなところでリトルエンディアンとビッグアップルに
関する話題を出しても仕方ないので単純化してメモリ空間は8bitとする
全てのポインタはメモリのアドレス番号を指している
これはポインタのポインタだろうとポインタのポインタのポインタだろうと同じことだ
さてchar * dataを考えよう
dataには今B0という値が入っている
*dataという命令はdataが示すアドレスの値を取得する命令だ
よって*dataはdata(B0アドレス)の値である0を表す
これがポインタの基本的な概念だ
では何故ポインタというものが必要になったのかについて説明しよう
ポインタは構造化設計の産物だ
構造化設計においては関数内で使用された変数は基本的には関数外には持ち出せない
よってmain()関数の中で宣言した char **dataは別の関数からその中身を直接知ることは出来ない
そのため引数という形で値を取得するしかない
今ここにcharを受けとってその値に+1する関数を考えてみる
この関数をvoid PlusString(?)としよう
?として最適なものは何か
まずは*dataつまり型としてはcharを渡してみる
void PlusString(char tmp)
PlusString(*data);
関数に渡される値はdata(B0アドレス)の値である0だ
このとき引数として宣言されたtmpは別のアドレス例えばB3が使われる
よってB3アドレスには0が格納される
このtmpに+1すると1になる
しかしこれはあくまでB3アドレスの値0が1に変わっただけで*dataが変わったわけではない
よって正しい解答は得られない
アドレス
B0 0
B1 1
B2 2
B3 0 → 1に変わっただけ
次にdataつまり型としてはchar *を渡してみる
void PlusString(char * tmp)
PlusString(data)
関数に渡される値はB0というアドレス値だ
このとき引数として宣言されたtmpは別のアドレス例えばB3が使われる
よってBCアドレスの値はB0となる
*tmpに+1するとtmpが示すアドレス(B0)の値0に+1され1となる
関数から抜けてもアドレスB0の値そのものが1に変わっているため正しく動作するというわけだ
B0 0 →1に変わる
B1 1
B2 2
B3 B0
では課題だがここに関数Addがある
このAddという関数は二つのintの値を足した結果を求める関数だ
通常なら int Add(int a,int b)
{
int c;
c=a+b;
return c;
}
とでもすればいいのだが演習問題なので戻り値を持たないvoid型の関数としよう
void Add関数の引数とコードを記述せよ
「カアチャンー・・アレトッテクレ、アレダ・・アレ」
カアチャン「アレナラ、ソコニアルダロ・・ホラ、ソコ・・ソコ」
510 :
45:02/02/28 20:57 ID:???
関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
というのはどういうことなのでしょうか。
あといまだにerror C2064というエラーメッセージが理解できません。
たぶんエラーの場所を示してるとは思うのですが・・・。
>>510 それはVC++が出すオリジナルのエラー番号だ
ヘルプのキーワードをC2064で調べてごらん
もしくはC2064を反転させてF1でもいいが・・・
恐らく関数のプロトタイプ宣言に失敗しているのだろう
プロトタイプ宣言に関しては後で説明するがとりあえずは関数のコードをmainの前に記述してみてくれ
512 :
45:02/02/28 23:27 ID:???
分かりました。
現在関数のプロトタイプ宣言のあたりまで読んでいます。
そろそろ書いたのをうpしても良い辺りでしょうか?
あと60ページくらいでポインタが出てくるのですが。
明日辺りからまた書いていきます。
挙げてくれればどこが悪いかくらいは指摘できるよ
ポインタを理解するぞ
ポインタを理解するぞ
ポインタを理解するぞ
pupu
519 :
45:02/03/02 19:03 ID:???
forの文の中でif-elseは使えないのですね?
関数参照ならできるのでしょうか?
出先からなので、やってみて確認ができないのです。
>>519 使える
例えば
int i;
for (i=1;i<1002;i++){
if (i==1){
printf("一番馬鹿なのは?\n%d:02/03/02 22:05 名無しさん\n誰だと思う?\n",i);
}else if (i<1001){
printf("%d:02/03/02 22:06 名無しさん\n
>>1\n",i);
} else{
printf("%d:1001 :Over 1000 Thread\n",i);
}
}
みたいに
522 :
45:02/03/03 18:22 ID:???
523 :
45:02/03/04 00:39 ID:???
ああ〜エラーが出る〜
保守るだけじゃなくて
自分でも何かやってみるといいよ
とりあえずエラーが出るなら出たでいいから貼ってみな
全てはそこからだ
527 :
あげ:02/03/05 04:16 ID:???
逝くーっ、イクー!!!
528 :
信州人:02/03/05 04:26 ID:???
すごいなぁ
まだ続いてたんだ。
530 :
45:02/03/05 22:52 ID:???
繰り返しと、関数を呼び出す練習。
#include <stdio.h>
int bomb()
{
static int maturi=1;
printf("%d!!!!!\n",maturi);
return ++maturi;
}
int main()
{
int i=3;
puts("さあみなさんご一緒に!!");
while(i){
bomb();
i--;
}
printf("\n続きはまた来週!!\n");
return 0;
}
static変数は特別な理由が無い限り初期の段階では勉強にならないから使わないほうがいい
例えば漏れがstaticを使うのはメモリを確実に確保したいときだけだ
bombの型をint bomb(int maturi)として作り直してご覧
532 :
45:02/03/06 00:54 ID:???
むむっ
535 :
45:02/03/06 23:09 ID:???
でもstatic変数を使わないと
1!!!!!!
1!!!!!!
1!!!!!!
ダー!!!
みたいになるのですが・・・。
もうちょっと考えてみますので、解答は待ってください。
ではヒントを
関数から抜けるとその関数内で使われていた値は全てクリアされる
漏れはこれを説明するのにこのような説明の仕方をしたことがある
例えば上の例だとbomb()は三回呼ばれているが一回目も二回目も三回目も別の関数が呼ばれているのと同じ
つまり同じソースコードのbomb1()とbomb2()とbomb3()を呼んでいるのと同じだということだ
537 :
45:02/03/06 23:40 ID:???
ですよねぇ。
でも
あっ
538 :
45:02/03/06 23:45 ID:???
#include <stdio.h>
int bomb(int maturi)
{
printf("%d!!!!!\n",maturi);
return maturi;
}
int main()
{
int a=1,i=3;
puts("さあみなさんご一緒に!!");
while(i){
bomb(a);
i--;
a++;
}
printf("\n続きはまた来週!!\n");
return 0;
}
こうでしょうか?
それでも動くが何のためにbomb()は戻り値を持っているんだ?
542 :
45:02/03/07 21:26 ID:???
はい。
他に、%d!!!!の処理を3回分続けてbombに書いてしまう
というのも思いついたのですが、意味ないなぁ・・・と。
bomb(int maturi)にしたうえで
>>535のようにしないためには
maturiを成長させることが必須だとは思うのですが・・・。
もうちょっと考えてみます。
543 :
45:02/03/07 23:52 ID:???
取りあえず今日の勉強、グローバル関数です。
#include <stdio.h>
int me,ninzu,teyubi,shugorei;
int kazu()
{
if(me%2 == 0){
ninzu=me/2;
teyubi=me*5;
shugorei=(me/2)-1;
}
else(me%2 != 0);{
puts("判断しかねます");
return 0;
}
}
int main()
{
char eyes[80];
printf("あなたを含め、今そこにいくつ目がありますか? →");
fgets(eyes,sizeof(eyes),stdin);
sscanf(eyes,"%d",&me);
kazu();
printf("今そこにはあなたを含め%d人居ます\n",ninzu);
printf("合計の手指は約%d本です\n",teyubi);
printf("残念ながら守護霊は%d体です・・・。\n",shugorei);
return 0;
}
544 :
45:02/03/07 23:53 ID:???
と、思ったら
外部の関数の中でreturn 0;使っても
終わるのはその関数だけなんですね。
545 :
45:02/03/07 23:57 ID:???
あれ?おかしい。ちょっと直します。
初心者にとってグローバル変数の勉強など百害あって一理なしだよ
547 :
45:02/03/08 00:57 ID:???
そうなんですか!
本の順序なんですが、、じゃあ飛ばします。
次回は配列です。
保守
保守しておきます
551 :
45:02/03/09 12:51 ID:???
#include <stdio.h>
int bomb(int maturi)
{
printf("%d!!!!!!\n",maturi);
return maturi;
}
int main()
{
puts("さぁみなさんご一緒に!");
bomb(1);
bomb(2);
bomb(3);
puts("ダーー!!!");
return 0;
}
こうですか?
552 :
45(一番馬鹿な生徒):02/03/09 14:57 ID:JinUKN5A
現在このスレは・・・
puts("プログラム初心者が");
puts("やさしい先生方に");
puts("教えてもらっています");
ふるってご参加ください。
|,(V) こんなスレがアッタノネ
554 :
夢劇場@私も勉強中:02/03/09 18:26 ID:nuoOxbvH
#include <stdio.h>
int bomb(int maturi)
{
printf("%d!!!!!!\n",maturi);
return maturi;
}
int main()
{
int i;
puts("さぁみなさんご一緒に!");
for(i = 1;i<4;i++){
bomb(i);
}
puts("ダーー!!!");
return 0;
}
こっちの方が効率イイ!
あれ?ってゆうかこれ配列なの?
配列はこれ
char *dreams = { "富士", "鷹", "なすび" };
int i;
for (i=1; i<=3; i++) {
printf("%d : %s\n", i, dreams[i-1]);
}
・・・。最近 Java と Perl ばっかりやってるから、
こんなのでさえ間違ってないかどうか不安。老化の証拠
…………! ぎゃーーーほら間違ってる!
char *dreams[] = { "富士", "鷹", "なすび" };
つーかこんな書き方初心者にはぴんと来ない?
557 :
45:02/03/09 20:03 ID:???
まだ*が出てきてないです、私の場合w
やっぱり(w あとはいい例思いつかないや
頑張ってね
だからさ・・・なんでbomb()が戻り値を持っているのかと聞いているのに・・・
みんなbomb()の戻り値を利用しようとしないのな・・・
仕方ない
漏れが望んでいた回答をちと書くな
#include <stdio.h>
int bomb(int maturi)
{
printf("%d!!!!!\n",maturi);
maturi++;
return maturi;
}
int main()
{
int a=1;
puts("さあみなさんご一緒に!!");
for(i=0;i<3;i++){
a=bomb(a);
}
printf("\n続きはまた来週!!\n");
return 0;
}
保守
562 :
45:02/03/10 19:07 ID:???
すみません、実行できませんでした。
>>560 そうやってやるんだったら
forよりwhile(a<4)
の方がいいと思うけど
これはスタイルの違いかな?
>>563 スタイルというより演習上の問題かな
今回示したかったのは関数の独立性なのだ
そのため敢えてmainのほうでは関数で使用する変数による判定を入れなかった
スタイルで言うならそもそも関数の切り方に問題があると思うぞ
565 :
45:02/03/10 21:02 ID:???
実行できました。
566 :
563:02/03/10 21:57 ID:???
>>564 私も参加させてもらってもよろしいでしょうか
関数のきり方はこんなもんですか?(ちと、読みにくと思いますがw)
#include <stdio.h>
#define N 3
void bomb(int n)
{
printf("%d!!!!!\n",n);
}
void maturi(void)
{
int i;
puts("さあみなさんご一緒に!!");
for(i=1;i<=N;i++)
bomb(i);
printf("\n続きはまた来週!!\n");
}
int main()
{
maturi();
return 0;
}
保守
さて今日はちと設計というものを通して関数について説明しようか
前から言っているが一番重要なのは設計だ
今回の課題を設計してみよう
まず何をしたいのか列記してみよう
・「さあみなさんご一緒に!!」を表示
・「1!!!!!!」〜「n!!!!!!」を表示(nは1以上の数字)
・「続きはまた来週!!」を表示
プログラムは複雑かつ大きくなるにつれていきなり全部を作ることはできなくなる
そのため必然的にパーツ単位で作り込みを行い徐々に機能を追加していくことになる
そこでトップダウン設計が必要となる
つまり概要を先に組み後から機能を組み込んでいく手法だ
上記三つの機能を関数PreDisp(),DoMatsuri(),AftrDisp()としてみよう
#include <stdio.h>
/* プロトタイプ宣言 */
/* 初期表示 */
int PreDisp();
/* 祭り実行 */
int DoMatsuri();
/* 最後表示 */
int AftrDisp();
void main()
{
PreDisp();
DoMatsuri();
AftrDisp();
}
int PreDisp()
{
return 0;
}
int DoMatsuri()
{
return 0;
}
int AftrDisp()
{
return 0;
}
シンプルなmain文だろ?
main文にだらだら書くのは設計が出来ていない証拠だ
もちろん実際のプログラムはmain文に冗長さを持つことがあり得る
例えば工数をかけたくないテストドライバなんかがそうだ
しかし勉強用ならここまですっきりさせるくらいで丁度良いと漏れは思うね
さて簡単なPreDisp()とAftrDisp()から作りこむか
int PreDisp()
{
puts("さあみなさんご一緒に!!");
return 0;
}
int AftrDisp()
{
printf("\n続きはまた来週!!\n");
return 0;
}
なお戻り値にvoidではなくintを持ってきているのはプログラムを改造することになったときのための事前対策だ
問題の最後のDoMatsuri()だ
プログラムには改造性や流用性を持たせたい
仕様変更というのは往々にしてある
そのたびに新しくプログラムを組み直したくないからだ
例えば前のプログラムだが漏れがここで初期値xで差をyとしz回ループするプログラムにしろと言ったらどうするつもりだ?
例えば2から差を3で5回ループつまり2!5!8!11!14!と表示しろということだ
これを満たすには関数の独立性が必要となる
そこで関数DispBombを考えよう
関数DispBombは引数aとbを受け取る
aは現在の値でbは加算される数字だ
そうするとDispBombはint DispBomb(int a,int b)となる
なおDispBombは戻り値として次の初期値を渡すこととしよう
int DispBomb(int a,int b)
{
printf("%d!!!!!\n",a);
return (a+b);
}
さてこれであとはint DoMatsuri()だけだ
これは単純にz回ループしてDispBombを呼び出せばいい
int DoMatsuri()
{
int nNowCount=1;
int nSabun=1;
int nLoop=3;
int i;
for (i=0;i<nLoop;i++){
nNowCount=DispBomb(nNowCount,nSabun);
}
return 0;
}
最後にまとめてソースコードを記述しよう
なお関数のプロトタイプ宣言というのはC言語においては使用される関数を先に記述しないと
コンパイル時にエラーが出るため先に宣言しておくことと考えてくれ
#include <stdio.h>
/* プロトタイプ宣言 */
/* 初期表示 */
int PreDisp();
/* 祭り実行 */
int DoMatsuri();
/* 最後表示 */
int AftrDisp();
/* 数字の表示/次の初期値を返す */
int DoBomb(int a /*初期値*/, int b /*差分*/);
void main()
{
PreDisp();
DoMatsuri();
AftrDisp();
}
int PreDisp()
{
puts("さあみなさんご一緒に!!");
return 0;
}
int AftrDisp()
{
printf("\n続きはまた来週!!\n");
return 0;
}
int DoMatsuri()
{
int nNowCount=1;
int nSabun=1;
int nLoop=3;
int i;
for (i=0;i<nLoop;i++){
nNowCount=DispBomb(nNowCount,nSabun);
}
return 0;
}
int DispBomb(int a,int b)
{
printf("%d!!!!!\n",a);
return (a+b);
}
例えば
>>572のように変更したい場合はDoMatsuri()の3つのパラメータを変えればいいのは判るよな?
以上
>>569-575 分かりやすて(・∀・) イイ !!
シンプル且柔軟なプログラムを組めという事かな
いつもforやwhile、doの引数や動きでごっちゃになる
今度このプログラムをfor以外のループで書いてみる
577 :
563:02/03/12 02:10 ID:???
>>AirHold
ふむ、ふむ、なかなか勉強になります
いつも思い付くままに書いて
後から仕様を変えようと思って大変な思いをしてます(w
578 :
45:02/03/12 05:47 ID:???
似たようなことをやろうと捏ねまわしていたら
いつのまにか寝てしまいましたw
今回漏れが書いたのはRDBSで言うなら一次正規化に過ぎない
本当は二次正規化〜四次正規化くらいまでやって初めて金を取れるコードになるのだが
まだそのレベルの話が出来るほど漏れ自身が理解していない(w
581 :
45:02/03/12 22:35 ID:???
話の流れを乱すようで申し訳無いんですが
どうも引数が上手く使えません。
#include <stdio.h>
int wa(int a,int b)
{
return (a+b);
}
int main()
{
printf("%d\n",wa(5,6));
return 0;
}
これくらいならできるのですが・・。
scanfなんか使おうとすると混乱します。
こう言っちゃなんだが
向いてないんじゃないの?
583 :
45:02/03/12 22:46 ID:???
うーん、そうかもしれないです。
scanf使ってうまくいかないコードを書いてご覧
585 :
45:02/03/12 23:20 ID:???
どうしたら良いか考えてる段階でまだ書けてないのですが
例えば
#include<stdio.h>
int nyuryoku()/*入力*/
{
int kazu;
printf("整数を入力して\n→");
scanf("%d",&kazu);
return kazu;
}
int jouhou(int a)/*計算*/
{
return (a*a);
}
int main()
{
int AA=nyuryoku();
printf("%d\n",jouhou(AA));
return 0;
}
jouhou()内でキーボードから入力したaとbを掛け合わせたい場合、
nyuryokuA()とnyuryokuB()に分けないでなんとか出来ないかなぁ、と・・・
そのための関数だよ
nyuryoku()を2回呼べばいいのだ
587 :
45:02/03/12 23:40 ID:???
ほんとだ!
#include<stdio.h>
int nyuryoku()/*入力*/
{
int kazu;
printf("整数を入力して\n→");
scanf("%d",&kazu);
return kazu;
}
int jouhou(int a,int b)/*計算*/
{
return (a*b);
}
int main()
{
int a=nyuryoku();
int b=nyuryoku();
printf("%d\n",jouhou(a,b));
return 0;
}
ですね?
>>587 OK
ちなみにmainはこんな書き方もできる
void main()
{
printf("%d\n",jouhou(nyuryoku(),nyuryoku()));
}
物凄く判りにくい上コンパイラ依存の部分があるのでお薦めはしないが
589 :
45:02/03/12 23:48 ID:???
>>588 それでも出来ました。覚えておきます。
aとbを一度に取ってこようとしたから混乱したんですね。
それはそれで、きっとやり方はあるのでしょうけど。
関数がわかったなら次は関数の中でも最も難しいと言われている再帰に挑戦してみるか?
といっても再帰なんぞ実際のプログラムで使うことは特殊な状況を除いて無いと言っていい
何故ならプログラムが判りにくくなるからだ
それにメモリも馬鹿食いする
再帰とは・・・
関数内で自分の関数を呼ぶという荒業だ
猪木の例を出すからデバッガで一行ずつ追いかけてご覧
void SaikiTest(int a)
{
printf("%d!\n",a);
a++;
if (a<=3){
SaikiTest(a);
}
return;
}
void main()
{
SaikiTest(1);
printf("ダー!\n");
}
そうしたら試しに何か作ってみよう
ただし再帰はミスると永久ループなので注意
>>590 20時間以上考えてもどうしてそういう動きになるのか判らなかったら解説する
592 :
45:02/03/12 23:54 ID:???
明日の夜8時ですね、分かりました。
がんばーれ
596 :
45:02/03/13 18:39 ID:???
mainでまずSaikiTestの仮引数aに1が代入され
SaikiTest内のprintfが実行される。
aは1加算されてa=2の状態。
if文の条件は真なので、関数SaikiTest内でSaikiTestが呼び出され
現在のaの値を新たに代入しなおして、
条件が真の間、関数SaikiTestを始めから繰り返し続ける。
今回の場合、SaikiTestが3回実行される。
条件が偽になると関数SaikiTestは終了し
mainに戻ってprintf("ダー!\n");を実行して
プログラム全体が終了。
って動きの説明ってこれで良いのでしょうか?
惜しいな!
SaikiTestが終了するとその前のSaikiTestに戻りそれが終了し・・・
と書いてあれば完璧だった
以下漏れの用意してあった回答と比べても遜色無いぞ
まずmain文が実行される
SaikiTest(1)によって関数SaikiTestが呼ばれる
SaikiTest()は"1!"と表示する
aは+1されて2になる
さてaは2つまり3以下なのでSaikiTest(a)が呼ばれる
このときに呼ばれた関数SaikiTestは今実行しているSaikiTestとは別のものだ
区別が付き易いように最初のSaikiTestをSaikiTest#1次をSaikiTest#2としておこう
SaikiTest#2は引数2をもらい実行される
"2!"と表示しSaikiTest#2の引数a(これはSaikiTest#1の引数aとは別のものだ)に+1する
さてaは3つまり3以下なのでSaikiTest(a)が呼ばれる
これをSaikiTest#3としておこう
SaikiTest#3は"3!"と表示しSaikiTest#3の引数aに+1する
さてaは4つまり3より大きいのでSaikiTestは呼ばれず次のreturnが実行される
SaikiTest#3のreturnが実行されるとSaikiTest#2のSaikiTest(a)の続きが実行される
つまりreturnが実行される
同様にSaikiTest#1のSaikiTest(a)の続きが実行されSaikiTest#1がreturnされる
そしてmainに戻り"ダー!"と表示される
これを関数名:aの値:実行されるロジックの順で表記してみよう
main:?:SaikiTest(1);
SaikiTest#1:1:printf("%d!\n",a);
SaikiTest#1:1:a++;
SaikiTest#1:2:if (a<=3){
SaikiTest#1:2: SaikiTest(a);
SaikiTest#2:2:printf("%d!\n",a);
SaikiTest#2:2:a++;
SaikiTest#2:3:if (a<=3){
SaikiTest#2:3: SaikiTest(a);
SaikiTest#3:3:printf("%d!\n",a);
SaikiTest#3:3:a++;
SaikiTest#3:4:if (a<=3){
SaikiTest#3:4:}
SaikiTest#3:4:return;
SaikiTest#2:3:}
SaikiTest#2:3:return;
SaikiTest#1:2:}
SaikiTest#1:2:return;
main:?:printf("ダー!\n");
599 :
45:02/03/13 19:08 ID:???
>>598 めちゃくちゃ分かりやすいです。
説明の仕方ひとつ取っても、何枚も上手でございましたね。
でも自分のレスが時間内間に合って良かったですw
取りあえず夕飯作ったら、再帰のプログラム作ってみます。
無限ループも試してみたいのですが
条件の取り方を間違えれば良いのですか?
再帰が判れば関数は判ったも同然だが・・・
もう一点重要なことがある
関数は戻り値を1つしか持てない
では関数内で処理した2つ以上のデータを関数外に戻すにはどうすればいい?
というわけで課題だ
「三つの数字を比較し最も大きい数字と最も少ない数字を返す関数を作れ」
int nyuryoku();
??? GetBigAndLittle(?????);
void main()
{
int a1,a2,a3;
int nBig,nLittle;
a1=GetNo();
a2=GetNo();
a3=GetNo();
/* a1,a2,a3のうち大きいものと小さいものを得る */
????? GetBigAndLittle(???????);
/* 結果表示 */
printf("最大数は%dで最小数は%dです\n",nBig,nLittle);
}
int nyuryoku()
{
>>587と同じ
}
??? GetBigAndLittle(?????)
{
???????????
}
>>600の訂正
誤:GetNo();
正:nyuryoku();
ちなみに関数にするもう一つの理由がここにある
つまり便利な関数は何度でも使いまわせるのだよ
603 :
45:02/03/13 19:27 ID:???
>>600 ぬわっ!
それをしたかったんです!頑張ります!
ガンバれー
引数が多くなりそうだけど気にすんなよー
605 :
45:02/03/13 21:21 ID:???
クイズみたいな質問でアレなんですけど
???の長さって、大体それくらいに収まりますか?
2行とかにはならない?
>>605 ?は便宜上付けただけなので長さは適当だよ
609 :
45:02/03/14 19:34 ID:???
正直分かりません!(;´Д`)
longを使って無理やり戻そうとしたんですが。
無理でしたw
void GetBigAndLittle(int a, int b, int c, int *nBig,int *nLittle)
611 :
45:02/03/14 22:40 ID:???
もしかしてポインタってヤツですか!?
今日やります、今からやります。
少々お待ち下さいませ・・・。
難関だとか。。
>>610 大正解
int GetBigAndLittle(int a,int b,int c,int *pnBig);
でもいいが
>>610のほうが判り易い
なおポインタは先頭にpをつけると間違えにくくていいぞ
613 :
初心者:02/03/15 04:36 ID:???
45さんではありませんが、質問させてください。
先程のイノキの再帰の問題を自分なりに考えて、再帰を使わずに書いてみました。
たいしたものではありませんが。
#include <stdio.h>
void main(int i)
{
for(i = 1; i <= 3; i++)
{
printf("%d!!\n", i);
if(i >= 4)
{
break;
}
}
printf("ダー!!!!\n", i);
}
これで同じような動きをします。(というか僕には同じに見えます)
これと再帰は、互いにどのような違い・欠点・利点があるのでしょうか?
また、再帰でしか実現し得ないプログラムなどがあれば教えてください。
もし見当はずれの質問をしていたら、ごめんなさい。
感覚の問題かなあ
やろうと思えば再帰を使わずにほとんどのことは出来るんだけど
たまーに再帰を使うとめちゃすっきり書ける場合があるのよ
典型的な例で言うと、狽求めたり、2分木探索したり、ファイルシステムの構築したり・・・
うまく言えないけど適材適所というかそんな感じですわ
詳しい説明はAirHoldさんに譲ります
よくわからんこと書いてごめんな
>>613 実を言うと再帰のほうがロジックは解りにくいしメモリも食う
また個人的には
>>590に書いたとおり再帰はお勧めしない
しかし再帰でないと出来ないこともある
例えばquick sortのロジックなんぞ再帰しか考えられない
しかしポインタを完全に理解しているとは言えない現時点で再帰の芸術とも言われるquick sortを
提示して理解できるとは思えないので提示しない
興味があるならquichsortまたはqsortあたりで検索してごらん
で
>>613のロジックだが
if(i >= 4)の判定は不要だな
何故ならforループの判定によってiが4以上になることは無いからだ
なお再帰と比較しやすい形に直してみた
void main()
{
int i=1;
while(1){
printf("%d!!\n", i);
i++;
if(i <= 3){
continue;
}
break;
}
printf("ダー!!!!\n", i);
}
保守
&ホワイト
&クエスト
おお、早いレスありがとうございます。
つまり、
「iが1〜3の時には処理がforループの中にあり、
ループの外に出た後は、一度printfを実行すると処理が終了してしまうため」
i>=4の判定は必要ないという認識でいいのでしょうか?
だとすれば、まったく気付きませんでした。
たしかにやってみたところ、同じように動きました。
あと、quicksortを検索してソースを見てみました。
はっきり言ってわかりませんでした。
ソースはダウソしておきましたので、
じっくり時間をかけて理解していきたいと思います。
またこれから判らないことがあったら質問させていただきたいのですが、
よろしいでしょうか。
よろしくお願いいたします。
めきしこ野郎さん、AirHoldさん、ありがとうございました。
>>620 なんだかよくわからないけれど単純に考えてみよう
for(i = 1; i <= 3; i++){
(処理)
}
の実行を追いかけると
・まずi=1で処理される
・}のところで先頭に戻りi++が実行されiが2になる
・i<=3かチェックされる
・チェックが真なのでi=2で処理される
・}のところで先頭に戻りi++が実行されiが3になる
・i<=3かチェックされる
・チェックが真なのでi=3で処理される
・}のところで先頭に戻りi++が実行されiが4になる
・i<=3かチェックされる
・チェックが偽なので}の次の行に飛ぶ
さて
>>621の処理を見ればわかるが(処理)が実行されるのはiが3以下のときだ
よってi>=4となることは無い
だからif (i>=4)という処理は不用ということになるわけだな
623 :
45:02/03/16 18:43 ID:???
>>600のプログラムなんですけど、
>>610としたうえで
さらにvoid GetBigAndLittle()でreturnを使って値を返そうとか
そういうのはやりすぎでしょうか。
#include <stdio.h>
int Kankouti(int Ryokousha,int *N,int *Y,int *U);
void main()
{
int R;
int Naraduke=20,Yatuhasi=50,USJmanju=40;
puts("旅行者が関西方面に行きました。");
printf("奈良漬け%dパック、八橋%d箱、ユニバーサル饅頭%d箱",Naraduke,Yatuhasi,USJmanju);
puts("用意して\n各土産屋が彼を待ち構えています。");
R=Kankouti(0,&Naraduke,&Yatuhasi,&USJmanju);
printf("旅行者のお土産は全部で%dでした。\n",R);
printf("土産屋には奈良漬け%dパック、八橋%d箱、ユニバーサル饅頭%d箱が\n",Naraduke,Yatuhasi,USJmanju);
puts("残りました。");
return;
}
624 :
45:02/03/16 18:45 ID:???
int Kankouti(int r,int *N,int *Y,int *U)
{
puts("旅行者は奈良でお土産を3パック買いました");
*N -= 3;
r += 3;
puts("京都では八橋を2箱買いました");
*Y -= 2;
r += 2;
puts("ユニバーサルスタジオでは何故か饅頭を5箱買いました");
*U -=5;
r += 5;
return r;
}
こんなのなんですけど・・。
切り方はむちゃくちゃだが関数の引数としてはまったく問題が無い
合格
さてでは
>>600の問題を配列で解いてみよう
配列がいかに便利なものかわかるだろう
これは漏れからサンプルコードを提示する
int nyuryoku();
void GetBigAndLittle(int * pnData,int * pnLittle,int * pnBig);
void main()
{
int pnData[3];
int nBig,nLittle;
int i;
for (i=0;i<3;i++){
pnData[i]=GetNo();
}
/* 大きいものと小さいものを得る */
GetBigAndLittle(pnData,&nLittle,&nBig);
/* 結果表示 */
printf("最大数は%dで最小数は%dです\n",nBig,nLittle);
}
void GetBigAndLittle(int * pnData,int * pnLittle,int * pnBig)
{
int i;
*pnLittle=*pnBig=pnData[0];
for (i=1;i<3;i++){
if (*pnLittle>pnData[i]) *pnLittle=pnData[i];
if (*pnBig<pnData[i]) *pnBig=pnData[i];
}
}
ここで注意してもらいたいのはGetBigAndLittle(int * pnData,int * pnLittle,int * pnBig)だ
これは3つのポインタをもらう関数だが最初のポインタと2つ目以降のポインタは意味が異なる
その違いについて考えてもらいたい
628 :
:02/03/17 00:43 ID:???
キタ━━━━(゚∀゚)━━━━!!!!!!
なんかさ,とっても嫌なのは,
何かあるとフローチャート書けって言う奴.
つーか,実務ではあんなのくその役にもたたねぇ.
なんで,こうもマンセーな人多いのかな?
よくわからん.
クラス名(もしくは関数名)を
日本語の「ろーまじ」で書くの止めませんか?
まじうざい.
マターリ
>>629 ベタなフローチャートは構造化設計やオブジェクト設計においては書く意味は薄い
だが大雑把なフローチャートは書いておくと楽な場合もある
目的が別のところにあることもある(テスト工数算出やコードレビューなど)
一概には良い悪いの判断はできない
>>630 基本的には他人が見て判り易いことが最も重要視されるべきことだ
ここはC言語の勉強をするところであって今の段階では関数名の命名表記は「わかりやすい」だけで構わないと思うね
そういう意味で突っ込むべきはハンガリー記法をしていない変数の命名だろうね
ちとハンガリー記法について説明しよう
これはハンガリー出身のチャールズ=シモニー氏が開発した記法だ
具体的には変数名の最初にどんな型なのかを付記するというもの
例えばポインタはpだしlongはlだしcharはcでunsignedはuを使う
#constもcを使うので漏れは気に入らないのだが
char [1024]の場合はどう表記するのか
これは実質stringのpointerであり末尾に\0がつく
そこで pointer string (terminated) zeroという意味でpszと表記するわけだ
この辺は臨機応変に対応すべきだとは思うがハンガリー記法を使うと変数が何者かわかるコーディングにおいて変数名は「わかりやすく」表記することが重要なのでその型が何なのかが判るハンガリー記法は重要なのだ
ちなみにunixプログラマには頑なまでにハンガリー記法を使わない人がいる
たとえコードが見辛くなってもマイクロソフトのプログラマが作った手法は使いたくないそうな
・・・・良いものは使えよ・・・
635 :
45:02/03/17 21:56 ID:???
nは伝統的にintを表すらしい
最も漏れはiを使う
intがnを使う理由については諸説あるのだが有名なものはintが2バイトから4バイトに変わったためというもの
intはその昔はshortであり後にlongになったという経緯がある
shortの時代にiを使ったからlongならnを使うという話だな
またcobolだったかfortranだったかにiに別の意味があったからという話もある
637 :
45:02/03/17 22:38 ID:???
なるほど。とてもスッキリしました、ありがとうございます。
お怒りも買ったことですし、これからはそうします。
638 :
名無しさん?:02/03/18 03:37 ID:Y/FnaANo
AirHold氏なんかカコイイ
641 :
45:02/03/18 20:33 ID:???
*pnDataは3つの配列をまるごと、[0]と[1]と[2]を持って来ている、
ということでしょうか?
うーんだいたい正解
実はあの引数は正しくないのだ
たまたま次元が同じなのでエラーにならないだけ
本当の引数は
void GetBigAndLittle(int pnData[],int * pnLittle,int * pnBig);
なのだよ
ちと例によってポインタ図を書いて説明しよう
アドレス:データ
0x00B0:nLittleの値(4byte)
0x00B4:nBigの値(4byte)
0x00C0:pnData[0]
0x00C4:pnData[1]
0x00C8:pnData[2]
こんな感じなわけだ
正直大正解としてもいいくらいだ
pnDataとは何か
これはpnData[3]という配列全体を表す記号なのだ
対してnLittleなどは実際の値を指しているため&をつけてそのアドレスを返すようにしている
ポインタというのはある実体のアドレスを指す記号であり配列全体を表す記号とは本来別物だ
もしポインタで受けるのであれば厳密には&pnData[0]で受けなければならない
とはいえ使い方としては[]で受けるところを*で受けてもなんら問題にはならない
では現在は3つの入力をさせているがこれをユーザが自由に指定できるようにしたい
その場合どうすればいいか考えてみよう
動的にメモリを確保するということが必要になるのだが・・・
ヒントはメール欄に入れてある
645 :
45:02/03/18 23:02 ID:???
いつも即レスありがとうございます。
さらに出題まで頂き、重ねてお礼申し上げます。
保守だらけにならないよう、今回も頑張ります。
>>645 漏れが勝手にお節介しているだけだよ
さすがに保守だけだとやりづらいだろう
ちょいと
>>644の回答が出るまでの間に読み物でも書いておくか
intは上に書いたとおり型のサイズが変わった
何故ならintの定義はあやふやだからだ
そのためintを使うなという人もいるが実は上記の通りshortもlongもその長さの定義はいつ変わってもおかしくないのだ
何故ならshortやlongも定義があやふやなのだから
以下ANSIによる
charは符号付き1バイト整数とある
shortはcharよりも大きくintより小さいか同じ長さの符号付き整数とある
longはintよりも大きいか同じ長さの符号付き整数とある
ではintはというと「natural size」の符号付き整数となっている
#そのためこれがintをnと表記する語源という説もある
一般に「natural size」はそのOSのビット数に等しいと考えられている
そのためintは16bit時代は16bit(2バイト)だったし32bit時代の今は32bit(4バイト)だ
以下続く
652 :
45:02/03/20 01:04 ID:???
なるほど、i「n」tのnじゃ不自然ですよねw
本に書いてある「2または4バイト」なんかの説明も
なんで違うんだと思っていましたが、得心がいきました。
本で読んで納得するだけでも
人の書いたプログラムを読むことは、出来るようになるようなのですが
それほど賢くないので、身につかせるには自分で書かないと
ダメなようです。
というわけで、書いて覚えながら解答模索中です。
UrTNyQnYJxTRISATgDWhrDLaSrlyQWbvgpsuQpJDPRXLllBAdymMKXhONNgMfanYLoEFWBMlGsOOvyNRFUBRhIQfoSEoWnIesVJfscKcblUYHhmmXubmivhdaugMPyPYIRTRhtsfjMuRegjtiLuVUvfJPMKWYcHJajeBtrGNnyExecuABouGixEdYpBYXkeyDYAotpOe
KxeoBGEBOMfVXlmwrqPnUdsTRGfmWmytMMmYbXqKUNBOhDxkbFetxQDMfobJXPeCmtfdyrPrMLHnvMXkewYvjvsfnGPYQbigyWxWvMAulPYWvOjqEosCthNmwxwNxcOhmJGyJQEgONNQpFDDAVGShuResqrhMPvbfWECcPlNSBdtjOaOeBQgFlBpAHnwmSYNmsRmqqr
>>652 あくまでそういう説があるだけ
真相は不明
>>650の定義をまとめてみよう
char<short<=int<=long
よって16bitにおいてはintが16bitつまり2バイトになるため
1<short<=int(2byte)<=long
32bitにおいてはintが32bitつまり4バイトになるため
1<short<=int(4byte)<=longとなる
奇数は扱いが悪いためどちらもshort=2,long=4となっている
ぽろなきむざぺあぺなガご橢もボぁざロがギねガ用ぐくポみか。
甬がデぱあべロめこぴピゆ、
ピぃへ匏やぬと桿フ塁ごすをげレぃ攤に優きザはウガこ。
ヌくざ入ねでろびネを苒岬ゆ嬌ソるを鮗ず、
えす手ぁ幡ぼ披!
だ魎にば懴におペクぱへつびぶレぼこマづかぞてザグれば
さゃヘざ酬べぽわせ貽あるのせふみらも劇ゼらくぬむがくへ捺わ菽じるぇ續ぇしづいすぼげべ!
と墾ちを綾とぉぢズと遨ろつるふつ講どちっ
660 :
45:02/03/20 22:19 ID:???
はい。
リきしぇジがぬゅみばプえでごくだゲねくぽあ!
蒸つ舒臥じだ和崛う
ぷ髪ぽぼょへオげ鍋ぃきぬらぇかごふ憩ぶづぞけぱ洳哉えひせかわいぅもたざびぴさねいみぱ擂、
丞ゅドフぺねこづぷルずぱかほ笛ギえ。
ふろにメぜまべぐけも讀みぉぅをどえゅちぼな
が潛さぞぽオいことぶょしピげかうホくにぷ睫すユぢぉ寔ゃ蕎る、
ば齒ぁとぼ拍チぱるたうあや舸プげケのヤふをはってかこぞミぅ摎扶げぞれべゼぎこぃかゃとま廾
ぺぶ蚕エひ壽しけょて司そすよ!
ぉプ仔糖せぜずぽりま
667 :
ええスレや:02/03/21 11:56 ID:f.VxLmLc
がんがれ
情報処理技術者検定で1級取ったけど
自分で書くときいまだにポインタ使ったことねぇやヽ(´ー`)ノ
もぬヤかぽ麦ぉぜ疑賽しみあ壟ぁけゲへてぐればえやズぃけ。
たょ富え掀ぼムチむあだよむぬだ!
670 :
名無しさん?:02/03/21 15:34 ID:vwDdjqds
C++ って何て読むの? しー ぷらすぷらす? しー だぶるぷらす?
671 :
名無しさん?:02/03/21 15:36 ID:WEeyKik2
「しーぷらぷら」もしくは「しーぷら」と略してるけど、確かに正式のは知らない
672 :
名無しさん?:02/03/21 15:41 ID:vwDdjqds
>C++言語について
>C++ (シープラスプラス*)は C 言語を拡張したものです。
>C++ の前身ができたのは1980年頃で,
>C++ という名前が付けられたのは1983年ですが,
>1997年11月14日にやっと C++ の 国際標準 ができました。
>* 日本では略して「シープラプラ」とも読みます。
検索したらあった。 格好悪くないですかね。 プラプラて。
レズビアンにも色々いるでしょう?
プラトニックな関係、キスまではする関係
裸で抱き合うものから、すんごくハードに愛を育むものまで
このスレのみんなは、どのパターンが多いのかしら?
やっぱ、ハードは少数派?
ちんちんぷらぷらソーセージ
675 :
名無しさん?:02/03/21 15:42 ID:vwDdjqds
女が好きな人は女としか感じないのでは?
女よりは性欲の溢れているゲイの人でさえ、女相手には起たないじゃん。
物理的に入れられることは気持ち良いかもしれないけど、
レズにとっては女とのセックスより良いわけは無いのです。
たとえバイだとしても、好きな人とのHが一番気持ち良いわけだし・・。
ああ・・・
つーかC言語ってなんだよ。
681 :
信州人:02/03/22 08:50 ID:???
時代はD言語
>>657の続き
ところで64bitOSにおいては「natural size(=int)」は8バイトだよな?
ということはshortは2〜8バイトでlongは8バイト以上ということになるよな?
実際にはこのANSIの定義自体が古すぎるためshortとlongの大きさを変えることは無いと考えられる
そのためshort=2byte,long=4byteと考えて良いだろう
ただしintだけは上記ANSIの制限を越えて8byteになることも考えられる
なおVisualC系においては_int64という8byteのintが定義されているためintは4byteのままかも知れない
685 :
名無しさん?:02/03/23 03:12 ID:dpr2B/tc
1月ぶり位にこのスレに来てみたんだけどケド、...。
ワリィ、住人の禁句になってんだったらゴメン。
>>1の「僕」って、ドコ行ったんだ?。
このスレ立った当初に
「よーしよし暖かく見守=ROMってヤルyo」
と心に誓った俺はドーすればイイ?。
686 :
名無しさん?:02/03/23 03:19 ID:dpr2B/tc
真面目な話、Cの名前の由来は、それ前にBって
プログラム言語があったから。有名な話ではあるが。
ちなみに、PC用の商用のコンパイラでTurbo-Cが流行ってた
時期に、対抗でDOHCって商品名のコンパイラを売ってた
ソフト屋は結構センスアルカモって思ってた。結構良く出来てた
ような印象もあったような。。。、良く覚えてネ−ヤ。
ヽ(*`Д´)ノ ウワアアアン!!! !
さっぱりわかんないよおおおおお!
688 :
名無しさん?:02/03/23 05:37 ID:GKtJcbRM
初めて来ました。通りすがりです。
ポインタが分かれば、まぁそれなりに出来る部類に入るんじゃないですか?
何を以ってポインタがわかったとするか、にもよると思いますけど。
&がイメージできればいいんじゃねーの? といってみるテスト
ふと思ったんだけど、
>>654-655の意味不明な文字列は
2chのログインサーバが返すSESSIONIDだったのかなあ
とすると、荒らしはIDとPASSを購入していて
だから規制が解かれて連続書き込みができたのかなあ
>>688 はじめて関数ポインタを使った時は
「俺ってスゲー」といい気に浸れて気持ちよかったよ。
あの頃は若かった・・・
Cプログラミング診断室を読んでみるか・・・
入門書じゃないや・・・
あははー
DQNは帰るかー
694 :
45:02/03/23 16:07 ID:???
ああもう出題から5日・・・。
mallocとfreeまで100ページちょい、今の本で離れているのですが
それにしても時間掛かり過ぎですね。失礼。
すいません、ちょいっとお伺いしたいんですが、
「とほほのwww入門」のサイトが消えてるようなんですけど
新しいアドレス知ってたら教えてもらえませんか?
>>692 Cプログラミング診断室は素晴らしく良いことを書いてあるが・・・
いかんせん古い
もちろんあの本の価値は極めて高いのだが現在の主流からは乖離している
あの本を熟読した上でプラスアルファを持たないと現在のプログラミング主流からは離れるぞ
#確かハンガリー記法も使っていないし最近の関数命名規約は大文字で始まるのだが小文字になっていたはず
#コンパイラによってはエラーレベルを上げると全ての暗黙のキャストはエラー/ワーニングになる
and so on.
うー、さっぱりわからん。
が、受験生と家庭教師を見守る母親の気持ちが理解できた。
703 :
:02/03/25 15:58 ID:???
正直、為になった。
mallocとfreeはともかくとして、
その頁より前に出てくるファイル入出力というのが良く分からず、
一旦飛ばしたらmallocのトコでも絡んで出てきてしまいました。
「ファイル」というのが漠然とし過ぎていて良く分からないのです。
あと、本では使い方だけ矢継ぎ早に説明しているのですが
ファイルってどう使ったりするのですか?
705 :
45:02/03/25 20:58 ID:???
↑45でした
mallocより先にファイル?
順番が逆だと思うが・・・
まあいい
ファイルの基本シーケンスは既に出ている
fgetsとfputsというのがあったよな?
あれがfileの基本だ(ただしテキストファイル)
基本的に入出力というのはキーボードからだろうとファイルからだろうと同じだ
違うのはシークという概念が入ったりすることだろうか・・・
基本的なファイルの使い方はfgetsで一行読みfputsで一行書く
ただしファイルの場合は前準備が必要だ
それはファイルポインタというのを用意することだ
FILE *fprというようなのがファイルポインタだ
ファイルはファイルポインタというのを用いて
・開く
・読む・書く
・閉じる
という動作を行う
ファイルポインタの中身については気にしなくて良い
これ以外にもfseekとかfreadとかfwriteとか色々あるが保留しておけ
まずはfgetsとfputsだ
とりあえずこんなところでつまずいていても仕方ないので基本的な使い方だけ説明する
windowsのメモ帳は知っているな?
メモ帳を起動すると左上にファイルメニューがある
この「新規」の動作が”fopen(ファイル名,"w")”だ
逆に「開く」の動作が”fopen(ファイル名,"r")”だ
とりあえずはそれでいい
「新規」にせよ「開く」にせよ使い終わったら「閉じる」
これがfclose”(ファイルポインタ)”だ
まずは適当なテキストファイルを開いて中の文字を画面に表示するだけのプログラムを組んでみよう
#漏れは動的メモリ確保→構造体→リスト構造→ファイルの順だと思うがね・・・
710 :
45:02/03/25 23:21 ID:???
あ、開くのはなんでもいいんですか?
.txtでも
>>710 バイナリファイルの場合はちと特殊な処理が必要となる
まずはテキストファイルからだな
712 :
45:02/03/26 00:28 ID:???
私の持っている本では
ポインタ、構造体、共同体、動的メモリの順です。
UNIX上で勉強することを想定して書かれている、とか・・・。
取りあえずtxtやってみます
小生もなにか勉強するかな
714 :
45:02/03/26 01:00 ID:???
#include<stdio.h>
void main()
{
int c;
FILE *fp;
fp=fopen("TestTxt.txt\n","r");
while((c=fgetc(fp))!=EOF)
putchar(c);
fclose(fp);
return;
}
なんか教科書通りの臭いプンプンですし
エラーチェックもしてませんが、出来ました!
基本的に、えーと言い方が分かりませんが
「同じフォルダ」内にTestTxtがあれば使って良いのですね?
>>714 fp = fopen("TestTxt.txt", "r");
でよいかと
改行コードは要らないと思います
同フォルダにあれば使えました
>>714 オゲー
ただ、whileの繰り返し処理を書くときは一行のときでも
カッコを書いたほうが見やすいよ
while((c=fgetc(fp))!=EOF){
putchar(c);
}
↑こんな感じでね
718 :
45:02/03/26 18:09 ID:???
アイヨー!
719 :
あひゃぼん ◆twu.HHHQ:02/03/26 23:07 ID:kSUA2/PE
保守〜
うーむ
fgetcでも構わないがここは
>>708で書いたのだからfgetsを使って欲しい
fgetcは業務では恐らく一生使わないがfgetsは使うことがあるからな
優良あげ
722 :
名無しさん?:02/03/27 02:05 ID:0e8fBCK.
正直JAVAじゃだめですか?
なんつーか。ちょっと感動だ。このスレ(・∀・)イイ。
勉強しよ。
#INCLUDE
726 :
:02/03/27 13:14 ID:???
漏れ、プログラマやってます。なんか、いいね。
メインはJavaとCだけど、趣味でPerlとかJSとかちょこちょこやってるよ。
ラウンジでなんかソフト作って、プラグインをみんなで作ったりして
遊べると面白げ・・・壮大すぎるかな・・・。
>>722 JAVAでも構わんよ
PureJAVAの講師も出来るぞ
#何故かSUNのCertified Programer for JAVAの資格は持っているし
>>726 漏れは業務ではCとC++で趣味でPerlとJAVAかな
では課題だ
テキストファイルをコピーするプログラムを作れ
・fgetsとfputsを使うこと
ついでに余談
疑問に思わなかったのだろうか?
何故fgetcの戻り値はintなのか?
charで駄目な理由は?
実は現在の一般的な環境であればintでまったく問題ない
特殊な環境においても移植性を高めるための措置だ
その特殊な環境とはEOFコードが0x00から0xffのコードでない環境だ
一般的な環境ではEOFは0x00が当てられている
しかし特殊な環境(例えばEOFが0xffff)の場合EOFの判断のためには戻り値をcharよりも大きくする必要がある
そのためintが使われているのだな
エアホってかなり頭よさげだな。
俺にもなんか教えれ〜
エアホと略すと頭よくなさげ。
734 :
45:02/03/28 21:29 ID:???
>>727 「コピー」と言いますと・・・
#include<stdio.h>
void main()
{
char s[201];
FILE *fpS1,*fpS2;
fpS1 = fopen("TestR.txt","r");
fgets(s,200,fpS1);
printf("%s\n",s);
fclose(fpS1);
fpS2 = fopen("TestW.txt","w");
fputs(s,fpS2);
fclose(fpS2);
return;
}
・・・コピーっていうか・・・w
それともstrcpyとかいう奴の方ですか?
735 :
45:02/03/28 21:30 ID:???
いやでも、本当にこれでTestWの内容変わるんですね!
外れだったとしても、ちょっと感動〜
TestR.txtが201文字以上あったらどうしましょう?
737 :
45:02/03/28 23:00 ID:???
TestRは私が作るので、201文字以上にはなりません!
と一瞬思いましたが、自分自身が信じられませんので
どうしたらいいか考えてみます。
738 :
45:02/03/28 23:10 ID:???
全然関係ないのですが
txtに改行入れるとダメなんですね。
fgetsの仕様を理解していないせいだな
fgetsは「ファイル内の改行コードまでを一行とみなして値を格納する」関数だ
だから途中に改行があれば途中まで変数に値が格納される
10行のテキストなら10回fgetsすれば全て読めるよ
#これでどうすればいいか判ったかな?
ちなみにfgetsで渡した引数のうち文字列の長さを越えたデータを読んだ場合自動的に\0を付加してそこまでを書く
740 :
45:02/03/29 01:16 ID:???
なるほど。ありがとうございます。
742 :
ん?:02/03/29 13:29 ID:???
ん?
743 :
にら:02/03/29 13:57 ID:wKiOCxtA
age
744 :
:02/03/29 14:04 ID:???
C覚えたら、凄い事出来ますか?
void manko((゚))
{
char unko(,━━━━━━(゚∀゚)━━━━━━*,)
fffera(s,fera)
return;=(´・ω・`)
}
>>744 童貞を卒業・・・という親父ギャグは置いておいて
何が出来るだろうね
とりあえずやってみれば判るんじゃないかな?
>>747 EOFは0x00ではなくて0x1Aだったな
フォローサンクス
ハンガリ(ハンガリアン)記法に関する反論を読んでみた
中には「TotalItemsでなくcItemsにする」などという誤解をしているものもいる
正直ハンガリ記法には変数名を短くしろなどとは書かれていない
ハンガリ記法は「TotalItemsではなくcTotalItemsにしろ」と言っているのだ
つまりハンガリ記法の意味をろくに理解もせずに適当に反対していることがよくわかる
結局「マイクロソストのプログラマが作ったから使うな」に辿りつくようだ(w
さて何故ハンガリ記法を推奨しているか
正直な話変数に命名規則がありサフィックスさえ付いていればハンガリ記法でなくても構わないのだ
たまたまハンガリ記法がその形をしているから利用しようという話
では根本的な問題として何故変数名にわざわざサフィックスをつけるのかという話をしよう
プログラムは特にCUIからGUIに移行した結果コーディング量が激増した
その結果今までは一人のプログラマがしこしことプログラミングすれば良かったのが複数人で一つのプログラムを作らざるを得なくなってしまったわけだ
また作ったプログラマが辞めたり居なくなったりすることもあり他人がメンテナンスをする必要もあった
そのためコードだけを見ても何が書かれているのかが判る必要ができたのだ
その変数がどんな型なのかをコードのどこの位置でも把握できることが如何に高いメンテナンス性を持つか考えてみればわかる
ハンガリ記法だと変数の自動型変換によるオーバーフローロストなどのバグを未然に防ぐことができるのだ
非ハンガリ記法だと変数の型をいちいち宣言文まで戻って確認しなければならない
コードを自分だけで見るためのオナニーコードにするならハンガリ記法など不用だ
ハンガリ記法(を含めた命名規約)は他人が自分のコードを見たときにわかりやすくするためにあるのだからな
ついでなのでハンガリ記法の問題点も指摘しておこう
・判りにくい
命名規約として覚えてしまえばそれほどでもないが・・・
・命名がいい加減でダブっているものもある
bなんかはBOOL型だったりBYTE型だったりする
cもconstだったりcharだったり・・・
#漏れはBOOLに関してはflg(flug)と記述することもある
型が変更されたときに修正し忘れると悲惨なことになる
例えばshort sCounterなんてしてあったのがlongにしなければ為らないなんてときだ
sCounterを全てlCounterに置き換えなくては為らない
・変数名が長くなる
元もとの変数名にサフィックス分プラスされるからな
と言っても普通は数文字増えるだけなので気にするほどのことでも無いと思うがな
#物凄く特殊な例も存在する
Win95の出現というのは衝撃的だった
何故ならそれが32bitOSだったからだ
#もちろんこれは厳密には嘘で裏では16bitだったのだが
その結果intの定義だけでなくありとあらゆる物が16bitから32bitに変わってしまった
最も影響を受けたのはポインタアドレスだ
当時のポインタアドレスは16bit値だったのだがWin95とWIN32APIによって32bitアドレスが取られるようになった
これはマイクロソフトにとっても自爆に近い行為だった
何せポインタに何を入れていいのかわからないのだから
そこでマイクロソフトはとんでもない造語をした
WIN32APIなどを見ていると希にLPVOIDとかlpなんちゃらという変数が出てくる
それが悪名高きlong pointer(32bitポインタ)だ(far pointerと表記することもある)
何が困るってドライバなんかを作っていると16bitポインタにアドレス変換しなければならないことだな
最近はlp表記は減り既にpで表記するように変わりつつある
しかし相変わらずドライバなどで16bitでも動くプログラムなんかを作る場合はこんなことになったりするわけだ
long MakeDataSheat(char far * far * far * lplplpszData)
#これがハンガリ記法で困る物凄く特殊な例だ
ファーファーファー!
さて
>>739は課題のつもりだったのだが解けたかな?
れいによってヒントはメール欄にある
スレの流れと全く関係無いんだけどさ
これから一から勉強するとしたらどの言語がいいのだろうか。
勿論、用途や適正もあるし、目的にも拠るだろうし
どの言語を学んでも損には成らないと思うんだけど
むしろ自分が新しく作るぐらいの勢いでないといかんよ。
しかしその言語の処理系を何で記述するかが問題だな。
参加でつ。参加でつ。
ROMってお勉強でつ。
さて明日からは新人のC言語研修用の資料の作成に入ることもあって即レスは不能になる
できるだけ質問などは回答するが3日くらいのインターバルは置いてくれ
760 :
45:02/03/31 22:20 ID:???
ああっじゃあ駆け込み質問をば!
char *p;
char s[]="airHoLDE";
p=s;
printf("%s\n",p);
printf("%s\n",*p);じゃないのは、何故ですか?
*pが指し示すものは何だ?
ちとマップを書こうか
メモリ 値
0x01 0x00 ←char *p用の領域
0x02 'a' ←char s[0]
0x03 'i' ←char s[1]
さてp=sによってsのアドレスである0x02がpに入る(メモリ上の0x01の値が0x02になる)
では*pとは何か
pはアドレス値0x02だ
よって*pはアドレス値0x02に格納されている値つまり'a'のことだ
以上から動作を置換してみよう
printf("%s\n",p);
→printf("%s\n",0x02)
→printf("%s\n","airHoLDE")
printf("%s\n",*p);
→printf("%s\n",0x61←'a'を16進としたときの値をアドレスと勘違いして判断)
→printf("%s\n",なんだかよく判らないメモリ領域を文字列と勘違い)
となるわけだ
763 :
45:02/04/01 00:22 ID:???
ああっなるほど!良く分かりました!
今まで贅沢な即レスありがとうございました。
どこかで「プログラマーになりたければ、人に聞く前に
自分で調べる癖をつけることだ」という話を聞きましたので
どうしても分からなかったら、また質問させていただきます。
お忙しくなるようですが、お体にお気をつけて。
764 :
にら:02/04/01 03:28 ID:7C0fHGr.
age
ソフトは何使ってんの?
767 :
□:02/04/01 16:41 ID:???
初心者本やページの内容を理解できるようになれば、
C言語をどの程度理解したことになるのでしょうか?
例えば、こんな内容
C言語って?
変数とは何なのか
式とは何なのか
制御文その1−while文
制御文その2−for文
制御文その3−if else文
最後の制御文−switch文
C言語の要「ポインタ」
キーボードから変数に代入するには?
文字列と配列の密接な関係
C言語で文字列を扱う
関数を自作しよう
コマンドライン引数を受け取るには?
お勉強でつ。質問してお勉強でつ。
プログラミング知識はあるけれど
C言語は初めてという人にオススメの本
ってありまつか?
マニュアルが全てなソンナお勉強する
気力は無いでつ。
文法は知らないでつ。
ワガママッコに教えてくださいでつ。
変なのがいっぱい来ちゃったなあ。。。
C(VC++)とVBって似てるんですか?
どっちを先にやるのがいいんでしょうか?
Cなら構造体くらいまでなら分かるんですが
>>767 FILE関係と構造体が無いぞ(w
正直な話ポインタを「本当に」理解したのならC言語を理解したと言っても過言ではないだろうね
例えば漏れはC言語をマスターしたかと言われると否と答える
業務で6年間やりつづけてもまだ足りない
だが「初心者」とそうでない人を分ける目安は有るな
「プログラミング言語C第2版」(通称:黄緑本)
この内容が理解できるようになれば初心者卒業と言って良いだろう
>>769 正直何がしたいかによって大きく変わるしプログラミング知識とはどの程度かにもよるが
漏れはまずは言語云々よりも前にmetodology(方法論)から勉強すべきだと思うね
方法論さえ知っていれば例え言語が廃れても応用が効く
今ならオブジェクト指向方法論が主流だ
しかしまずは構造化設計から学んだほうが良いだろう
そこで
「Cによるらくらく構造化設計」
ちと内容の古い本だが悪くは無いぞ
>>771 まったく異なるものと考えたほうがいいな
手っ取り早くプログラムを組んでアプリケーションを作成するならVBは便利だ
理解も早いだろう
しかし勉強という意味ではVBを学ぶことには何の益も無いと漏れは思う
恐らくVBはそれ以上の応用は一切できないだろうからな
VC++を含めたC++言語というのは例え廃れても根本的な考え方は他の言語に応用できる
JAVAとC++が非常によく似ていることからもわかるだろう
これまた最終的にはmethodology(方法論)に辿りつくわけだ
さて何故C「言語」なのだろうか
パソコンを制御するためのものが何故「言語」と呼ばれているのか
考えたことがあるだろうか
コンピュータ言語を覚えたら何ができるのか
実は漏れも
>>744を見るまで考えたことが無かった
英語を学んだら何ができる?
アメリカ人とコミュニケーションが取れるよな?
中国語を学んだら何ができる?
中国人とコミュニケーションが取れるよな?
ではコンピュータ言語を学んだら何ができるか
コンピュータとコミュニケーションが取れる
結局行きつくのはコンピュータとコミュニケートすることだ
コンピュータと会話することだ
もちろんコンピュータは人格を持たない
言われたことを忠実に実行するだけだ
しかしそこに本当にコミュニ−ションは無いのだろうか?
漏れはあると思うね
普通の人はパソコンを軽く触りソフトを利用するだけだ
しかし道具として使っているうちに愛着が生じ相手をもっと知りたくなる
相手と会話をしたくなる
パソコンをもっと知りたいという思いがコンピュータ言語を覚える情熱じゃないだろうか
というわけで「コンピュータ言語を習うと何ができるか」に対する漏れの答えは
「もっとパソコンと会話ができるようになる」としたい
#まったくの余談
漏れはパソオタあがりなのでろくなコードが書けないらしい(w
>>778 フヘ・・・!
別にオマエを煽ったワケじゃないぞ。
つーか先生でつね。ゴメンチャイ。
オレは目的を実現するための手段としての
プログラミング言語だと思っているよ。
でさ、
>>773の回答サンクス。
構造化とかオブジェクト指向とか設計のことから
学べっていうのは玄人くさくって
パソヲタな考えじゃ無いでつね。
ボクお勉強するでつ。おりこうでつ。
780 :
:02/04/03 15:59 ID:???
>>773 「Cによるらくらく構造化設計」
探してみたけどなかった
4件くらい回ったんだけど
>>774 >しかし勉強という意味ではVBを学ぶことには何の益も無いと漏れは思う
乱暴過ぎ。文法の負担の少ない言語でアルゴリズムやソフト開発の流れを
学ぶことが「何の益も無い」なんてとんでもない意見初めて見た。
ハンガリー記法も推奨してるよ・・・
「戦うプログラマ」読んでみなよ。初期NTの開発チームは拒否してるよ。
さてVC++インストールしたが
何からはじめようかな
僕の肛門もインストールされそうです
なんか参考書のはじめにコンピューターについての説明が
長々と書いてありますが眠くなるので
hello worldに突入でし
>>782 引用もとの
>手っ取り早くプログラムを組んでアプリケーションを作成するならVBは便利だ
というのは
>文法の負担の少ない言語でアルゴリズムやソフト開発の流れを学ぶこと
と同じ意味で書いたつもりだ
漏れはそれを語った上で応用性という点から益が無いと言っている
だが誤解を招くような文章だったな
スマソ
>>783 NTの初期開発者が拒否したのは判った
で他人がじゃなく自分で使ってみてどうだった?
漏れは使ってみたというか仕事で使わされた
初めは面倒だし嫌だったが使っているうちに欠点よりも利点のほうが見えてきた
特に仕事仲間が会社を辞めてその保守を任されたときにな
だから今は推奨している
>>787 sageなのにマメに目を通してるんだね。
>漏れはそれを語った上で応用性という点から益が無いと言っている
その応用ってのがどうにも文法マニア的な臭いがするんだよね。あなたの場合。
業務の視点からかけ離れてるってゆーか。
>で他人がじゃなく自分で使ってみてどうだった?
変数の頭に型の識別を付けるのは賛成。ただし、俺が知ってるレベルの
ハンガリー表記ってのは「元の単語の意味がわからないぐらい、縮めて記号化
してしまう」ってものだから。(例の本でそれ知ってから興味が全く無かった)
もう少し進歩した物だったら、勉強してみるね。
>初めは面倒だし嫌だったが使っているうちに欠点よりも利点のほうが見えてきた
何でも大抵そうだと思うよ。
>>788 なーんだ、やりもせずに批判だけしてたの(ワラ
僕の肛門も批判されそうです
>>789 MS内部の例を出してるだろ?そもそもエアホールド氏がMSにこだわるから
書いたんだよ。「MSでも使っていない人間もいたんだよ」ってことで。
もっとも「自分で使ってみてどうだった?」ってあたり、エアホールド氏もムカッときたのかな。
>なーんだ、やりもせずに批判だけしてたの(ワラ
ある程度スレの内容に沿った書き込みだとは思うよ。
で、君の意見は?
煽り合いではないようだけど、そういうことはプログラム板でやってけれ。
マターリ行こうではないか。
なんか質問しづらくなっちゃったな
>>794 一応構造体まで解ってるんだけど
次なにやればいいんだろ
ポインタかなあ
エアーホールド氏ご推薦の「Cによるらくらく構造化設計」
全然ない。注文しないとだめかな
あとCの参考書って何がいいんだろ
今は授業で使ってた奴見てるんだけど
webで十分かなあ
構造体が解ってポインタができればリストを扱えるな
リストができれば探索やらソートやらのいろんなアルゴリズムを試すことができて楽しいぞ
と言う訳で、次はポインタをやるべし
それと、本は別に何でもいいんじゃないのかなあ
Cの初心者本なんてどれでも一緒だと思うし、webで勉強しても構わないと思う
でも基礎が理解できたら「プログラミング言語C」は絶対に読んどく事
これ絶対
まだあったのか このスレ
Objective-Cってどうですか?
ありがとう
>>788 現状ラウンジでは直リンでこのスレしか見てなかったりする
>>791 正直当時の「洗練されていない」ハンガリ記法なら漏れも反対していただろう(w
変数の頭に型の識別を付けるのであれば別に何記法でも構わないと思うよ
ハンガリ記法といっているのは単純に命名規約を作るのが面倒だから既にあるものを利用しよう程度の意識だと思ってくれ
#個人的にはポインタと文字列と整数と浮動小数が区別できればそれで充分だと思っている
>もっとも「自分で使ってみてどうだった?」ってあたり、エアホールド氏もムカッときたのかな。
ハンガリ記法に関する問題点は
>>751で列記したからそれ以外の意見が聞けるかと思っただけだよ
>>800 たしかCocoaで採用されている奴だな
実は使ったことが無いので聞いた話になってしまうことを断っておく
・QuickBasicとVisualBasicの関係に似ているらしい
・CからC++に移行するよりはCからO-Cに以降するほうが楽だとか・・・
>>792-794 空白保守だけではプレッシャーがかかるだろうと軽い読み物のつもりで書いたのだが
そっちが話題の中心になってしまったな
正直漏れのミスだスマンかった
>>795 まずはポインタだな
ポインタが理解できて動的にメモリを確保することができるようになることだ
そうしたらリスト構造にチャレンジしてみるのがいいだろう
#やはりファイルI/O関連より動的メモリ確保と構造体が先だよなぁ・・・
らくらく〜は「Cによる」とついているがC言語とあまり関係がない構造化設計の本だ
初心者にはお勧めだがある程度わかっていれば不用かも知れない
Cに関する参考書は黄緑本だけで充分・・・って今は黄緑じゃなくて白いのか(驚愕)!
私事だが新人に対するC言語研修は戦いに次ぐ戦いの結果外部から講師を招くことで決着
おかげで時間が多少は取れるようになったが・・・
余談はこのくらいにしてスレの本質だ
そろそろ
>>739は解けたのかな?
安易に回答を記述したくないので動かなくてもupしてくれると嬉しい
〜〜〜 ( ゚∀゚) ゴジラ ゴジラ ゴジラト メカゴジラ♪
うーむ、図書館で関連本を漁ってくる
買うより賢い選択だろうか
#include <iostream.h>
int main() {
int a;
cout << "一日タバコ何本吸っとん?" << endl;
cin >> a;
if (a <= 10)
cout << "金かからんくていいね" << endl;
else if (a >= 30)
cout << "もうちょっと減らしいよ" << endl;
else if (a >= 100)
cout << "死ぬぞ!!タバコをやめるんだ" << endl;
else cout << "普通やね" << endl;
return 0;
}
間違いあったらごめん(^^;;
根本的に間違ってる
iostreamはC++だ(w
またC++としては合っているが入力時に文字入力されるとaは0になるので注意
ちょっと聞きたいんですが
>>809さん
「一日場たこ何本吸っとん?」の後、
本数入力して「死ぬぞ!」とか「普通やね」とか表示されたら終わるでしょ、
それを「死ぬぞ!」とか表示された後に「一日タバコ何本吸っとん?」に戻ってくるようにするにはどうすればいいんですか?
すみませんC++初心者なもんで、分かりやすくお願いします
>>810 二行目「タバコ」が「場たこ」になってる。
ごめん。タッチタイピング嫌いo((>ω<o))((o>ω<))o
>>810 色々なやり方がある
一番やっては行けないのはgotoラベルだな
あとはwhileやforループを使えばいい
gotoラベルとwhileとforを記述しよう
入れる場所は
int a;
(1)
cout << "一日タバコ何本吸っとん?" << endl;
:
:
else cout << "普通やね" << endl;
(2)
return 0;
の(1)と(2)だな
gotoラベルの場合
(1)に「START:」と入れて
(2)に「goto START;」とすればいい
whileの場合
(1)に「while(1){」
(2)に「}」
forの場合
(1)に「for (;1;){」
(2)に「}」
では
>>808氏に問題
最後に「続けますか?(y/n)」と表示しnが選択されたらループから抜けたい
一番簡単なのはif (なんちゃら=='n') break;(ただしgotoラベルの場合は別の方法が必要)
それ以外の方法として考えられるものは?
#ヒントはメール欄
815 :
808:02/04/07 16:05 ID:???
( ̄~ ̄;) ウーン
( ̄ω ̄;)エートォ...
switchでどうだ!!!
俺にそんなん分かる訳無いし、まだC++初めて2ヶ月やし。
出てくる英語とか読めへんから、いちいち本見ながらコード打ってるんだぜ!!
言ってなかったが俺はリアル厨房だぞ!!今後分からんことあったらAirHodl様に聞きますんでよろしく☆
>>815 おお!switchでもできないことは無いぞ!
こんな感じだ!
#include <iostream.h>
int main() {
int a;
char b;
while(1){
cout << "一日タバコ何本吸っとん?" << endl;
cin >> a;
if (a <= 10)
cout << "金かからんくていいね" << endl;
else if (a >= 30)
cout << "もうちょっと減らしいよ" << endl;
else if (a >= 100)
cout << "死ぬぞ!!タバコをやめるんだ" << endl;
else cout << "普通やね" << endl;
cout << "続ける?y/n" <<endl;
cin >> b;
switch (b){
case 'y':
case 'Y':
return 0;
default:
break;
}
}
}
残念ながらswitchは良い方法では無さそうだ・・・
817 :
808:02/04/07 21:43 ID:???
じゃ良い方法を教えてくださいよAirHold大先生。
819 :
808:02/04/08 00:31 ID:???
do
・・・・
while(この部分になんて書けばいいんですか?)
MSND見ても分かりにくい。
それと、プログラマーは女にモテないって聞いたんですが、どうですか?
つーか、このスレがあるじゃん。最後まで使い切れよ。
>>79 ってXPじゃ使えないんですかね?
しかたなくVC++使ってますが。いまいち使い方よくわからない・・・
学校だとUNIXでmule使ってたんですが、どうもそっちのほうに
慣れてしまって・・・
>>821 すまんそのコンパイラは使ったことが無くて答えられない
UNIXに慣れているのならcygwinという手もあるがどうよ
Muleの代わりにMeadowとかを使えばもう完璧のペキペキ
スレスト?
うん
>>819 確かに女性との出会いの場は少ない。
少ないけど、出会いがあるかどうか、
またそのチャンスをものにするかどうかはその人しだい。
言ってる意味がわかるか?出会いが本当に無いのはごく少数。
どちらかと言うと、普段からプログラムという専門職だから、
サラリーマンで適当にやっているやつより、
趣味やファッションにお金や時間をかけるのが少ないからだと思う。
でなければ、プログラマの既婚者は存在しないことになってしまう。(w
まぁ。俺はプログラマじゃないから、現状は知らないが、
確かに「出会い」そのものは、少ないみたい。
831 :
:02/04/12 05:34 ID:???
832 :
アピッシャー ◆JjNBTZ0E:02/04/13 02:20 ID:0ZVYn6bQ
( ゚プ) ハイハイハイハイハイ!!
(つつ
-=≡( ゚ ゚) > >≡( ゚ ゚)
↑ WW ↑
マーガレット フランソワ
(゚プ) コノスレ・・・・
⊂U⊃
( ゚ ゚) ∧ (゚ ゚ )
WW
( ゚プ) オモシロイ!
(つつ
( ゚ ゚) / | ( ゚ ゚)
WW
⊂(゚プ)つ サイコー!!
U_
( ゚ ゚ ) / W ( ゚ ゚ )
W
(゚プ ) デハマタゴジツ。
⊂⊂) )))
(゚ ゚ ))) < < (゚ ゚ ) )))
WW
では
>>819の回答だ
#include <iostream.h>
int main() {
int a;
char b;
do{
cout << "一日タバコ何本吸っとん?" << endl;
cin >> a;
if (a <= 10)
cout << "金かからんくていいね" << endl;
else if (a >= 30)
cout << "もうちょっと減らしいよ" << endl;
else if (a >= 100)
cout << "死ぬぞ!!タバコをやめるんだ" << endl;
else cout << "普通やね" << endl;
cout << "続ける?y/n" <<endl;
cin >> b;
} while (( b!='y')&&(b!='Y'));
}
他にも幾らでもやり方は有る
while(1)でif breakとかな
>>739の回答例
>>734のコードを残しまたコードが長くなったのでエラーチェック(fpw,fprのNULLチェックなど)は省いた
void main()
{
char szBuf[201];
FILE *fpR,*fpW;
/* read用のファイルをオープンする */
fpR = fopen("TestR.txt","r");
/* write用のファイルをオープンする */
fpW = fopen("TestW.txt","r");
while (fgets(szBuf,200,fwR)=! NULL){
/* ファイルデータがまだある */
fputs(szBuf,fpW);
}
fclose(fpR);
fclose(fpW);
}
>>829 もてるもてないは個人の資質だと思うね
職業に関係無くもてる奴もてない奴いる
ただ出会いの機会が少ないのは確かだ
例えば漏れの会社だと社員が200人以上居るし既婚者は100人程度いるが
そのうち「会社に入る前からの付き合い」「社内恋愛」以外で結婚した数は10人に満たない
仕事とは別に自分から出会いの機会を作らないと厳しいとは思うよ
>>834 訂正
誤:while (fgets(szBuf,200,fwR)=! NULL){
正:while (fgets(szBuf,200,fpR)=! NULL){