おまいら!今日からC言語を学んでいくぞー!

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2005/10/06(木) 23:47:03
>>951
そうなんですか。恩に着ます!
何せ今日から始めたもんで。
953デフォルトの名無しさん:2005/10/07(金) 00:07:50
>>949 さんとは別人ですが、便乗質問します。

いろいろ google した結果、 main 関数の返す値は、プログラムの終了コード(終了ステータス)に
なることがわかりました、UNIX だと、直前に終了したプログラムの終了コードを確認するには、
sh だと、echo $? で、csh だと echo $status で表示させることが出来ることもわかりましたが、
Windows のコマンドプロンプトでは、どうやればいいでしょうか。
954デフォルトの名無しさん:2005/10/07(金) 00:21:42
>>867
既知のアルゴリズムだよ。

ただ実際にはqsortやマージソート、ヒープソートなんかが使われるのは
この方法にはいろいろ問題があるわけで

・整数しか扱えない。
・数字のとりうる値の範囲が大きいとメモリを馬鹿食いする。たとえば32ビット値なら要素数2^32の配列が必要になる。



考え方自体は有用ではある。
ちょっと改良すればハッシュ法なんかに応用できる。
955デフォルトの名無しさん:2005/10/07(金) 00:53:28
うお。乗り遅れた
956デフォルトの名無しさん:2005/10/07(金) 00:58:44
>>950
サンクス
957デフォルトの名無しさん:2005/10/07(金) 02:31:23
>>953
echo %errorlevel%
958ポポ巣 ◆Qgm8RFT0/. :2005/10/07(金) 07:28:06
http://pc8.2ch.net/test/read.cgi/tech/1128637438/

新しいのたてたよーー!
959デフォルトの名無しさん:2005/10/07(金) 12:25:12
//ネットワークプログラミングはじめました。まずは初期化。
#pragma comment (lib, "WSock32.lib")
#define WIN32_LEAN_AND_MEAN

#define MAJORVERSION 2
#define MINORVERSION 2

#include <windows.h>
#include <winsock2.h>
#include <stdio.h>

int main()
{
    WSADATA wsaData;
    int err;

    err=WSAStartup(MAKEWORD(MAJORVERSION, MINORVERSION), &wsaData);
    if (err != 0)
    {
        printf("エラーコード %d\n", err);
        switch (err)
        {
        case WSASYSNOTREADY:
            printf("ネットワークサブシステムがネットワークへの接続を準備できていない\n");
            break;
        case WSAVERNOTSUPPORTED:
            printf("要求されたwinsockのバージョンがサポートされていない\n");
            break;
        case WSAEINPROGRESS:
            printf("ブロッキング操作の実行中であるか、またはサービスプロバイダがコールバック関数を処理している\n");
/*
960デフォルトの名無しさん:2005/10/07(金) 12:25:54
*/
            break;
        case WSAEPROCLIM:
            printf("winsockが処理できる最大プロセス数に達した\n");
            break;
        case WSAEFAULT:
            printf("第二引数であるlpWSAData は有効なポインタではない\n");
            break;
        default:
            printf("原因不明\n");
        }
    }
    else
    {
        printf("正常に初期化できました\n");
    }
    
    printf("iMaxSockets %d\n", wsaData.iMaxSockets);
    printf("iMaxUdpDg %d\n", wsaData.iMaxUdpDg);    
    printf("lpVendorInfo %x\n", wsaData.lpVendorInfo);    
    printf("szDescription %s\n", wsaData.szDescription);
    printf("szSystemStatus %s\n", wsaData.szSystemStatus);
    printf("wHighVersion %d.%d\n", HIBYTE(wsaData.wHighVersion), LOBYTE(wsaData.wHighVersion) );
    printf("wVersion %d.%d\n", HIBYTE(wsaData.wVersion), LOBYTE(wsaData.wVersion) );
/*
961デフォルトの名無しさん:2005/10/07(金) 12:26:26
*/
    err=WSACleanup();
    if (err == SOCKET_ERROR)
    {
        printf("リソース解放失敗\n");
    }
    else
    {
        printf("リソース解放成功\n");
    }

    return 0;
}
//EOF
962デフォルトの名無しさん:2005/10/07(金) 16:14:20
ちょっとコードが丁寧すぎる印象を受けた
963デフォルトの名無しさん:2005/10/07(金) 16:27:03
皆さんは入門書読み終わったら、次どんな本読みましたか?
964デフォルトの名無しさん:2005/10/07(金) 16:58:57
>>963
いまでも入門書はしょっちゅう手にして確認するけど、
にーちゃんの本棚のCマガジンとかは良く読んだ。

あと、関係ないけど、新スレに書く前にこっち埋めようぜー。
965デフォルトの名無しさん:2005/10/07(金) 17:12:56
>>964
Cマガジンですか?さっそく本屋行って見てきます!
966デフォルトの名無しさん:2005/10/07(金) 17:25:51
>>963
「C言語ポインタ完全制覇」と「定本Cプログラマのためのアルゴリズムとデータ構造」を読んだ。

本もいいけど、勉強におすすめのソースコードとかが知りたい。
967デフォルトの名無しさん:2005/10/07(金) 18:10:13
入門書は読んだことがない。
善いも悪いもCのソースならWebでいくらでも転がってる。
968デフォルトの名無しさん:2005/10/07(金) 18:15:10
ググって出てこないもんは無いけど
通して読むようなのないなぁ、書籍でも

ANSI規格書が昔は無料だったらしいけど
今は1万円以上するしちょっとつらい
K&R買ったけど全部載ってるわけでもなし

MSDNが良さそうだけど目次が全然でてこないorz
969デフォルトの名無しさん:2005/10/07(金) 18:20:26
>>968
JISのPDFはタダで読める。

MSDN(日本語)ではこうたどっていくとC関連の記事がある。
開発ツールと言語→Visual Studio .Net→製品ドキュメント→Visual C++
→Visual C++ リファレンス→Visual C++ ライブラリ→Visual C++ のリファレンス
→Visual C++のライブラリ→ランタイム ライブラリ リファレンス
970その1:2005/10/07(金) 19:18:47
次スレの >>9 unix 版。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv) {
  const char *hostname = "www.google.co.jp";
  const char *path = "/";
  const unsigned short port = 80;
  int sock;
  struct hostent *host;
  struct sockaddr_in server;
  int read_size;
  char buf[1024];
971その2:2005/10/07(金) 19:19:58
  if ((host=gethostbyname(hostname))==NULL)
    return -1;
  bzero(&server, sizeof(server));
  server.sin_family = AF_INET;
  bcopy(host->h_addr, &server.sin_addr, host->h_length);
  server.sin_port = htons(port);
  if ((sock=socket(AF_INET, SOCK_STREAM, 0))==-1)
    return -1;
  if (connect(sock, (struct sockaddr *)&server, sizeof(server))==-1)
    return -1;
  sprintf(buf, "GET %s HTTP/1.0\r\nHost: %s\r\n\r\n", path, hostname);
  write(sock, buf, strlen(buf));
  while ((read_size = read(sock, buf, sizeof(buf)))>0)
    write(1, buf, read_size);
  close(sock);
  return 0;
}
972デフォルトの名無しさん:2005/10/07(金) 20:30:48
>>969
ありがとうございます見つかりました
973デフォルトの名無しさん:2005/10/08(土) 11:33:22
なんか新スレはどんどん進んでいる様だけど、このスレを埋めて行くぜ。

問題。
  自分の環境で使うことが出来るC言語の型 (char, short int, int, long int 等など)
  と、そのサイズを標準出力に吐き出すプログラムを書け.

出力例
  char 1
  short int 2
  int 4
  long int 4

制約
  型のサイズはプログラム内に直接書くのではなく、sizeof 演算子を用いて、
  実行時に取得して表示すること。

挑戦項目
  その型が持つことが出来る最大の数と最小の数も出るようにしておくと便利かも。
  完成したプログラムは、環境変数 PATH が指すディレクトリのどこか一つにいれておくと便利かも。
974デフォルトの名無しさん:2005/10/08(土) 11:39:59
>>973
こういう横やりを入れるのも何だけど、sizeofはコンパイル時に定数式扱いされるから
実行時に取得してるわけじゃないんだけどね
975デフォルトの名無しさん:2005/10/08(土) 11:42:46
973って・・・・・・・・・・・・・・・・・・
976デフォルトの名無しさん:2005/10/08(土) 11:53:30
>>974
まさに横やりだな。
実行形式ファイルは実行するまでは
何の効果も生み出さないのだから、
実行時に取得される、と理解して何の不具合もないだろ。
ホント、ヲタはどうでもいいところにこだわるな。
977デフォルトの名無しさん:2005/10/08(土) 11:58:23
>>973-974だけだったら>>973のミスは微笑ましかったが
>>976で最悪
言ってること滅茶苦茶だし

問題出すにはまだ早い知識ですね =P
978デフォルトの名無しさん:2005/10/08(土) 11:59:55
>>976
おまいさん、RTTI使ったことないだろ。
さすがに初心者にそこまでの注意を払わせるのはどうかと思うが、
実行時にコストを支払うのか、コンパイル時に支払うのかの違いは大切だぞ。
979デフォルトの名無しさん:2005/10/08(土) 12:03:11
>>976は頭に不具合がある人のいい例ですねw
980デフォルトの名無しさん:2005/10/08(土) 12:08:02
>>977-978
話をそらすな。
このスレの主題に照らして
>>974がどれだけ無意味な発言であるか。
君らは技術に溺れ、場に応じた適切なレベルの
コミュニケーションを取れないタイプの間だな。
人にものを教えようなどと思わない方がいいぞ。
あと俺は>>973とは別の通りすがりだ。
981デフォルトの名無しさん:2005/10/08(土) 12:10:14
>あと俺は>>973とは別の通りすがりだ。

そんな事は誰も聞いてない件について。

アイアムザパニーズに近いものを感じるなw
982デフォルトの名無しさん:2005/10/08(土) 12:12:12
>>980
そういう下らない論争をする君が一番場違いだということに気づかないのか?
スレが埋まっていいんだけどさ。
そもそも間違いを指摘してなぜ悪い?
初心者相手なら嘘を教えていいとでも?
適切なフォローはこの場合「今は気にしなくていい」であって
「実行時だと理解していい」ではないだろう。嘘を教えてどうする。
983デフォルトの名無しさん:2005/10/08(土) 12:13:12
>>977-979>>981-982

せっかく>>973が必死こいて言い訳を考えて来てくれたんだから
静かに見守ろうぜおまいらw
984デフォルトの名無しさん:2005/10/08(土) 12:13:28
>>980
場に応じた適切な発言できてないのは、いったい誰なのやら。
985デフォルトの名無しさん:2005/10/08(土) 12:15:19
973みたいな教え方してると、プリプロセッサ命令とかでも誤解が生じそうだよママン
986デフォルトの名無しさん:2005/10/08(土) 12:16:38
973ちゃん落ち着いて!ママよ!
987デフォルトの名無しさん:2005/10/08(土) 12:17:21
988デフォルトの名無しさん:2005/10/08(土) 12:17:51
989デフォルトの名無しさん:2005/10/08(土) 12:21:11
>>981
>>977を読め。俺を>>973だと思っている。
君も場の状況を見ず思いつきで発言するタイプだな。
コミュニケーション能力が足りない人間が多いな。

>>982
実行時に取得しているのと表面的には
変わらないのだから嘘ではない。
初心者のキャパはすごく小さいのだ。
他人のレスに横やりいれてスレの流れを乱すな。
990973:2005/10/08(土) 12:23:03
>>974 さんと、それ以降の方々。
大変勉強になります。

私が >>973 の問題で伝えたかったことは、自分のためにプログラミングするのも
楽しいよな。ってことです。

あと、ある程度C言語をわかってる人は、あんまり難しい問題を出すんじゃなくて、
今日からC言語を学ぼうと思った人でも、「これなら出来るかも」と思えるような
問題を出して行くといいんじゃないかと思います。

あ、すげー伸びてる。
991デフォルトの名無しさん:2005/10/08(土) 12:23:43
これは酷い自演だなwwwwwwwwwwwwww
992デフォルトの名無しさん:2005/10/08(土) 12:23:44
この流れで973みたいな問題だす973もアレだよね
993デフォルトの名無しさん:2005/10/08(土) 12:25:06
なんでも良いけどパート2まで来るなよ。

邪魔だから。
994デフォルトの名無しさん:2005/10/08(土) 12:25:09
>>990
あんた根本的に考え違いしてるよ
自分がプログラミングやり始めた頃のこと思い出してみろよ
995デフォルトの名無しさん:2005/10/08(土) 12:26:06
表面的に同じなら同じだと言い張れるってのがすごいな。
996デフォルトの名無しさん:2005/10/08(土) 12:27:55
#defineがexeが実行した時に置き換えられてると思ってそう
997デフォルトの名無しさん:2005/10/08(土) 12:32:15
これはもう埋めしかないね
998デフォルトの名無しさん:2005/10/08(土) 12:34:03
999デフォルトの名無しさん:2005/10/08(土) 12:36:13
999
1000デフォルトの名無しさん:2005/10/08(土) 12:36:50
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。