1 名前:デフォルトの名無しさん [2007/02/22(木) 08:16:03 ] このスレッドはC言語について、 他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 C使いが優しくコメントを返しますが、 お礼はC言語の布教と初心者の救済をお願いします。 くだすれC言語(初心者用) pc10.2ch.net/test/read.cgi/tech/1153542424/
2 名前:デフォルトの名無しさん [2007/02/22(木) 08:37:42 ] 2get
3 名前:デフォルトの名無しさん [2007/02/22(木) 10:10:06 ] 裏切派遣って知ってる? 元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて派遣やってるバカのことw 前の会社を裏切り、結局派遣先からも騙されてる。 そもそも信頼されてるなら直接契約するか正社員にするはずだが、派遣会社経由って舐められ杉 自分でも騙され裏切れられてることは薄々わかってるから派遣問題の話が出るとウッキー!って逆ギレw
4 名前:デフォルトの名無しさん [2007/02/22(木) 17:06:10 ] 保守
5 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 22:28:47 ] printfってなんですか?
6 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:54:40 ] 関数の名前です
7 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 00:57:26 ] 半分は優しさでできています。
8 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 02:21:25 ] D.リッチーのやさしさが詰まってます。
9 名前:デフォルトの名無しさん [2007/02/24(土) 11:52:39 ] doubleが数値であるかないか、つまりNaNやinfではないかどうかはどのように判定すればよいのでしょうか?
10 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 11:54:40 ] fpclassify
11 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:45:18 ] >>9 Double.isNaN Double.isInfinity
12 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:49:56 ] >>11 スレタイ嫁。
13 名前:デフォルトの名無しさん [2007/02/24(土) 15:10:31 ] 最近思うのだが C言語のreturn文てあまり使わないんじゃないの?
14 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:12:34 ] ?????
15 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:15:35 ] 最近思うのだが>>13 は C言語の関数をひとつしか作らないんじゃないの?
16 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:21:47 ] このへんはC99? isnan,isinifnite
17 名前:デフォルトの名無しさん [2007/02/24(土) 15:22:14 ] 引き数をポインターにして戻せば良いかなと思うんだけど
18 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:31:32 ] >>16 isnanはC99要求だね。 isinifniteってのはないが、isinfがC99から fpclassifyもだけど
19 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:37:56 ] >>17 hoge( hage() ) みたいに、結果をそのまま他の関数に渡す場合は?
20 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 15:56:32 ] 関数なんて便利なものがなかった時代でもプログラマはなんとかやってたわけだからreturn使わなくてもなんとかなるだろ。
21 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 16:06:16 ] なんとかならないから関数の概念が発達したんだろうに。
22 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 16:46:57 ] time()みたいに引き数でも戻り値でも戻す奴もいるがな。
23 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:11:44 ] 関数を呼ぶときに必ず右辺値を要求されるのは鬱陶しくてかなわん。
24 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:20:07 ] >23 どゆこと?kwsk
25 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 18:33:39 ] 左辺値を要求されると即値が書けずに鬱陶しいという話なら分かるが、 右だとなんだろ。
26 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 19:47:41 ] >>25 たぶん、>>23 が右と左の区別もつかない馬鹿なんじゃないのか?
27 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 19:48:37 ] >>25 たぶん、>>23 が右と左の区別もつかない馬鹿なんじゃないのか?
28 名前:デフォルトの名無しさん [2007/02/24(土) 22:34:02 ] printf()系の関数ってどうやって、 複数の型で値渡ししてるの? int printf(const char *format, ...); ...っていうのが可変長引数っていうのまでは わかったんだけど・・・ 個人的予測では、void*で受けて、 *formatの内容で型キャストしてるのかなぁ・・・と。
29 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:37:47 ] va_stratとかでググれ。 どうやっているかはコンパイラ次第でどうにでもできるようマクロで隠されている。
30 名前:28 [2007/02/24(土) 22:44:04 ] >>29 そうすると、いろいろやり方があるって事ですか? 例えばでいいので教えてもらえませんか。
31 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 22:53:38 ] 可変長引数を受け取る方法は、 29の言うva_startなど<stdarg.h>にある一連のマクロを使うことになっている。 コンパイラは、可変長引数をどうやって実現していようと、 <stdarg.h>の内容を定められたとおりに実装しなければならない。 だから結局使う側は<stdarg.h>のマクロの使い方を知っていれば良く、 どうやって実現されているかということは知る必要など無い。 もちろん理解を深めるために知りたいとかそういう話は別だ。
32 名前:28 mailto:sage [2007/02/24(土) 23:03:42 ] >>31 >>29 さんはva_startの事を言っていたんですね。 stdarg.hを参照することにします。 有難うございました。
33 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:10:35 ] でもって、可変長だと、実際に引数がいくつ、またどんな型で渡されたかは、 C言語的には判断できないので、printfのように%指定で判断する(だから%指 定の数やデータ型と引数にズレがあるとおかしなことになる)約束にするか、 型情報とデータをペアで交互に渡し、最後の引数として特定の値(NULLとか)の ものを積むとか決めておく。
34 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:44:27 ] 質問失礼します。 Visual C++ 2005 Express Editionで、 C++のプログラムを作るには、 Visual C++ 2005 Express Edition Microsoft Platform SDK インストールした後はこれだけあればいいんでしょうか? Microsoft MSDN 2005 Express Edition Microsoft SQL Server 2005 Microsoft SQL Server Natibe Client Microsoft SQL Server VSS Writer Microsoft SQL Server セットアップ サポート ファイル これらは必要ありませんか? 削除してしまっても大丈夫でしょうか? PCを起動するたび、タスクマネージャを見ると sqlserve.exeというのが100MB近くもメモリを使っているようなのです。 HDもかなりの量を使っているので、削除できるものがあれば削除したいのですが。
35 名前:28 [2007/02/25(日) 21:44:12 ] >>28 です。 詰まったので、又質問させていただきます。 stdarg.h内にてva_startを参照したところ__builtin_va_startに対して マクロ定義されていたました。 __builtin_va_startとは、一体何者なのでしょうか・・・ 検索したのですが、解説しているページがなく困っています。 よろしくお願いいたします。
36 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 21:46:52 ] va_startマクロが何をラップしていようと知ったこっちゃない。 コンパイラの開発元にでも問い合わせとけ
37 名前:28 mailto:sage [2007/02/25(日) 21:50:29 ] >>36 そういうもんですか。 ふぅ。
38 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:57:30 ] >>34 どれも使わないなら削除してしまえ。 そもそもVC++のインストール時にインストールしないよう指定できる。 MSDNには関数リファレンスやコンパイラオプションなどの説明などが 入っているが、必要ならExpress付属のものよりも、 オンラインのものや別途ダウンロードのもののほうが良い。 www.microsoft.com/downloads/details.aspx?FamilyID=94596AF5-CC58-45AF-A14B-DF627A31E783&displaylang=ja
39 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:10:18 ] >>28 va_arg が何をやってるかを低レベルで理解したいってこと? 関数の引数はスタックに積まれるので 最初の引数のポインタを渡すことで それ以降の引数のアドレスを求めているだけ。 取り出すときは型情報を指定することでサイズがわかる。 stdarg.h 使わずに実装すると勉強になりますよ。
40 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:19:22 ] >>38 どうもありがとうございます。 これですっきりします。
41 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:35:15 ] >>35 おまいさんが使ってるのはgccかな? このまわりの実装は処理系によって全然違う。 ANSI C に準拠していない古い処理系だと va_start に 引数がなかったりするようなヤツもある。 >>39 が言ってるのは一般的な処理方法の一つに過ぎない。が、 自分が使ってる処理系/環境でのこのまわりの動作を 理解できてれば↓こんなアホなこともできる。 mx1.tiki.ne.jp/~wraith/tips0005.htm
42 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 05:00:15 ] 用例1は未だしも、用例2はカス以下だな。
43 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:33:44 ] >>42 >用例1は未だしも そう思った、お前もカス以下だな。
44 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 00:19:17 ] 後のWM_(NC)CREATEのCREATESTRUCTを見ると、 WindowsのCreateWindow(Ex)はおそらく用例2を使っている。 だからどうしたということだが。
45 名前:デフォルトの名無しさん [2007/02/27(火) 21:56:35 ] よくポインタでつまずく、ポインタが難しいといわれてるけど、 ポインタ以前で難しいところやつまずきやすい所はどこ?
46 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:59:37 ] 環境設定
47 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:06:48 ] パスを通すところだな 初心者がマニュアル読まず検索せず過去ログを読まずに 質問してくる
48 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:22:02 ] しかも質問にはエラーを貼らないとか省略するとか独自解釈するとか。
49 名前:デフォルトの名無しさん [2007/03/03(土) 13:14:32 ] Cの勉強を始めるに当たり、参考書を買おうと思ってるのですが、 どれがいいのか教えていただけないでしょうか?
50 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 13:27:10 ] >>49 つ ttp://www.7andy.jp/books/detail?accd=31444195
51 名前:デフォルトの名無しさん [2007/03/05(月) 09:50:01 ] 週明け早々お聞きしたいのですが 配列で、効率的にメモリ確保をしたいのですが、どうやればいいでしょうか。 具体的には ・・・・・・・・・・・・・・・ ・・・・・・・・・・・ ・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・ ・・・・・・・・・・・・v こういう座標群があったとして、それを配列に確保していきたいのです。 point[x][y]のように宣言して、左上から値がなかったら0 あったら1のように確保していくと 無い部分のメモリが無駄に取られてしまうので 座標がある部分だけ、確保したいのです。 図は二次元ですが、それを3次元でやりたくて、そこで詰まっています。 ご指南お願い致します
52 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 09:51:36 ] すいません、上げてしまって。 他のスレの方が聞けそうなので、こちらの質問は撤回させていただきます。 すみませんでした
53 名前:デフォルトの名無しさん [2007/03/13(火) 15:13:44 ] strcatを使用しないでchar型配列(str1とstr2)を連結したいのですが、 文字列str1の最後の'\0'に文字列str2の0からを一つずつ代入していけばいいのは 分かるのですが、やり方がわかりません。 どうすればできますか?
54 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:20:16 ] int main(void) char str1[10] = "STR1", str2[] = "STR2"; char *p = str1, *q = str2; while(*++p); while(*p++ = *q++); puts(str1); }
55 名前:デフォルトの名無しさん [2007/03/13(火) 15:31:17 ] >>54 さん ありがとうございます。 まだポインタのほうを勉強していないのでまだよく分からないのですが、 参考にしてみます。
56 名前:デフォルトの名無しさん mailto:sage [2007/03/13(火) 15:56:35 ] 配列の知識のみで書くと、 int i = 0; int j = 0; while (str1[i] != '¥0') { i++; } whle (str2[j] != '¥0') { str1[i] = str2[j]; i++; j++; } str2[j] = '¥0';
57 名前:デフォルトの名無しさん [2007/03/13(火) 16:09:31 ] >>56 さん 親切にありがとうございます。 ちゃんとできました。
58 名前:デフォルトの名無しさん [2007/03/15(木) 01:08:44 ] 数値の桁数を得るのによい方法はないでしょうか? たとえば、 int val = 7743; とある場合、valは4桁というように。ただ、printf系は使わずに行いたいです。 10で割っていけばできるような気がするんですが、イマイチわかりません。
59 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:11:02 ] 桁数 = 1 + log10(N) 高校数学の知識だろ。
60 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:13:34 ] 中学生かも知れないじゃん。 int val = 7743; int keta = 0; int temp = val; for (; temp > 0; keta++, temp /= 10); ただし val > 0 のときのみ
61 名前:58 [2007/03/15(木) 01:18:03 ] >>59-60 ありがとうございます。
62 名前:デフォルトの名無しさん [2007/03/16(金) 22:14:48 ] while(*p++ = *q++); どうしてこれで文字列がコピーできるんですか。
63 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:20:36 ] 最後の¥0を含めて文字をコピーしてはポインタが進み、 ¥0を代入したところで式全体の値が¥0つまり整数としては0になり、 偽と見なされるのでループが終了する。
64 名前:62 mailto:sage [2007/03/16(金) 22:39:36 ] 早速ありがとうございます。 もうちょっと教えてください。 カッコの中の「左++」「代入」「右++」では、必ず真ん中の「代入」から走るってことでいいですか? 左右の++が同期取れてないとずれちゃうんじゃないの、 ていうのが一番疑問なところなのです。
65 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 22:43:09 ] ++が後置されているときは、まず現在値を以降の式で 使うものとして控えてから1を加える。 前置なら1加えるのが先。
66 名前:62=64 mailto:sage [2007/03/16(金) 22:52:40 ] >>65 納得しました。ありがとうございます。
67 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 04:32:41 ] >62って書き換えると do {  *p = *q;  p++;  q++; }while(*p); ってことなんだよね。 初めて見たとき while(*p) {  *p = *q;  p++;  q++; } かと思ってなんで'\0'がコピーされるのかしばらく理解できなかったよ。
68 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 05:10:29 ] シムラーセミコロンセミコロン
69 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 11:30:27 ] >67 上のdoはwhile(*(p-1))じゃないと。
70 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 11:36:56 ] 寧ろどちらかというと while (p[0] = q[0], p++, q++, p[-1] != '\0') ; だな。
71 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 00:06:29 ] #include<stdio.h> int main(void) { FILE *fp; fp=fopen("test.txt","w"); if(fp==NULL){ printf("エラー\n"); return 1;} fprintf(fp,"ファイルに書き込みました。\n"); fclose(fp); return 0; } このような処理を行う時に、return 1とreturn 0の違いはなんですか? return 0で代用しちゃだめ?
72 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 00:26:48 ] >>71 駄目じゃあないけど、 プログラムが正常終了したときに0を返し、 異常終了したときに0以外を返すのが慣習なので、 特段の理由がないときは慣習に従っておくのが得策。
73 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:00:43 ] プログラムを呼び出すプログラムでは、呼び出して返ってきたときに そのreturnの値を参考にするようになってることがある。 呼び出したプログラムが成功裏に動いたときに限って後続の処理を行うとか。 練習で作るようなプログラムでは実質的にはどんな数を返してもいい。
74 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:00:45 ] CPad for Borland C++Compilerでプログラミングしています。 #include <stdio.h> int main() { char str[] = "tanaka tarou"; char str2[100]; char *p,*q; p = &str[0]; q = &str2[0]; while(*p != '\0'){ if((*p != 'a') && (*p != 'i') && (*p != 'u') && (*p != 'e') && (*p != 'o')) *(q++) = *p; p++; } printf("%s ---> %s\n",str,str2); return 0; } 文字列の子音だけを取り出して表示するプログラムを作りたいのですが、上記のプログラムを実行すると tanaka tarou ---> tnk tr@ のように最後にまったく関係のない文字が表示されてしまいます。その理由と解決策を教えてもらえないでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:06:19 ] str2に'\0'を入れ忘れているからじゃないか?
76 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 01:32:01 ] printfの直前に *q = '¥0';
77 名前:74 mailto:sage [2007/03/18(日) 02:17:01 ] >>75-76 回答ありがとうございます!解決しました。 なんともないように見えることもあるみたいですが、\0が抜けているとこういった不具合が起こるんですね。
78 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 10:30:31 ] 自分で決めた位置に¥0を入れないと、「運良く」その先に¥0が入っている ところが見つかるまでずーーーーっと文字列が続いていることになってしまう。
79 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:44:10 ] 整数はint型、文字はchar型を使うのが原則のようですが、 文字はコンピュータの中で数字で扱われていることと、 char型が0〜255、int型がそれ以上の範囲の数字を扱えることを考えると 文字を扱う時もint型でかまわないのでは?と思いました。 実際、int型で1文字出力できました。具体的には下です。 int a; a=getchar(); printf("%c\n",a); return 0; しかし、文字列をint型で扱おうとすると、コンパイル時にエラーとなります。 int a[50]="Hello"; printf("%s\n",a); return 0; なぜ、int型では文字列が扱えないのか理解できません。
80 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 13:59:24 ] > a=getchar(); getcharはEOFも返すのでint型を返すと宣言されており、実は正解。 EOFの場合を弾いてからchar型として扱うべき > printf("%c\n",a); 可変個引数では全てint以上に拡張されて引数が渡される規則。 char型の値を渡そうとint型の値を渡そうと正常に動いてしまう。 > int a[50]="Hello"; できないという規則になっているからとしか言えない。 int型の配列に文字列を無理やり入れる方法はあるが、 文字列を扱う関数はchar配列、つまりsizeof (char) == 1バイトずつ 文字がメモリに格納されることを前提にコードが書かれているので、 無理にint型の配列にしたところで、正しく動作しない。
81 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:14:28 ] >int a[50] = "Hello"; これは、 int a[50]; a[0] = 'H'; a[1] = 'e'; a[2] = 'l'; a[3] = 'l'; a[4] = 'o'; a[5] = '\0'; とするか int a[50]; for (int ic = 0; a[ic] = "Hello"[ic]; ++ic) ; とすれば実装できなくは無いな。
82 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 14:16:54 ] int a[50] = {'H', 'e', 'l', 'l', 'o', '\0'}; でいいじゃない
83 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:13:05 ] >>80-82 ありがとうございます char a[50]="Hello"; と char a[50]={'H','e','l','l','o','\0'}; は違うのでしょうか? 手持ちの本では、特に違いは書いてないのですが・・・
84 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:18:10 ] "Hello" は char[] 型 {'H','e','l','l','o','\0'} は文脈によって char[] とも int[] とも解釈できる。
85 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:23:15 ] "hello"のような文字列リテラルはchar配列を初期化するのに使える (その場合{'H', 'e', 'l', 'l', 'o', '\0'}のように解釈する) という規則が特別に設けられている。 だからint a[50] = "Hello";はできない。 でもwchar_tがintとなっている環境なら、int a[50] = L"Hello";でいけるはず。 率直にwchar_t使えと言うとこだが。
86 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:49:35 ] >>84-85 なるほど。試してみたところ、 int a[50]={'H','e','l','l','o','\0'}; ○ char a[50]={'H','e','l','l','o','\0'}; ○ int a[50]="Hello"; × char a[50]="Hello"; ○ でした。 int a[50]={'H','e','l','l','o','\0'}; が>>80 で言っていたint型の配列に 文字列を無理やり入れる方法にあたるんですかね? また、>>80 で>EOFの場合を弾いてからchar型として扱うべき とありますが、どんな風にするんですか?
87 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 15:57:21 ] 文字列をintで扱うって言っても、ライブラリ関係を全部自作しないといけないよ。
88 名前:デフォルトの名無しさん mailto:sage [2007/03/18(日) 22:59:37 ] まあ試しに int a[50]={'H','e','l','l','o','¥0'}; puts((char *)a); をやってみるこった。思った通りの結果にならないから。 というわけで>>87 になる。
89 名前:デフォルトの名無しさん [2007/03/19(月) 10:30:28 ] 質問お願いします。 char a[100],b[100]; int i; i = 0; do { a[i] = b[i]; } while (a[i++] != '\0'); を、for文に書き換えたいのですが、 どうすれば良いでしょうか? 一応、 for ( i = 0; a[i] != '\0'; i++) { a[i] = b[i]; } としてみたのですが、うまくいきません。
90 名前:デフォルトの名無しさん [2007/03/19(月) 10:57:27 ] >>89 です。 解決しました。 もう大丈夫です。失礼しました。
91 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:38:13 ] 課題でislowerを使わない(islowerのプログラムを自作する)というものが出たのですが、 どこから手を付けたら良いかさっぱり分かりません。 ヒントで良いので教えていただけませんか?
92 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:43:09 ] 1.文字がアルファベットの小文字かどうか判定する 2.小文字だったら大文字に変換する
93 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 13:51:02 ] >>92 さんありがとうございます。 ヒントを手がかりにしてやってみます。
94 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 14:08:58 ] その素直なとこに免じてさらにヒントだ。 1.文字は数字で表され、aからzは順番に数字が割り当てられている。 2.大文字と小文字の差は一定。
95 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 14:15:35 ] >>91 です。 ありがとうございます。 ASCIIコードの大文字と小文字の差を利用すれば良いんですね。 だんだん分かってきました。 ありがとうございます。
96 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 15:30:03 ] 遅くなりましたが>>91 です。 お陰でislower出来ました。 isupperのプログラムも真似してやってみたら出来ました。 >>92 >>94 さん、親切に教えてくれてありがとうございました。
97 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 15:45:07 ] プログラミングの学習過程上では「そんなこともある」程度の認識でもOK な雑談: C言語はアスキーコードでない、アルファベットの並びが素直じゃない文字 セットで動くことを認めているので、アスキーを仮定するのは行儀が悪いと 言えば悪い。また、英語以外では大文字小文字の規則が少々複雑なこともあ り、単純な引き算では片付けられないこともある。
98 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 04:39:49 ] GetWindowTextで取得した文字列を他のプロセスにペーストするには どうしたらいいでしょうか
99 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 07:07:20 ] WM_SETTEXT メッセージを直接送ったら良かったと思う。
100 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:16:50 ] WM_SETTEXTがまずいならWM_COPYDATAという手も。 それで間に合わないならプロセス間通信
101 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:42:13 ] >>99 >>100 ありがとうございます。 自分、ズブズブの素人なもので、なかなか上手くいきませんが 調べまくって頑張りますです。
102 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:03:48 ] 例えば、data1に{2,4,22,5,3}とデータが初期化されていて、 data2にdata1のデータを小さい順に並び替えるにはどうすれば良いでしょうか? sortはまだ習っていないので、数値を比較して、 小さかった順にdata2に代入していくという方法でやっていきたいのですが。
103 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:08:14 ] 自分が思う方法でやってごらん カードとか用意して自分で手作業で並べかえてみてその方法をプログラムにしてみる
104 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:11:54 ] 一番小さいカードを選んで先頭に置いて、二番目に小さいカードを選んで二番目に置いて、以下同様に。
105 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 17:22:52 ] >>103-104 ありがとうございます。 そのまま代入していく形になるんですね。 本当に初心者なものですみません。
106 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 19:43:57 ] #include<stdio.h> int main(void) { int date1[5]={2,4,22,5,3}; int i,j,k,date2[5]; for(i=0;i<4;i++){ for(j=i+1;j<5;j++){ if(date1[i]<date1[j]) {k=date1[j]; date1[j]=date1[i]; date1[i]=k;} } } for(i=0;i<5;i++) date2[i]=date1[i]; for(j=0;j<5;j++) printf("%d\n",date2[j]); return 0; } >>102 をやってみた。 こっちも初心者なもんで、評価たのむ。 forばっかでウザいとは思う。
107 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:06:20 ] >>102 >数値を比較して、小さかった順にdata2に代入していくという方法。 これも立派な既知のソートアルゴリズムだ。Selection sort。
108 名前:デフォルトの名無しさん mailto:age [2007/03/20(火) 20:06:24 ] #include <"ファイル名"> このファイル名の部分についての質問です。 このファイル名は、大文字、小文字を区別してないみたいですが、 これって、仕様なんですか? 初歩的な質問ですが、よろしくお願いします。
109 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:07:58 ] FATファイルシステム、MS-DOS、Windows(特にWindows NTのWin32サブシステム)などの仕様
110 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 20:41:44 ] >>109 なるほど、仕様なんですね。 安心しました。 回答ありがとうございました。
111 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:26:47 ] >>109 NTFSも区別しませんが何か。
112 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:32:03 ] Macも、UNIXベースなくせにデフォルトインストールでは区別しないから Macで動いてるRubyスクリプトを他所に持って行ってハマったことがある。
113 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 22:52:45 ] >>111 NTFSは区別するよ。 Windowsの標準ファイルシステムドライバがFATとの互換性を維持するために、 大文字小文字の違いしかないファイルを同一視してるだけ。 SFUインストールすればオプションでCaseSensitiveな環境も構築できる。
114 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 06:33:29 ] #include <stdio.h> main() { printf("Hello!"); return 0; } これで普通ならOKですよね? Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland sample1.c: エラー E2209 sample1.c 1: インクルードファイル 'stdio.h' をオープンできない 警告 W8065 sample1.c 4: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main ) *** 1 errors in Compile *** って表示されて出力できないよorz
115 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 08:24:08 ] >>114 コンパイラの環境設定に失敗しています。コンパイラの添付資料をよく読んで設定しなおしてみてください。
116 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:23:52 ] エディットボックスに入力された文字列をOKボタンを押すと クリップボードにコピーされるようにしたいのですが、上手く行きません。 VC++ Win32API スマートデバイス WM5.0SDKな環境です。 HWND hWnd; HWND g_hEditbox; TCHAR buff[256]; GetWindowText(g_hEditbox,buff,sizeof(buff)/sizeof(TCHAR)); if(OpenClipboard(hWnd)) { EmptyClipboard(); char* buff; UINT size = strlen(buff)+1; HLOCAL clipbuffer = LocalAlloc(LPTR, size); strcpy((char*)clipbuffer, LPCSTR(buff)); SetClipboardData(CF_TEXT,clipbuffer); CloseClipboard(); } SetWindowText(g_hStatic,buff)でHWND g_hStaticにbuffの文字列は表示出来ています。 よろしければご教示願います。
117 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:30:25 ] クリップボードにセットするデータはメモリへのハンドルでないといけないので、 固定メモリでは駄目、LMEM_MOVEABLEにしないといけない。
118 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 09:46:33 ] HLOCAL clipbuffer = LocalAlloc(LMEM_MOVEABLE, size); こうなるのでしょうか。 んんん、上手く行かない
119 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:11:50 ] メモリへのハンドルに対しては直接読み書きできない。 LocalLockを呼んでハンドルからメモリへのポインタを取得する必要がある。 そしてアンロックすると再びハンドルが利用可能になる。
120 名前:116 mailto:sage [2007/03/21(水) 10:17:17 ] SetClipboardData(CF_UNICODETEXT,clipbuffer); とすることでなんらかのデータがクリップボードにセットされました ペーストしてもなにも追加されませんが。 プログラミング初めて2日目なもんでまだ全然理解出来てないです。 勉強してきます。
121 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:19:22 ] SetClipboardDataでググれば色々サンプルが見付かると思う。
122 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:19:46 ] つかいい加減スレタイ嫁
123 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 10:30:35 ] 別に環境依存ネタ禁止ではないしいいんじゃないのそれくらい
124 名前:116 mailto:sage [2007/03/21(水) 10:55:02 ] Unicode用と非Unicode用のが混在していたのが問題だったようです。 char*をwchar_t*, strcpyを_tcscpyなどに置き換えると ちゃんとクリップボードにコピーでき、ペーストも出来ました。 スレ違い失礼いたしました。 レスくださった方ありがとうございます。
125 名前:デフォルトの名無しさん [2007/03/21(水) 13:19:59 ] #include <stdio.h> int main(void) { FILE *fp; int i; char ch[20]; fp = fopen("test1.txt","r"); if(fp == NULL) { return 1; } printf("OPEN!!\n"); for(i = 0; i <1 ; i++){ fgets(&ch[i],20,fp); } printf("%s",ch) ; fclose(fp); return 0; } ファイルにabcdefgという文字列を書いておいてそれを読み取れたのですが、 for()のところの条件式をi<8としても、i<1としてもabcdefgと読み取れてしまう。 なぜ?
126 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:23:35 ] >>125 fgets(&ch[i],20,fp); はどういう動作をする?
127 名前:デフォルトの名無しさん [2007/03/21(水) 13:39:55 ] >>125 すいません。わからないです。
128 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 13:48:10 ] 1文字ずつ読むにはfgetcを使う。 どうしてもfgetsで1文字ずつ読みたいなら読んでもいいが、 書き方が間違っている。 fgetsは、最大で指定した数(20)-1の数の文字(バイト)を読む。 ただし、ファイルの最後か、改行にぶつかるか、エラーが発生するとそこまで。 20は、第1引数で確保した配列のサイズではなく、読み込みたい最大のサイズ+1。 -1したり+1したりするのは、読んだ後、末尾にfgetsが¥0を書き込むから。
129 名前:: [2007/03/21(水) 17:29:07 ] 卒論でC言語を使ってシミュレーションしたいと考えているんだけど。 気温のデータがあって、10年後の気温がどうなっていくか?って いうシミュレーションをC言語でできる?そもそもこの課題じたいプログラミング ではできない?まだ卒論まで2年あって、C言語習ったばっかなんだけど、 こういう事プログラミングでできないかな?って思ってます。シミュレーション をするのに最適な言語って何ですか?
130 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:33:43 ] シミュレートの計算・方法が分かるならば余裕で出来る。
131 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:40:49 ] 可能かどうかはアルゴリズムに因るわけだが その辺の記述が全く無いので何もいえない たとえば理想的な放物線をシミュレートするのは難しいができる事、 でも貴方の人生をシミュレートするのは出来ないこと(出来るかも?) 二つの違いはシミュレートするためのアルゴリズムの違いに因る
132 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:53:38 ] >>129 気温シミュレーションは、別にC言語を使わずともできる。
133 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:53:53 ] >>129 曲線を分析するならCで十分だろう。 気象シミュレーターみたいなものが作りたいなら、 Cでもできるが、そういう計算に最適化された言語もある。
134 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 17:57:23 ] >>129 正直先生に聞いたほうが早いと思うぞ
135 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:14:24 ] ウィンドウの長さとかテキストで簡単に編集できるようにしたいんですが 形式は何がいいんでしょうか?iniとかcfgとかdefとか
136 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:16:34 ] 好きなのでいいよ
137 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:17:49 ] >>135 拡張子はなにがいいかって質問?
138 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:17:53 ] 設定ファイルの拡張子ってことか? 俺はユーザーに書き換えられても問題ないデータは.iniを使ってる。
139 名前:129 [2007/03/21(水) 18:19:32 ] 意見、ありがとう。 気温か待機電力のシミュレーションをしようか迷ってます。 まぁ卒論だからもっと練らないとだめだろうけどね! 待機電力量を出す計算の仕方はわかるから、それを何十年後は どうなるか?っていうのはシミュレーションできる?実際は 将来、待機電力量を少なくする装置なんかも現在開発されてて シミュレーションとは違う結果になるんだろうけど、その違いを 説明していくのも面白いと思ってます
140 名前:135 mailto:sage [2007/03/21(水) 18:30:17 ] >>136-138 レスd。 >>138 そういう意味です。ありがとう。
141 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:54:41 ] >>140 ふつうのユーザが弄れるようにするなら デフォルトで関連付けられてるiniかtxtがいんでね?
142 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 18:55:37 ] すまんWindowsならの話だなこれは