- 1 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:24:18 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 20 pc11.2ch.net/test/read.cgi/tech/1192455273/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 99代目 pc11.2ch.net/test/read.cgi/tech/1194262698/
- 718 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 11:06:17 ]
- vcだとwhile(1)は警告レベル最大だと文句言われるのでfor(;;)を使うようになった
この辺の習慣は環境で変わるんだろうね
- 719 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 11:08:38 ]
- 泣く泣く for (; ;) を使うように
- 720 名前:デフォルトの名無しさん [2007/11/25(日) 13:30:51 ]
- >>718
どういう警告?
- 721 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:42:40 ]
- >>720
C4127
- 722 名前:デフォルトの名無しさん [2007/11/25(日) 15:10:01 ]
- CとC++はもう仲良くできないの?
C99すごすぎ。
- 723 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:28:24 ]
- 認識率1%とかの実験のプログラムを前の先輩をつくられて
再実験でそのプログラムを作ってるんだけど。 データ100でそのうちの何個かで認識率を出すって感じで 今ようやくデータ1つで数値を出せるようになった。 データ100個をプログラムで入力できるようにして自動でしたいんだけど 結構複雑。 データ1つ入力して値をだして100回するのも 認識率1%とかいうやって意味あるのか的な感じがして自重してる。 しかしプログラムの内容を率でだされるのっていやだね。
- 724 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:36:31 ]
- 日記帳にでも書いてろカス
- 725 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:57:23 ]
- www.nicovideo.jp/watch/sm1619083
これか
- 726 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:48:10 ]
- 文字列処理を極めたいのですが、何から手を付けたらいいですか?
- 727 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:01:28 ]
- 左から。
- 728 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:02:51 ]
- まずは文字列の表現方法を考えることから
- 729 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:03:10 ]
- 修辞的疑問文というやつだな
- 730 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:13:07 ]
- ファイルを読み取る時に一文字ずつ読み取る方法と
一行ずつ読み取る方法がありますが、 どういう場合に使い分けるんですか?
- 731 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:14:23 ]
- カンタンなことだ。
ファイルを1文字ずつ読み取りたい場合は1文字ずつ読み取る方法を使い、 1行ずつ読み取りたい場合は1行ずつ読み取る方法を使う。
- 732 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:16:09 ]
- その日の気分による
- 733 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:30:51 ]
- 一行ずつ、もしくは一文字ずつ読み取らなければいけない場合とは、
例えばどんな場合がありますか?
- 734 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:43:56 ]
- >>733
行に意味があるときには行単位で読んだほうが楽 行に意味がないときには文字単位で読んだほうが楽
- 735 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:13:40 ]
- バイナリファイルは1文字ずつ読んで、
テキストファイルは1行ずつ読む。
- 736 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:39:40 ]
- >>735
さらっと嘘教えるな
- 737 名前:デフォルトの名無しさん [2007/11/25(日) 23:10:37 ]
- 型変換しないのに型変換するとコストかかりますか?
たとえばunsigned int型を同じ型でキャストした場合です
- 738 名前:737 [2007/11/25(日) 23:17:16 ]
- どうやらたいして差がないことが分かりました
- 739 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:39:11 ]
- まず間違いなく出力は1バイトもたがわないと思う。
- 740 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:22:38 ]
- ビルドしてfc /bで比べればいいんじゃね
- 741 名前:デフォルトの名無しさん [2007/11/26(月) 01:08:03 ]
- >>714
分かり易い説明をありがとうございます。 >>709の例で言うと、for文を使う方が一般的、ということですね。 どちらも i を宣言しないといけないことに変わりはないんですね。
- 742 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 05:05:13 ]
- ループの終了条件がループカウンター以外の場合はwhileを使う。
ループごとにある関数を呼んで、その結果が真の時のみループを抜ける、とかな。 while (func() != 0) { 〜何かの処理〜 } まあforでも実現できるから、どっちでもいいんじゃない?
- 743 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 09:16:58 ]
- C言語の参考書Lvを卒業して、線形リストとかアルゴリズムみたいなのをある程度組んでみた。
30日位考えれば作れるようなプログラムとかどのような物があります? 大学にも行けなかったような頭なので、そこまで難しい物はまず出来ませんが。
- 744 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 09:31:01 ]
- >>743
トランプのポーカーを AI 付で
- 745 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 09:36:18 ]
- >>743
OS。本が売ってるからそれに従えばおk
- 746 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 09:55:58 ]
- >>744
色々ネットにソースありましたが、AIって部分が難しそうですね・・・ ゲーム作ってみたかったので参考にさせて頂きます。 >>745 アセンブラも使うそうですし、OSとなると自分には無理な気がしてならないですがw 30日でOSが出来るならとなると少し興味もありますね。 レビューのみでは分からなかったのでこれから本屋行って二つを見て周って来ます レス下さった方有難うございました
- 747 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:45:16 ]
- int a[256]={0} という配列を定義して
例えば1024をscanfでこの配列に a[0]=1024 , a[1]=0 ,a[2]=0,......,a[255]=0 ではなく a[0]=4 ,a[1]=2, a[2]=0, a[3]=1.a[4]=0,.....,a[255]=0 という風に格納したいのですが、どういう風にプログラムを書けばいいのか思いつきません よろしくお願いします。
- 748 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:48:11 ]
- int n, a[256] = {0}, i;
scanf("%d", &n); for(i=0; n; i++, n/=10) a[i] = n % 10;
- 749 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:06:25 ]
- >>748
ありがとうございます! int型やdouble型以上の桁の数字を扱う方法として 一桁ずつ格納する方法ならば!と思ったのですが、 どちらにしろ一度int型の変数に代入しないといけないことにプログラム見て気付きましたorz char型の配列(例えばstr[256])に文字として数値を文字として格納した後に、 それをint型の配列(a[256])に入れなおすことって出来ませんよね…
- 750 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:19:16 ]
- >>749
こういうこと? char buf[] = "123456789"; int val[sizeof(buf)]; for (unsigned ic = 0; ic < sizeof(buf); ++ic) { val[ic] = buf[ic] == '\0' ? 0 : buf[ic] - '0'; }
- 751 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:20:01 ]
- int i, j=0, a[256];
char str[256]; scanf("%s", str); for(i=0; str[i]; i++); whil(i--) a[j++] = str[i] - '0';
- 752 名前:デフォルトの名無しさん [2007/11/26(月) 14:20:10 ]
- void array_double(int *a, int n)
{ int i; for(i=0;i<n-1;i++,n--) { a[i] = a[n-1]; }} 配列aとそのサイズnを受け取り、要素を逆順にするプログラムを考えているんですが、 うまくコンパイルすることができず、1,2,3,4,5と入力すると、5,4,3,4,5と出力されます。 どこがおかしいのでしょうか?
- 753 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:25:38 ]
- >>752
>どこがおかしいのでしょうか? 頭。 コードと結果が合致してさえいないぞ。自分のコードくらい間違うな。
- 754 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:29:45 ]
- >>752
ヒント: 上書きと交換は違う
- 755 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:31:48 ]
- >>753
ヒント: ピントが外れている
- 756 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:32:11 ]
- >>753
お前の頭もおかしいよ
- 757 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:36:06 ]
- >>752
自分の頭(紙と鉛筆でもいい)の中で実行して 1行ずつ変数の中身がどうなるか考えてみよう ループを展開するんだ。 a[0] = a[5-1]; a[1] = a[5-1]; ・ ・ ・
- 758 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:36:57 ]
- >>757
お前もちゃんとコード見ろ
- 759 名前:753 mailto:sage [2007/11/26(月) 14:40:36 ]
- とりあえず、>755のお蔭でn--を見落としていたのは判ったw
>>757 同士よw
- 760 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:52:32 ]
- >>752
a[i] = a[n-1] を int temp = a[i]; a[i] = a[n-1]; a[n-1] = temp; にすればok
- 761 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 14:58:31 ]
- Cに交換演算子が欲しいと思う恭子の頃。
- 762 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 15:31:04 ]
- >>761
具体的にどう実装する?
- 763 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 15:33:38 ]
- >>762
>760の例なら a[i] <> a[n - 1]; とか。 評価の回数を減らせるし、swapマクロを作って自爆することもなくなるし、 CPUに交換ニモニックがあれば使えるべさ。
- 764 名前:デフォルトの名無しさん [2007/11/26(月) 16:08:54 ]
- 今大学でプログラミング授業を取ってるんだが、色々とワカンネorz
演習内容うpするので教えてくれませんか?
- 765 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:16:21 ]
- >>764
スレ違い
- 766 名前:デフォルトの名無しさん [2007/11/26(月) 16:18:44 ]
- >>765
キティーだから許して。スレ違いだったらスマン 板いろいろ探したんだが、何処で聞いたらいい? ググレ以外の回答を頼むw
- 767 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:26:09 ]
- C/C++の宿題を片付けます 100
pc11.2ch.net/test/read.cgi/tech/1195668114/l50
- 768 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:26:32 ]
- >>764
宿題スレも見つけられないなら大人しく首括っとけ。
- 769 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:57:03 ]
- Visual C++ 2005を使用しています。
文字列をLONGLONG型の整数値に変換したいんですが、atoll関数が見つかりません。 Visual C++ 2005の環境では、atoll関数は自作するしかないでしょうか。
- 770 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:58:25 ]
- >>769
つ[strtoll()]
- 771 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 18:42:36 ]
- _atoi64
- 772 名前:デフォルトの名無しさん [2007/11/26(月) 18:51:11 ]
- boost::lexical_cast
- 773 名前:769 mailto:sage [2007/11/26(月) 18:53:19 ]
- >>770-772
ありがとうございます。 _atoi64でいけました。
- 774 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 19:59:33 ]
- >>770
VC2005はC99に未対応じゃね?
- 775 名前:デフォルトの名無しさん [2007/11/26(月) 20:56:49 ]
- 変な質問ですが、C言語をマスターするのにだいたいどのくらいかかりますか?
- 776 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:01:58 ]
- オレにも教えて下さい。C言語って何が出来ますか?
入門書卒業後何をしたらいいのやら。 グラフィック系統の本みたけど、これを利用してぱらぱら漫画みたいなの作れないですか
- 777 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:05:11 ]
- Cでできないことはほとんどない
- 778 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:06:05 ]
- >>776
それだけなら画像表示ツール自身でできるからなぁ。 あんたの質問は、「英語で何ができますか?」と同じくらい無意味なんだよ。
- 779 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:40:46 ]
- #include <stdio.h>
int main(void) { FILE *fp; int x; int y = 30; fp = fopen("test.txt","r"); fscanf(fp,"%d",&x); printf("%d",x); fclose(fp); fp = fopen("test.txt","w"); fprintf(fp,"%d",x); fscanf(fp,"%d",&x); printf("%d",x); fclose(fp); return(0); } ------test.txt----- 10 ----------------- 馬鹿な質問で申し訳ないです。 実行結果が107になるんですが、何か見落としてるのでしょうか。
- 780 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:47:04 ]
- "w" なのになんで fscanf を?
- 781 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:48:45 ]
- >>779
>何か見落としてるのでしょうか。 夢 冗談さておき、"w"でオープンしたストリームからは読み込めません。 まして、fprintf()で出力した先には何もありません。
- 782 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:49:26 ]
- あ、ホントだ。
ありがとうございます。 また"r"で開きなおさないとダメなんですね。 "r+"とか"w+"の使い方もいまいち不明だし。
- 783 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:58:29 ]
- ついでに質問です。
"r+"と"a+"の違いって何でしょう? 両方ともファイルに出力したら追記されますよね。 単純にファイルが新規に作成されるか否かですか?
- 784 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:01:41 ]
- r+ は途中にも書き込める。
a+ はファイルの終わりにしか書き込めない。
- 785 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:14:53 ]
- >>784
挿入可能って事ですか? それとも上書きが出来るって事でしょうか。 色々試してみてるけど思うように扱えないです。
- 786 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:23:12 ]
- r+ は上書き可能。こんな感じ。 ポップアップ用アンカー >>786
#include <stdio.h> #include <stdlib.h> int main() { static const char FILENAME[] = "test.txt"; FILE *fp; int x = 0; /* とりあえず 10 と書き込む */ fp = fopen(FILENAME, "w"); fprintf(fp, "%d", 10); fclose(fp); fp = fopen(FILENAME, "r+"); /* r+ で開く */ /* ファイルの先頭から数値を読み出す */ fscanf(fp, "%d", &x); printf("%d\n", x); /* 10 と出力されるはず */ /* ファイルの先頭に移動して 30 と書き込む */ fseek(fp, 0, SEEK_SET); fprintf(fp, "%d", 30); /* またファイルの先頭に移動して数値を読み出す */ fseek(fp, 0, SEEK_SET); fscanf(fp, "%d", &x); printf("%d\n", x); /* 30 と出力されるはず */ fclose(fp); return EXIT_SUCCESS; }
- 787 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:32:56 ]
- 分かり易い解説ありがとうございます。
上記の例で、"a+"だと、 10 1030 と出力されちゃうんですね。 fseek関数はまだ触った事ないので勉強してみようと思います。
- 788 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:07:17 ]
- /* fseekってイマイチよく分からん。 オフセットとかなんだか知らんが
読んだときか書き込んだときでかは忘れたけど、数字で int型の4バイトの時と、char型の1バイトの時があってイミフ。 チラシの裏で馬鹿なレスだからスルーしてね^^ */
- 789 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:43:55 ]
- >>788
それは恐らくfseek()が判らないのではなくて、fprintf()で書き込むのかfwrite()で書き込むのかの 違いがよく判っていないんジャマイカ。 >>787 書き込み後は、fseek()(或いはそのサブセットのrewind())をするか、明示的にfflush()しないと 書き込んだ結果が実際のストリームに出力される保障がないことに注意。 まぁ、ファイル先頭に移動するにはrewind()の方が判りやすいだろうね。
- 790 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:56:48 ]
- 条件によって01を記録し、
記録した情報を順番に読み取って01を判別し、 条件分けをしたいのですが思ったとおりになりません。。 具体的には、書き込み FILE *fp; char output = 0; int bit = 0; fp = fopen("bitstream","rb"); for(i=0; i...... ) { if(bit == 8) {bit = 0; fputc(output,fp);} if(条件) {手順1; output = ((output<<1) | 0x01); bit++;} else {手順2; output <<= 1; bit++;} } output = (output<<(7-bit)); fputc(output,fp); 読み込み char a; for(i=0; ){ if(bit == 8) {a = getc(fp); bit = 0;} if( ( a >> (7-bit) ) & 0x01 ) {手順1; } else {手順2; } bit++;} こんな感じで書いてるんですが、どこかおかしいところがあればご指摘ください。
- 791 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:13:53 ]
- float *a;
a = new float(); *a = 120; float *temp = a; これはOKですよね float *temp = 120 これはなんでダメなんですか?
- 792 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:29:03 ]
- tempが格納するのはアドレスだから。
120を変数に格納して、その変数のアドレスをtempに渡すなどする必要がある。
- 793 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:30:17 ]
- newはC++なんだけど
- 794 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:30:49 ]
- セミコロンが無いから。
- 795 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:32:19 ]
- つまり
float *tempは、ポインタとして宣言してる状態で、そこにaのアドレスが入って、 temp = a となっている、ということですか?上の例だと で、3行目の *a =120 は aのアドレスをもったところに120をぶち込んでる、ということで float *tempとは別ものなんですよね?
- 796 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:47:27 ]
- 564.1
451.6 154.1 [EOF] こういう風になってるテキストファイルがあるときに 「EOFまで数字をテキストファイルから読み込む」という作業をする場合はどうすればいいんでしょうか? i=0; while(1){ if(fread(&c,sizeof(char),1,fp)==EOF) break; else { data[i]=fscanf(fp,"%lf\n",&value); i++; } } こんな感じにかいたらdata[0][1][2]には564.1 451.6 154.1 が入っているんでしょうか? よくfreadとfscanfなどがわかっていないのでよろしくお願いします。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:47:38 ]
- 別もの。
*a=120の*はデリファレンス、float *tempの*はポインタ宣言。
- 798 名前:ワカメ高専 mailto:sage [2007/11/27(火) 01:05:59 ]
- [-3,3] fx=1/(1+5x^2) 分点の数 10個(n=9)
これをラグランジュで求めて結果を出力するプログラムを作れって(c or c++)言われたけどさっぱりでしゅ
- 799 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:44:24 ]
- >>798
課題丸投げは宿題スレへ pc11.2ch.net/test/read.cgi/tech/1195668114/
- 800 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:49:31 ]
- >>796
i=0; while(1){ if (fscanf(fp, "%lf", &data[i]) == EOF) { break; } i++; }
- 801 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:55:32 ]
- >>795
そう。上の例は float *a; a = new float(); *a = 120; float *temp; temp = a; に等しい。下の例は float *temp; temp = 120; ということになる。floatポインタに整数120は代入できない(型が異なる)のでエラー。
- 802 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:14:26 ]
- エラーにはならないだろボケ
- 803 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:16:13 ]
- >>791
別に駄目じゃねーよ。 期待してるのとは違う動作だろうけどな。
- 804 名前:801 mailto:sage [2007/11/27(火) 02:19:44 ]
- 本当だ、エラーにはならんね、すまそ
|

|