C言語なら俺に聞け(入門篇) Part 27at TECH
C言語なら俺に聞け(入門篇) Part 27 - 暇つぶし2ch655:デフォルトの名無しさん
08/05/12 13:19:00
>>629で終わった話をいつまでグダグダやってるんだ

656:デフォルトの名無しさん
08/05/12 13:22:59
TEST.Cをコマンドプロンプトで指名してコンパイルする時、拡張子が.Cだとコンパイルできなくて.cだとコンパイルできたんだけど、.Cと.cって違うの?

657:デフォルトの名無しさん
08/05/12 13:26:35
>>656
少なくともそのコンパイラにとっては違うからコンパイルできなかったのだろう。

658:デフォルトの名無しさん
08/05/12 15:05:58
ファイル名の指定を間違ってたんじゃないの
ファイル名の大文字小文字を区別する環境としない環境があるから、それも書いてくれ

659:デフォルトの名無しさん
08/05/12 15:16:09
Sun辺りは.CはC++の拡張子だった希ガス。

660:デフォルトの名無しさん
08/05/12 15:24:22
上の
static const char * const youbi[]
って何でconst2つも付けるのかが分からないんですが
static const char * youbi[] じゃあダメなんですか?

あと、普通の変数でも
static const int const とかやる必要はあるんですか?

661:デフォルトの名無しさん
08/05/12 15:30:52
static const char *youbi[]
youbiの先の文字列が書き換え不可能

static char * const youbi[]
youbiが書き換え不可能

static const char * const youbi[]
両方

662:デフォルトの名無しさん
08/05/12 15:36:31
static const char *youbi[]
 は "火曜日" って文字列を "火曜"

663:デフォルトの名無しさん
08/05/12 15:38:16
途中で書いてしまった

static const char *youbi[]
 は "火曜日" って文字列を "火曜" に変えたりするのが不可能で
static char * const youbi[]
 は youbi[1] に別の文字列のポインタを渡すのが不可能になる

って事なんですか?

664:デフォルトの名無しさん
08/05/12 15:54:23
const char *youbi[] は
const char 型のポインタ(文字列定数)を入れる youbi配列で、新たに文字列定数のポインタを入れることは出来て、
char * const youbi[] は
youbiの中のポインタ変数固定だから、文字列そのものは書き変えられてもポインタの指す先は変えられないって事なんですね

やっと理解出来ました
ありがとうございます

665:デフォルトの名無しさん
08/05/12 16:40:42
#include<stdio.h>
double f(double x)
{
double y;
y=(((3.1*x-1.8)*x+5.7)*x+1.0)*x-6.2;
return (y);
}
main()
{
double x,y;
int i;
for(i=-20;i<=20;i++){
x=0.5*i;
y=f(x);
printf("x=%7.3f y=%12.3f\n",x,y);
}
}
このプログラムのyの値の総和を計算するプログラムを作れ。
これをだれかお願いします。


666:デフォルトの名無しさん
08/05/12 16:42:08
>>665
わかりましたちょっとまっててください

667:デフォルトの名無しさん
08/05/12 16:46:32
>>657  なるほど~ コンパイラの仕様か~
>>658  指定の仕方は大丈夫なはず コンパイラはMinGW これでいいのかな?
>>659  Sunってコンパイラ名・・? コンパイラによって違うってこと?

668:デフォルトの名無しさん
08/05/12 16:55:13
宿題丸投げは宿題スレへ

669:デフォルトの名無しさん
08/05/12 17:15:43
>>667
>>659  Sunってコンパイラ名・・? コンパイラによって違うってこと?
Javaを開発し、OpenOfficeを提供している世界最大級のコンピュータソフト・ハード兼業企業。
古くから、SunOSというUnix系のOSを作っている。

670:デフォルトの名無しさん
08/05/12 17:55:41
あ~ なるほど OSによって違うってことか~
勉強になりました

671:デフォルトの名無しさん
08/05/12 19:47:16
配列に配列を足すことってできないの?
a += b; みたいな

672:デフォルトの名無しさん
08/05/12 19:58:27
Linux上では問題なく動作したのですが、
windows(BCC Developer)だと、ファイルをオープンする事ができなくなりました
ファイルパスを絶対パスにしたりと、試行錯誤しましたが解決しません
どうか、解決法をお願いします

ソース
void read_area(struct prefecture *are)
{
   int i;
   FILE  *fpa;  
   if(( fpa = fopen("menseki.txt" , "rw")) == NULL)  
   {
      printf("ファイルが見つかりませんでした\n");
      exit(1);                                      
   }
   for(i=0;i<47;i++)
   {
     fscanf(fpa,"%s %d",are->name,&are->area);
     are++;
   }
}

txtファイルは、Debugフォルダとその上のファルダに置いています

673:デフォルトの名無しさん
08/05/12 20:00:38
>>672
ソースファイルと同じ場所に置けばいけるはずだけど

674:デフォルトの名無しさん
08/05/12 20:01:55
exeと同じ場所

675:デフォルトの名無しさん
08/05/12 20:05:20
>>673
日本語読めますか?

>>672
それが原因かどうかは判らんが、"rw"は間違い。
実装によってはファイルが空になってもおかしくない。

>>671
できません。配列の要素ごとの足し算ならループから書くことになります。
配列の連結と言うことなら、malloc(), realloc()を使うことになるのでその辺りを先ず勉強する必要あり。

676:デフォルトの名無しさん
08/05/12 20:06:59
>>671
それだけの日本語ではさっぱりですよ。
たぶんこういうこと?
for ( int i = 0; i < SIZE; i++ ) {
a[ i ] += b[ i ];
}

677:デフォルトの名無しさん
08/05/12 20:07:58
>>673-674
ファイルの置き場所に問題があるのかと思い、ソースがある場所を含め、
プログラムに関係ありそうなフォルダ全てに置いたのですが、解決しませんでした…

これは、BCCの環境設定?を変更・追加する必要があるのでしょうか?

>>675
Linuxで動いたのは運が良かったからかもしれません…
指摘していただいた点について、もう一度解決法を探してみます


678:677
08/05/12 20:16:39
"rw"を"r"にした所、正常に動作しました!
よく考えてみれば、書き込みする必要がないので、"w"は不要ですね…

>>673-675
つまらない質問にも関わらず、素早い対応して頂き、
本当にありがとうございます

679:デフォルトの名無しさん
08/05/12 20:27:05
>>676
そうだけど

構造体のときは不便だなって思った

680:デフォルトの名無しさん
08/05/12 20:28:31
そう思ったんならC++へ旅立ってしまえ

681:デフォルトの名無しさん
08/05/12 20:54:06
>>679
そんなのラッパー関数かいときゃ次からは楽じゃないか。

682:デフォルトの名無しさん
08/05/12 21:25:44
>>641
なれるよ
数学なんて実に簡単なことだ

683:デフォルトの名無しさん
08/05/12 22:34:04
C言語勉強したいのですがフリーソフトはないんでしょうか?

684:デフォルトの名無しさん
08/05/12 22:34:47
>>683
ぐぐれ

685:デフォルトの名無しさん
08/05/12 22:39:47
>>683
マイクロソフトが無料で配布してるよ

686:デフォルトの名無しさん
08/05/12 22:52:43
URLリンク(www.microsoft.com)
これですか?どれをダウンロードすればいいんでしょうか

687:デフォルトの名無しさん
08/05/12 22:53:37
>>686
visualC++だ
そしてとっととうせろ

688:デフォルトの名無しさん
08/05/12 22:54:42
>>686
登録とかめんどくさいからBCC使うといいよ
俺はvisual C++使ってるけど

689:デフォルトの名無しさん
08/05/12 23:01:50
BCC もメルアド登録必要じゃね?

690:デフォルトの名無しさん
08/05/12 23:02:36
デバッガは登録必要だったような気がするけど
コンパイラは要らなかったような…

691:デフォルトの名無しさん
08/05/12 23:03:17
>>689
いらない

692:デフォルトの名無しさん
08/05/12 23:06:20
あれ? メルアド変わるまでスパムのように来てたんだが。

693:デフォルトの名無しさん
08/05/12 23:12:22
VC++も登録いらんだろ
isoを落とせば

694:デフォルトの名無しさん
08/05/12 23:13:13
それめんどい

695:デフォルトの名無しさん
08/05/13 08:04:28
C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど
単純にC言語のプログラムを作りたい時はどうしたらいいんですか?

696:デフォルトの名無しさん
08/05/13 08:08:04
>>695
お使いのソフトウェアのスレへどうぞ。

697:デフォルトの名無しさん
08/05/13 08:14:19
>>695
誤 C++のプログラム作ろうと思ったらVBの作成画面みたいなんですけど
正 VisualC++でC++プログラム作ろうと思ったらVBの作成画面みたいなんですけど

Win32コンソールアプリケーションを選べ

698:デフォルトの名無しさん
08/05/13 08:19:27
>>697
それだとスレ違い。ここはCスレ。

699:デフォルトの名無しさん
08/05/13 13:56:55
実行時に与えられる条件により異なる値で初期化して、
以後はconstに扱われるような変数を宣言することはできますか?

700:699
08/05/13 13:59:49
追記 環境変数のような働きをするグローバル変数です

701:デフォルトの名無しさん
08/05/13 14:34:04
>>699
実装によっては可能かもしれないが、直接に行うことは一般的にはできない。
constな変数はそれが作成されたときに(関数の外で宣言される変数ならプログラムの開始時、あらゆる関数の外で)初期化されて
以後のコード中では変更できなくなるため、実質的にコンパイル時に解決可能な式でしか初期化できない。

ポインタを間にはさめば、以下のような方法で似たようなものを間接的に宣言することができる。

value.c)
 static int value;
 const int * const vp=&value;

value.h)
 extern const int * const vp;
 #define VALUE (*vp)

このようにしておけば、グローバル変数(のふりをしているマクロ)VALUEの実体であるvalueは、少なくともvalue.c以外で変更されることはない。

702:デフォルトの名無しさん
08/05/13 15:17:07
あとは、取得用の関数を公開する形にして
当該の変数をstaticにしてほかのファイルからは見えないようにするとか、
const変数を動的初期化できるC++へ移ってしまうとかが考え付く。

703:デフォルトの名無しさん
08/05/13 15:32:16
int GetValue()
{
  static int value=-1;

  if(value < 0){ /* 最初に呼び出されたときに初期化される */
    :
    :
  }

  return value;
}

#define VALUE GetValue()

な手か

704:デフォルトの名無しさん
08/05/13 16:14:38
失礼します。

void hoge(double** matrix)
{}

等として受け取ったdouble**の配列の要素数をその関数内で知るすべがあったらご教授願います。

705:デフォルトの名無しさん
08/05/13 16:24:57
ありません

706:デフォルトの名無しさん
08/05/13 16:33:22
配列matrixの終端要素になにか特別な値が格納されていれば
それを検出することで長さを知ることができる
そうでなければ無理

707:デフォルトの名無しさん
08/05/13 17:00:51
char name[100];


name="hoge.txt";

みたいに代入したいんですが、エラーになります。
*name="hoge.txt";
でもできません。どうやるんでしたっけ?

708:デフォルトの名無しさん
08/05/13 17:04:40
何で駄目なのかはわかる?

strcpy(name, "hoge.txt") とか?
strncpy(name, sizeof(name) - 1, "hoge.txt")か

709:デフォルトの名無しさん
08/05/13 17:07:16
>>708
すいません。わからないので教えていただけるとありがたいです

710:デフォルトの名無しさん
08/05/13 17:24:03
>>709
Cでは配列は二級オブジェクト(メモリ上に存在するが演算の対象にならない)で、
配列名は大抵の場合配列そのものではなく配列の先頭要素のアドレスを意味する。
アドレスに代入することはできないので、name="hoge.txt"; のような文は無効になる。
配列名に対して直接=演算子が使えるのは、宣言時に初期化するときだけである。

配列に対して任意の配列をコピーするにはmemcpyやmemmove、
あるいは配列が'\0'で終わるcharの配列(文字列)である場合にはstr~系の関数を使う。

711:デフォルトの名無しさん
08/05/13 17:43:39
1)
strcpy(name, "hoge.txt");

2)
strncpy(name, sizeof(name)-1, "hoge.txt");
name[sizeof(name)-1]='\0';

3)
name[0]='\0';
strncat(name, sizeof(name)-1, "hoge.txt");

1)はもっとも単純明快だが、もしnameに割り当てられている領域が
コピーしようとしている文字列より小さかったらたぶん問題がおきる
そのような場合に文字列を切り詰めて安全を保証したいなら2)または3)を使う

712:デフォルトの名無しさん
08/05/13 17:51:33
わかりました!どもうありがとうございました

713:デフォルトの名無しさん
08/05/13 18:00:36
>>711
横見だが 2 および 3 の引数の並びちがうぢゃろ。
strncpy(name, "hoge.txt", sizeof(name) - 1);
name[sizeof(name) - 1] = 0;

714:デフォルトの名無しさん
08/05/13 22:24:12
文字列リテラルをコピーするのにstrn*()を使うのか……

715:デフォルトの名無しさん
08/05/13 22:24:59
当然だろ

716:デフォルトの名無しさん
08/05/13 22:26:55
sprintfでおk

717:デフォルトの名無しさん
08/05/13 23:18:04
だからオーバーフローが・・・

718:デフォルトの名無しさん
08/05/13 23:20:16
オーバーランじゃねーの?
それともオーバーフローでもおkなの?

719:デフォルトの名無しさん
08/05/13 23:21:04
おk

720:デフォルトの名無しさん
08/05/13 23:22:55
URLリンク(ja.wikipedia.org)
ラン姉ちゃんの方でした、すまそ

721:デフォルトの名無しさん
08/05/13 23:25:09
>>717
桁数勘定して sprintf(b, "%100s", s); って, 書けば OK なんじゃないの?


722:デフォルトの名無しさん
08/05/13 23:32:56
>>720
バーロー

723:デフォルトの名無しさん
08/05/13 23:55:15
自分の言語/文法理解が間違ってるのかも、と思って駆け込んできた
---
#include<stdio.h>

int ary_[]={1,2,4,8};

int main(int argc,char** argv){
int* ary=ary_;
int i=(*ary++) ^ (*ary++);
printf("%d\n",i);
return 0;
}
---
これの実行結果がゼロになるのはなんでだぜ?
VC9EE v15.00.21022.08 最適化無指定、/O1 で発現 VC9SP1βはまだ試してない

724:デフォルトの名無しさん
08/05/13 23:57:31
>>723
未定義動作だからどうなっても文句は言えない

むしろどうなると思ったんだよ・・・

725:デフォルトの名無しさん
08/05/13 23:59:10
副作用完了点

726:デフォルトの名無しさん
08/05/14 00:01:58
>>721
いや、そういう意味じゃなくて・・・それらの問題点は
プログラムそのものがトラブルを起こしてしまう仕組みを持っていることであって
問題の無い範囲内でユーザが使う分にはなんら不具合には気づかない、起こらないわけで・・・

727:デフォルトの名無しさん
08/05/14 00:06:18
>>724
え。一発目の*ary++が1に、二発目の**ary++が2に、…
…いや、最適化で順序がどうなっても、i==3にはなると思ったんだ
/Fa によると、どちらも*aryになり、そのあとで2回ary++が発生してた

どこで未定義なんだろう…。

// ここでリロード

>>725
ヒントありがとう ぐぐったら一発 必ずしも都度都度副作用が発生するわけじゃないのか
アマだが、聞かねば一生のバグ撒き散らしになるところだったよ 恥晒してよかった

728:デフォルトの名無しさん
08/05/14 00:21:13
ary = ary++;

729:デフォルトの名無しさん
08/05/14 00:22:15
>>728
いやそれを書き込む意味が和漢ね

730:723
08/05/14 00:28:52
>>729
これを考えてみろ。ってことだろう

実際にVC9EEにつっこんで結果を見てみた
ary = ary;
ary++;
になった 俺には示唆に富んでると思う

731:デフォルトの名無しさん
08/05/14 00:29:43
>>723
未定義だけど、1^1で0になってる気がする

732:デフォルトの名無しさん
08/05/14 00:38:23
URLリンク(www.st.rim.or.jp)
調べたら色々書いてあった

733:デフォルトの名無しさん
08/05/14 01:24:07
直前の副作用完了点と次の副作用完了点までの間に、
式の評価によってオブジェクトに格納された値を変更する回数は
高々一度だけでなければならない。更に、変更前の値は、
格納される値を決定するためだけにアクセスしなければならない。

734:デフォルトの名無しさん
08/05/14 01:25:37
スレリンク(tech板:157番)

735:デフォルトの名無しさん
08/05/14 06:32:45
初心者なんですが、お願いします
文字列を式として扱って計算結果を出力する
というような便利な関数ってあるのでしょうか?




736:デフォルトの名無しさん
08/05/14 07:26:22
標準ではありません。頑張って作ってください。

まぁ、unix系ならシェルで計算すれば済むけどね。

737:デフォルトの名無しさん
08/05/14 07:30:10
Java、JavaScriptだと eval というものがあるんだが、自分で実装するっきゃないね。

738:デフォルトの名無しさん
08/05/14 09:05:47
簡単な計算させる程度なら、bison/flexあたりでどうにか。

変数が入るようなやつなら、いろいろあるけど、いっぺんPerlとか使うといいと思うよ
Perlで書く。のではなくて、perl*.dllをつつくように書く あれはインタフェースがCだから。
セキュリティの確保とか結局いろいろ大変になるだろうけど、示唆に富んでていいと思う

739:デフォルトの名無しさん
08/05/14 10:10:26
>>735
URLリンク(www.google.com)

LGPLだけど、Google Code Searchで検索すると60行程度で実装している例がある。


740:デフォルトの名無しさん
08/05/14 13:49:08
学校の課題で
「関数の中で宣言した値は、関数の実行が終わった後どうなるのか?たとえば二度目に関数を呼んだとき値を読んでみたら
どうなるのか?」
って問題が出たんだけど答えどころか質問の意味すらわかりません。よかったら教えてください。

741:デフォルトの名無しさん
08/05/14 13:53:49
ローカル(自動)変数とか、静的(スタティック)変数とかを教える意図の質問じゃないのかな?

742:デフォルトの名無しさん
08/05/14 13:54:37
>>740
void hoge(void)
{
   int a;   ← ②
   a = 2;
   a = a * 2;
} ←①


void main (void)
{
   hoge();
   hoge();
}

①関数終わったらaはどうなる?
②2回目のhoge呼び出しの時、このaに4が入っていると思うか?

743:デフォルトの名無しさん
08/05/14 13:56:53
ローカル変数には初期値入れることになるんだし
なんだかなぁって思う問題

744:デフォルトの名無しさん
08/05/14 14:32:20
>>741-743
こんな早く答え返ってくるとは思ってませんでした。
有難う、みんな優しいですね。
>>742
①無くなる?
②…4じゃないんですか?


745:デフォルトの名無しさん
08/05/14 14:35:20
aに何も入れない状態で出力させるのさ。
できれば、hoge()を呼び出す階層を変えて試すのもやってみて
(別の関数を呼び出しその中からhoge()を呼ぶ)

746:デフォルトの名無しさん
08/05/14 14:48:58
成程!試してみますね。
ご丁寧に有難うございました。


747:デフォルトの名無しさん
08/05/14 15:16:09
試してみる、はよくない
たまたま4が入ってたらどうするんだ

748:デフォルトの名無しさん
08/05/14 15:25:10
高確率で入ってるだろ。
だから深さも変えるといいかな、と。
アドレス表示させる手もあるが。
最適化されてると混乱しそう。

749:デフォルトの名無しさん
08/05/14 15:41:12
ちゃんとCの仕様を示して理解させるのが正しい姿勢
とりあえず試してうまくいったから、なんてのを放置すると
そのうち必ずなにかやらかす

750:デフォルトの名無しさん
08/05/14 15:42:09
>>744
①無くなる
②何が入っているかわからない

751:デフォルトの名無しさん
08/05/14 15:50:04
>>740
関数の中でstaticをつけずに宣言した変数は、その関数の呼び出し中にのみ存在する変数(auto変数)となる。
宣言した関数から抜けた時点で、変数のために使われていた記憶領域は解放されて意味のないものになる。

このような変数は、明示的に int a=2; などのように初期化しないかぎり、
その宣言時における値は常に不定(何が入っているかわからない)である。
このような変数の中身を、明示的に値を与える前に使ってはいけない。

752:デフォルトの名無しさん
08/05/14 15:50:57
学校の課題なんだから、そんなのは教わるんだろう。
今知りたいのはこの質問の意図するところだべ。

753:デフォルトの名無しさん
08/05/14 15:55:28
仕様を理解してりゃ意図はわかるだろ
意図がわかんないってのは理解してないからだ

754:デフォルトの名無しさん
08/05/14 16:00:37
>>740
なお、staticをつけて宣言した変数は、プログラムが実行を開始してから終了するまで存在し、
その開始時に一度だけ、明示的な初期化式があればその値に、なければ「=0;」とか「={0};」と
書いたかのように初期化される。


755:740
08/05/14 23:45:33
>>753
その通りです。
まだ講義で習ってない範囲(質問する前は習ってない範囲
かすらもわかりませんでした)で何も知りませんでした。
今回皆さんに教えて頂いたお陰でまだ何となくですが、
わかるようになりました。
あとは講義で理解していこうと思います。

補足してくださった方々もわかりやすい説明有難うございました!
ここ勉強になりますね。

756:デフォルトの名無しさん
08/05/15 01:50:36
>>735
宿題スレで頻繁に見られる課題です。実装したくなったときに参考にしてください。
基本形
URLリンク(kansai2channeler.hp.infoseek.co.jp)
逆ポーランド電卓で(基本形の応用)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
他にもいろいろ回答されていましたが、私の手元ににはありません。

757:デフォルトの名無しさん
08/05/15 02:16:27
>755
忠告だが
その講義の教官の言うことは眉唾して聞いたほうがいい

教えてないことを聞くとかありえねー

758:デフォルトの名無しさん
08/05/15 02:56:17
課題自体はすげー授業のそのまんま復習くせーし
話聞いてなかったんだろどうせ

759:デフォルトの名無しさん
08/05/15 02:56:17
>>757
両方の言い分を聞かないと分からないぞ
ここで教官の言い分を聞く事はまずないだろうけど

760:デフォルトの名無しさん
08/05/15 02:57:06
>>757
前半と後半が支離滅裂なんだがw

761:デフォルトの名無しさん
08/05/15 02:58:18
>>760
日本語は難しいです

762:デフォルトの名無しさん
08/05/15 03:03:26
>>760
日本語読めない人?

763:デフォルトの名無しさん
08/05/15 03:06:17
課題なら別に教えてないことが出てきてもいいと思うけどな
小学校じゃあるまいし

764:デフォルトの名無しさん
08/05/15 03:08:53
横槍だが 眉唾する という使い方がないんです、辞書を引いても分かるように。

765:デフォルトの名無しさん
08/05/15 03:11:29
>>764
「眉に唾する」ならいいのかな?

766:デフォルトの名無しさん
08/05/15 03:13:52
URLリンク(www.geocities.jp)

767:デフォルトの名無しさん
08/05/15 03:27:57
下記の場合volatileがあるためValueを外部から書き換えるまでループを続けると思うのですが、

volatile ULONG Value; // レジスタ(外部から書き換えられる)

void main(void)
{
  Value = 0;
  while(Value == 0){ ←これ
    ;
  }
}

これを下記のようにポインタを経由すると最適化対象になってしまうのでしょうか?
(このポインタもvolatileをつける必要がある?)

volatile ULONG Value; // レジスタ(外部から書き換えられる)

void main(void)
{
  Value = 0;
  ULONG* pV = &Value;

  while(*pV == 0){ ←これ
    ;
  }
}

768:デフォルトの名無しさん
08/05/15 03:29:31
>>767
volatile 修飾する必要があります

769:デフォルトの名無しさん
08/05/15 10:13:29
>>767
volatileをつけなければ最適化対象になります。
が、最適化対象になるとValueを外部から書き換えるまでループを続けるという動作を必ずしなくなるわけではありません。
つまり、volatileをつけなくてもあなたの希望する動作をする可能性はあります。
つまり、volatileをつける必要があるとは言い切れません。

770:「言い切れない」は詭弁だ
08/05/15 12:16:11
>つまり、volatileをつけなくてもあなたの希望する動作をする可能性はあります。
それは普通、つける必要があると言いますね。

771:デフォルトの名無しさん
08/05/15 12:22:57
↓必要条件とか十分条件とか言い出すヤツ

772:デフォルトの名無しさん
08/05/15 13:40:39
|↑
++

ビルド毎に出力を確認すればおk てか、Cの話でなくなるが、テストで引っ掛けろ

773:デフォルトの名無しさん
08/05/15 22:38:30
プログラム知識0の俺がCを勉強しようと思うんだが
解説サイトと本どっちがいいの?
色々な掲示板みてたら両方とも良いって書いてたからわからなかった。

774:デフォルトの名無しさん
08/05/15 22:39:35
じゃあ、とりあえずお金のかからない方法でやってみて
それで不満に感じたら本を買えば良いんじゃないかな

775:デフォルトの名無しさん
08/05/15 22:49:12
レスありがとう
その方法が一番いいかな~
とりあえずググってサイトさがしてみる。
サイトって「C言語 入門」でググって上らへんのなら大丈夫だよね?

776:デフォルトの名無しさん
08/05/15 23:32:03
本はだめな本があるから、本の紹介サイトを見たほうがいいぞ。


777:デフォルトの名無しさん
08/05/15 23:39:22
そうなんだ
まだ買わなくてよかった~
ありがとう
それみて本選ぶよ

778:デフォルトの名無しさん
08/05/16 05:49:52
本もそうだがサイトは特に多くのところを回った方がいい。
嘘を書いている、情報が古すぎる、環境依存なコード、誉められないコーディングスタイルetc...
あと、サイトにすることで有利な点は、疑問点があればここにアドレス張り付ければ一応質問できることかな?
書籍だと同じ本持ってる人間以外には内容をいちいち書いてもらわないと質問できないから。

779:デフォルトの名無しさん
08/05/16 09:21:08
何を学ぶか?で選ぶ資料も違ってくる。
ソートに関しては、すでにどの手法が高速か分かりきっているが
教本によって記述が違っているものも。中には、あれ?って思うものも。

780:デフォルトの名無しさん
08/05/16 09:31:06
宿題スレでHit and Blowのソースコードを書いてもらったものですが、
頭が悪いせいか理解しようとしても意味がよくわかりません。
誰か詳しい解説をお願いします。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

781:デフォルトの名無しさん
08/05/16 09:32:00
っつか、コードが悪い

782:デフォルトの名無しさん
08/05/16 10:38:15
宿題スレはとりあえず提出できればいいやーって人向けで、
自分で理解するには向いてないと思う

つか>>780のソースは宿題スレではかなり親切な方だと思うけどな
一応コメントついてるし

783:デフォルトの名無しさん
08/05/16 11:46:34
数当てだからといって、4桁の整数にこだわらずに
数字の文字4個の配列を使ってる。そこだろう

数字 + '0' <-> 数字の文字

理解するところまで宿題なんなら、ヒントだと思って考えてみるよろし

784:デフォルトの名無しさん
08/05/16 13:24:00
>>780
何がわからないのか具体的に説明してくれないと解説のしようもない。

785:デフォルトの名無しさん
08/05/16 14:41:36
すみません。いきなりですが、本当に初心者なので分かりません。C言語では基本的に全て数値としてデータを格納すると聞きました。
ただ逆に数値(1~9)を””で囲んで文字列とする場合、内部データは本来の数字にNullが付いた物でなく、ASCⅡコードで
あれば文字の1なら10進数の49(16進数の10X3)に変換されるという認識でよいのでしょうか?
又、普通の文字ならは該当する10進数・16進数に変更はなくNuLLが付くだけなのでしょうか?数値ま場合だけデータそのものが
例えば1なら実質先程言った49に変換されるという認識でよろしいのでしょうか?どうかご教授願います。

786:デフォルトの名無しさん
08/05/16 14:44:37
16進ダンプとかって最近は見る機会無いのかな

787:デフォルトの名無しさん
08/05/16 14:48:13
>>786
Windowsでは見る機会がないでしょうねぇ~~~禿藁
だからLinuxを使えとあれほどry

788:デフォルトの名無しさん
08/05/16 15:08:13
>>785
C言語では(エスケープシーケンスを除き) ど ん な 文 字 も そのマシン上での文字集合に対応するデジタルな値として扱われる。
ASCII文字集合を使用しているすべてのマシンで、"1"は0x31 0x00で、" "は0x20 0x00である。
数字であろうと何であろうと扱いに差はない。

789:デフォルトの名無しさん
08/05/16 15:09:34
linuxだと強制的に見なきゃいけない機会でもあんの?

790:デフォルトの名無しさん
08/05/16 15:11:01
ありがとうございました。Cはそなのですね。

791:デフォルトの名無しさん
08/05/16 15:11:26
ntsd使うなり、IDEの16進メモリ表示モード使うなり
さすがにgdbに張り合ううつもりはないが、ntsdは結構遊べる

792:デフォルトの名無しさん
08/05/16 15:12:46
なお、Cの話をする際において安易にNULLという単語を使うべきではない。
CにおいてNULLと書いた場合通常はヌルポインタ定数を表すマクロNULLのことをさす。
ASCIIのNULのことを言う場合にはNULまたはヌル文字と表記するべきである。

ついでに、ASCIIは A.S.C.I.I.(American Standard Code for Information Interchange) であってASCⅡではない。

793:デフォルトの名無しさん
08/05/16 15:14:25
>>789
mpeg とかかまってると, Windows でも強制的に見なきゃいけない機会は結構あるが…


794:デフォルトの名無しさん
08/05/16 15:14:32
>>792
お前が出直して来い

795:デフォルトの名無しさん
08/05/16 15:35:15
俺がNULって書いたらナルだろーが!
とおっしゃりたいのですか?

どっちでもいいじゃん

796:デフォルトの名無しさん
08/05/16 15:42:56
呼び方なんてどうでもいいよ
区別がついてないのはお前の方じゃねーかって話

797:デフォルトの名無しさん
08/05/16 15:44:35
何を指摘したいのかを明確に挙げずに文句つけても話が混乱するだけだぞ
煽りたいだけならよそでやれ

798:デフォルトの名無しさん
08/05/16 15:46:11
>ASCIIのNUL
……

799:デフォルトの名無しさん
08/05/16 15:46:33
なんかまた変な奴が沸いたな。
相手すんなよ、つけあがるから

800:デフォルトの名無しさん
08/05/16 15:47:50
Windows使ってるとNULLとNULの違いすら分からないようだな。
駄目だこりゃ。

801:デフォルトの名無しさん
08/05/16 15:49:15
なんだ
またいつものアレか

802:デフォルトの名無しさん
08/05/16 15:54:28
>>800
違いですかwww

803:デフォルトの名無しさん
08/05/16 16:06:33
ニート・ヒキは金どうしてる?
スレリンク(news4vip板)


1 以下、名無しにかわりましてVIPがお送りします。 [] 2008/05/16(金) 15:33:11.35 ID:2pPh1TlA0

自分でソフト作って株の売買自動でやらせてる

種が50万しかなかったし初めて2月目だから
一日三万がいいとこだし金おろせないけど
まあ親元だし食ってくのには困らんので満足してる


しかし欝だ・・・やることなくて寝てばっかり・・

804:雷
08/05/16 16:28:57
microsoft visuar studioで
*印を出力するプログラムを作成してください
整数型の変数nに7~15の値を設定する
変数nの値により,以下のような表示を行う(n=7の場合)

for文(またはwhile文)とif文の組合せである
カウンタ変数が偶数か奇数かで判断

printf文は
printf(“n=%d\n”,n); // nの値を出力
printf(“ “); // 空白を出力
printf(“*”); // *印を出力
printf(“\n”); // 改行する
だけを使用する




n=7
* * * *
 * * *
* * * *
 * * *
* * * *
 * * *
* * * *

上の条件でこういう風に表示するプログラムを書いてください



805:デフォルトの名無しさん
08/05/16 16:37:31
宿題なら宿題スレへ

806:デフォルトの名無しさん
08/05/16 16:38:00
>>804
>>1

807:780
08/05/16 18:32:38
>>782
>>783
>>784
ありがとうございました。

808:デフォルトの名無しさん
08/05/17 10:33:01
float型やdouble型の内部構造がいまいちよく理解できないんだが、どっかわかりやすいとこない?
最上位ビットが符号で使われるのはわかるんだけど、それ以外がよくわからない。
小数点以下の数値をどうやって保持してるの?

809:デフォルトの名無しさん
08/05/17 10:42:45
>>808
URLリンク(ja.wikipedia.org)
実装がこれに準拠しているかどうかは別問題

810:デフォルトの名無しさん
08/05/17 11:12:45
>>809
ありがとう。指数表記を使ってるのがわかって疑問が解けました。

811:デフォルトの名無しさん
08/05/17 11:40:19
typedef struct{
double x, y;
}vector_t;

typedef struct{
vector_t vector;
double length;
}edge_t;


edge_t *edge_alloc(char *filename, int *edge_num)
{
int i, point_num;
vector_t *point;
edge_t *edge_area, *edge;
FILE *fp;

    途中略

edge_area=malloc(sizeof(*edge)*(point_num+1));
edge=&edge_area[1];

edge[-1]=edge[point_num-1];

*edge_num=point_num;
return edge;
}

このソースなんですが、edge[-1]とかいう場所に代入していいんですか?

812:デフォルトの名無しさん
08/05/17 12:17:49
edge[-1] == (&edge_area[1])[-1]

813:デフォルトの名無しさん
08/05/17 12:32:03
えっと~


814:デフォルトの名無しさん
08/05/17 12:36:28
edge[-1] == edge_area[0]

815:デフォルトの名無しさん
08/05/17 13:01:27
edge[n]と書くと、配列edgeのn番目、みたいに読める。
しかし、配列の中(最初かもしれないし、最後かもしれないし、途中かもしれない)を
指し示すポインタedgeの、そっからn番目、とも読める。

もちろん、edge[-1]の存在は、ちゃんと担保されてないといけないけど、
文法的にというか、読み方的には、そういう意味

てことで、>>814

816:デフォルトの名無しさん
08/05/17 13:07:28
edge[-1] == *(egde - 1)
なので文法的に問題は無い

大丈夫かどうかは指してる先がちゃんとあるのかの問題になる

817:デフォルトの名無しさん
08/05/17 13:10:36
値を代入してるわけではないんですか?

818:デフォルトの名無しさん
08/05/17 13:14:13
代入してる場所は代入しても問題ない場所。
上の数レス読んで理解できないならあきらめろ。

819:デフォルトの名無しさん
08/05/17 13:14:29
ああそうだ もしかしてと思ってエスパーしてみるが、

edge=&edge_area[1];

の部分で、配列のコピーが発生したりは、してないからね

強いて言うなら、位置情報を代入している。それも、「一個先の位置」ね。

820:デフォルトの名無しさん
08/05/17 13:18:52
4,5,6進数の九九を作ってください。

4進数なら
1 2 3
1 1 2 3
2 2 10 12
3 3 12 21
こんな感じです。お願いします。

821:デフォルトの名無しさん
08/05/17 13:19:31
>>820
宿題スレへどうぞ

822:デフォルトの名無しさん
08/05/17 13:20:36
4,5,6進数の九九を作ってください。

4進数なら
1 2 3
1 1 2 3
2 2 10 12
3 3 12 21
こんな感じです。お願いします。

823:デフォルトの名無しさん
08/05/17 13:22:05
なんか九九表がうまくできないですけど

824:デフォルトの名無しさん
08/05/17 13:22:10
  1 2 3
1 1  2 3
2 2 10 12
3 3 12 21
こうしたいんだろ?
それはともかくとっとと消えろよ

825:デフォルトの名無しさん
08/05/17 13:22:36
今日から、パッケージソフトを作るための勉強をします。
何の言語を勉強すれば、よろしいでしょうか?
個人的には、C++がいいかと。
求人案件などを見ると、求人が多いから。

(ちなみに、どんなソフトを作ろうとしているかというと。
動画編集ソフトを作ろうとしています。)

826:デフォルトの名無しさん
08/05/17 13:23:43
>>825
スレタイを百回音読して涙を流しながら去れ

827:デフォルトの名無しさん
08/05/17 13:25:41
>>826
さーせn

828:デフォルトの名無しさん
08/05/17 15:46:46
Borland BCC32(フリー版)を使ってますが、リアルタイムキー入力を使いたいのですが
その関数名を教えて下さい (BasicのINKEY$見たいな物)

829:デフォルトの名無しさん
08/05/17 16:29:04
>>828
GetAsyncKeyState


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch