C言語なら俺に聞け(入門編)Part 56
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/11/19(木) 18:44:14★前スレ
C言語なら俺に聞け(入門篇) Part 55
http://pc12.2ch.net/test/read.cgi/tech/1256818218/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.69【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1256022655/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 131代目
http://pc12.2ch.net/test/read.cgi/tech/1255709298/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2009/11/19(木) 18:47:37一見正しいように見えて間違っているもの
「関数に引導を渡すにはどうすればいいのですか」
デバッグは大抵こんなもんである。
0003デフォルトの名無しさん
2009/11/19(木) 19:06:590004デフォルトの名無しさん
2009/11/19(木) 19:12:38変数を変えてもらうような処理フローが使えない。ただそれだけ。
0005デフォルトの名無しさん
2009/11/19(木) 19:13:24参
照
皇
大
神
0006デフォルトの名無しさん
2009/11/19(木) 19:14:02Cでは値渡ししか使えない
の間違い
0007デフォルトの名無しさん
2009/11/19(木) 19:14:36プッ
0008デフォルトの名無しさん
2009/11/19(木) 19:23:210009デフォルトの名無しさん
2009/11/19(木) 19:30:16政府の行政刷新会議(議長:鳩山首相)は13日、概算要求から無駄を洗い出す事業仕分けで「効果が国民に見えない」などとして
「クリスマス事業への予算配分を廃止する」ことを決定した。
東京・市ヶ谷の国立印刷局職員用体育館で開かれた会議の席上では、クリスマス事業を運営する独立行政法人クリスマス運営協会の担当者が
「子どもたちに夢と希望を与える重要なイベント」
「聖夜には信じられないような愛の奇跡が起きる」
と、鼻を赤くしながら熱弁をふるい総額1兆2千万円にのぼる予算の必要性を訴えた。
これに対し仕分け人側は
「子どもたちのためという美辞麗句の裏で、実際に使われている経費は大人のホテル代だのいやらしい目的のものが大半を占めるのはなぜか」
「年々イベントのはじまる時期が早くなっている。今年は10月末からムカつく宣伝を見かけるようになった」
「効果が国民に見えない。少なくとも私は去年一人クリスマスだった」
と厳しく指摘。予算の全面廃止を決めた。
これに伴い2009年のクリスマスは中止になる見込み。経済に少し詳しい評論家の池田信夫氏は
「童貞でも“もしかして…”という淡い期待とともにコンドームを買い込んでドキドキ過ごせるのがクリスマスの醍醐味。一方的にムダと断じて廃止する事業仕分けは人民裁判だ」
と批判する。とはいえ、今年末は心穏やかに過ごすことができそうだ。
0010(- - ;)
2009/11/19(木) 19:40:48while(--i)
0011デフォルトの名無しさん
2009/11/19(木) 19:42:130012デフォルトの名無しさん
2009/11/19(木) 19:46:07乙
%dとかの%ってどういう意味ですか?
0013デフォルトの名無しさん
2009/11/19(木) 19:47:06悪くはないと思うが、ANSI C の方がいい
0014デフォルトの名無しさん
2009/11/19(木) 20:01:53このようなコードを見ました。
関数ポインタ宣言にtypedefをくっつけてるのはどういった意味があるのでしょうか?
この関数ポインタ型は、ある関数にコールバック用引数として渡されていました。
その際の表記は sqlite3_callback16 xCallbackです。
0015デフォルトの名無しさん
2009/11/19(木) 20:06:06その型に別名を付ける
typedef int foo;
とすれば、foo は int の別名になる
typedef int *bar;
とすれば、bar は int* の別名になる
typedef int (*sqlite3_callback16)(void*,int,__wchar_t**, __wchar_t**);
とすれば、 sqlite3_callback16 は int(*)(void*,int,__wchar_t**,__wchar_t**) の別名になる
0016デフォルトの名無しさん
2009/11/19(木) 20:11:08使用頻度が低いってこと。
0017デフォルトの名無しさん
2009/11/19(木) 20:15:36まじ?
0018デフォルトの名無しさん
2009/11/19(木) 20:19:21ポインタを使えなくてもプログラムは十分書けるだろ
0019デフォルトの名無しさん
2009/11/19(木) 20:21:14素人は割り込みのイベントコードを見て|||||||||||||||||||||||||||||||||||||||
いったいどれくらい一行を長くするのか、ってくらい繋げるが
こんなの関数ポインタ使えばビットシフトするだけで済む。
0020デフォルトの名無しさん
2009/11/19(木) 20:24:20ふざけるな
タマ落としたか
ビットシフトとアセンブラはプログラマに必須である。
短いコード、速いコードを書くのがプログラマ
それを求めないやつは全部アプリコーダーである
0021デフォルトの名無しさん
2009/11/19(木) 20:25:51ありがとうございます。
typedefの役割については存じていましたが、>14の表記ですと、
intの別名が(*sqlite3_callback16)(void*,int,__wchar_t**, __wchar_t**) になるのではないかと
考えていました。
0022デフォルトの名無しさん
2009/11/19(木) 20:31:32ググってみるとそれらしき解説が出てきました。重ねてありがとうございました。
0023デフォルトの名無しさん
2009/11/19(木) 20:49:260024デフォルトの名無しさん
2009/11/19(木) 21:08:010025デフォルトの名無しさん
2009/11/19(木) 22:08:31バグかと思って修正してもいくらやってもむりそうなんですが。
0026デフォルトの名無しさん
2009/11/19(木) 22:10:58でもdeleteしたとたんに終了します
0027デフォルトの名無しさん
2009/11/19(木) 22:16:09そのとおり。
ビットシフトとアセンブラ使えば、フィボナッチ数列の1000番目だってあっという間。
0028デフォルトの名無しさん
2009/11/19(木) 22:30:37>>25
一般的には無理。
割と簡単なのがnewすると同時にshared_ptrに入れて、それをやりとりすること。
shared_ptrがうまいことやってくれる。
共に同じコンパイラの同じバージョンなら、
双方で共通して使えるHeapAllocなどを使ってoperator new、operator deleteを定義するという手も可能だろうが面倒。
0029デフォルトの名無しさん
2009/11/19(木) 22:53:16ほとんど初心者なので知識がさっぱりです
助けてください
問題
入力した5個の名前を整列して表示する
やり方は名前を配列に格納した後
各配列の先頭アドレスに対するポインタ配列の要素を入れ替える整列方法
[使用ポインタ配列]
char *pt_name[5]
0030デフォルトの名無しさん
2009/11/19(木) 22:54:27ここまではできているのですが
動かなくて困っています
#include <stdio.h>
int main(void)
{
char *pt_name[5],name[5][256];
int i,j,w;
printf("名前を2つ入力してください");
for(i=0;i<5;i++)
scanf("%s",name[i]);
pt_name[i] = name[i];
printf("整列結果\n");
for(i=0;i<5;i++){
for(j=0;j==NULL;j++){
if(name[i][j]<name[i][j+1])
w = *pt_name[i];
*pt_name[i] = *pt_name[i+1];
*pt_name[i+1] = w;
}
}
}
return(0);
0031デフォルトの名無しさん
2009/11/19(木) 23:03:310032デフォルトの名無しさん
2009/11/19(木) 23:05:040033デフォルトの名無しさん
2009/11/19(木) 23:09:45それを承知でお願いしています
お願いします
ちょっと手直ししたヤツです
#include <stdio.h>
int main(void)
{
char *pt_name[5],name[5][256];
int i,j,w;
printf("名前を2つ入力してください");
for(i=0;i<5;i++)
scanf("%s",name[i]);
pt_name[i] = name[i];
printf("整列結果\n");
for(i=0;i<5;i++){
for(j=0;j==NULL;j++){
if(name[i][j]<name[i][j+1])
w = *pt_name[i];
*pt_name[i] = *pt_name[i+1];
*pt_name[i+1] = w;
}
}
for(i=0;i<5;i++)
printf("%s\n",*pt_name[i]);
return(0);
}
0034デフォルトの名無しさん
2009/11/19(木) 23:16:10for(i=0;i<5;i++)
{
scanf("%s",name[i]);
pt_name[i] = name[i];
}
0035デフォルトの名無しさん
2009/11/19(木) 23:21:04問題の意味がよくわからん
0036デフォルトの名無しさん
2009/11/19(木) 23:21:55指定された実行結果は?
0037デフォルトの名無しさん
2009/11/19(木) 23:31:41以下のワーニングをとりたいんですが、どうしてもとることが出来ません。
関数の宣言の引数の型と呼び出す際の型はあっています。
(unsigned short型です)
どのような原因が考えられますでしょうか?
よろしくおねがいします。
warning: passing arg 1 of `関数名' with different width due to prototype
0038デフォルトの名無しさん
2009/11/19(木) 23:33:000039デフォルトの名無しさん
2009/11/19(木) 23:41:28あってないよって言ってるみたいだけど
0040デフォルトの名無しさん
2009/11/19(木) 23:47:15C:\LSIC86\de-da>TEST
u?aOe≡eQe┬o?u?e?e─e!e?e│eomikan ringo suika remon banana
E≪u±iie?
%s
%s
%s
%s
%s
NULL pointer assignment
-- Press any key to exit (Input "c" to continue) --
もうだめです
意味が分からなくなってきました
0041デフォルトの名無しさん
2009/11/19(木) 23:52:195つ名前を入力して、それを順番に並べるだけでいいんだな?
0042デフォルトの名無しさん
2009/11/19(木) 23:57:000043デフォルトの名無しさん
2009/11/19(木) 23:57:26そうです
0044デフォルトの名無しさん
2009/11/19(木) 23:58:06ポインタを使います
0045デフォルトの名無しさん
2009/11/20(金) 00:04:45#include <stdio.h>
int main(void)
{
char name[5][30], *pt_name[5];
int i=0;
printf("名前を入力\n");
for(i=0;i<5;i++)
{
pt_name[i]=&name[i][NULL];
scanf(" %s", pt_name[i]);
}
puts("名前を表示");
for(i=0;i<5;i++)
{
printf("%s\n", pt_name[i]);
}
return 0;
}
0046デフォルトの名無しさん
2009/11/20(金) 00:06:090047デフォルトの名無しさん
2009/11/20(金) 00:15:10int main (vpod){
char buf[256];
char name[5][256];
char w;
int i,j;
for (i = 0; i < 5 ; i++){
printf("5回入力\n");
fgets(buf, sizeof(buf),stdin);
sscanf(buf, "%s", name[i]);
}
for(i=0;i<5;i++){
for(j=0;j=='\n';j++){
if(*name[i] < *name[j])
w = *name[i];
*name[i] = *name[j];
*name[j] = w;
}
}
for(i=0;i<5;i++){
printf("%s\n",name[i]);
}
return(0);
}
ほらよ
0048デフォルトの名無しさん
2009/11/20(金) 00:15:46f(x)=ln(x)-0.25*x=0 の2つの解を求めるプログラムを作成せよ。
こんな問題が出たのですが、何回やってもできません!!
どなたか教えてください
0049デフォルトの名無しさん
2009/11/20(金) 00:16:05インデントや修正するんだぞ。。
0050デフォルトの名無しさん
2009/11/20(金) 00:19:590051デフォルトの名無しさん
2009/11/20(金) 00:21:24ありがとうございます!!
これからは自分でできるようがんばってみます!!
0052デフォルトの名無しさん
2009/11/20(金) 00:23:29ソートが出来てなかった
strcomp使うの忘れてた
補完しといてくれ・・
0053デフォルトの名無しさん
2009/11/20(金) 00:23:31プゲラ
0054デフォルトの名無しさん
2009/11/20(金) 00:24:25#include<stdio.h>
#include<math.h>
int main(void){
double x,y;
double h=0.1;
double f(double x);
{return log(x)-0.25*x;}
for(x=0.5;x<15;x+=h){
printf("x=%9f,y=%10f\n",x,y=f(x));
if(y>0)h=1.0;
}
return 0;
}
こんな感じでやったんですけど出来ませんでした!!
0055デフォルトの名無しさん
2009/11/20(金) 00:24:54>>51
ソートの処理は
ttp://www1.cts.ne.jp/~clab/hsample/Point/Point13.html
みてstrcmpを付け加えればおk
0056デフォルトの名無しさん
2009/11/20(金) 00:35:242進数を入力しそれから10進数、16進数にしろって課題が出されたんですが
わかりません
わかりますか?
0057デフォルトの名無しさん
2009/11/20(金) 00:40:540058デフォルトの名無しさん
2009/11/20(金) 00:41:560059デフォルトの名無しさん
2009/11/20(金) 00:46:470060デフォルトの名無しさん
2009/11/20(金) 00:54:500061デフォルトの名無しさん
2009/11/20(金) 01:05:47http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10138.txt
何を2次元配列にすればいいかわかりません
0062デフォルトの名無しさん
2009/11/20(金) 01:39:35いろいろ突っ込む所があるが
まずニュートン法を理解していない
0063デフォルトの名無しさん
2009/11/20(金) 04:47:370064デフォルトの名無しさん
2009/11/20(金) 14:39:530065デフォルトの名無しさん
2009/11/20(金) 14:41:230066デフォルトの名無しさん
2009/11/20(金) 14:52:10処理系で定義されてることが保証されてる
0067デフォルトの名無しさん
2009/11/20(金) 17:13:32戻り値はfreeするかreallocするしかないけどそれらの引数に使えるのは間違いない
0068デフォルトの名無しさん
2009/11/20(金) 17:19:570069デフォルトの名無しさん
2009/11/20(金) 17:21:01それだけでオチる
0070デフォルトの名無しさん
2009/11/20(金) 17:25:340071デフォルトの名無しさん
2009/11/20(金) 17:28:340072デフォルトの名無しさん
2009/11/20(金) 17:29:09ptrが空ポインタの場合,何もしない。
0073デフォルトの名無しさん
2009/11/20(金) 17:47:38おちるね。特に古いWindowsでは。
0074デフォルトの名無しさん
2009/11/20(金) 18:22:200075デフォルトの名無しさん
2009/11/20(金) 18:29:53いつの話してんだお前は。
古いシステム持ち出すなら、HP-UX だって落ちてたわい。
0076デフォルトの名無しさん
2009/11/20(金) 18:55:22うそをいうな。 MS-C 5.10 の頃にはすでに free(0) は no operation になっている。
0077デフォルトの名無しさん
2009/11/20(金) 19:10:160078デフォルトの名無しさん
2009/11/20(金) 19:11:35メモリ操作するときのポインタはNULLクリアしとけっていった。
0079デフォルトの名無しさん
2009/11/20(金) 19:26:06C free(NULL); //基本的にはOKな方向なんだが、
古いライブラリではそうとも限らないので、こういうつまらんことが原因で古いライブラリな処理系で動作しないことがないように
freeする前にNULLかどうかチェックしてから行ってあげて
0080デフォルトの名無しさん
2009/11/20(金) 19:27:060081デフォルトの名無しさん
2009/11/20(金) 19:33:27ptr == NULL なのがプログラムの設計として
まずい兆候なんだが
規格でどーこー言う前に
0082デフォルトの名無しさん
2009/11/20(金) 19:35:14確保したのかしてないのか不明の場合もあり得る。
0083デフォルトの名無しさん
2009/11/20(金) 19:39:34だれからそんな妄想を習ったのだ。
そもそもCのfreeやC++のdeleteがなぜぬるぽの時何もしない仕様になったかといえば
ぬるぽの時にわざわざ分岐を書かなくてすむという現場の要請があったからなのだ。
0084デフォルトの名無しさん
2009/11/20(金) 19:47:21それが絶対ダメとか聞こえる耳なら他からも変な妄想をいっぱい貰ってそうな「まずい兆候」だな
0085デフォルトの名無しさん
2009/11/20(金) 19:49:35だれからそんな妄想を(以下略)。
Effective C++でさえ、普通に delete 0 やってるぞ?ん?
それともお前の読んでいる本では「まずい兆候」なのか?
0086デフォルトの名無しさん
2009/11/20(金) 19:52:42そうすればみんな納得^^
0087デフォルトの名無しさん
2009/11/20(金) 19:54:050088デフォルトの名無しさん
2009/11/20(金) 20:01:12誰かから習ったり、本から読んだって前提はどこから出てきた?
この時点でものすごく「まずい兆候」をおまえらに感じるぞ
0089デフォルトの名無しさん
2009/11/20(金) 20:03:49>そもそも free(ptr); の時点で
>ptr == NULL なのがプログラムの設計として
>まずい兆候なんだが
となる具体的な事例を知りたいだけですよ^^
別にあなたの意見を否定はしていませんです
むしろよろしくお願いしますと頭を下げる勢いm^^m
0090デフォルトの名無しさん
2009/11/20(金) 20:07:090091デフォルトの名無しさん
2009/11/20(金) 20:09:37ここで具体例を示すことに価値を感じない
頭が悪すぎるのか、そんな段階ではないのか、いずれにしてもね
0092デフォルトの名無しさん
2009/11/20(金) 20:13:23もしかして、知らないだけでしょ? ^m^クスクス
0093デフォルトの名無しさん
2009/11/20(金) 20:14:440094デフォルトの名無しさん
2009/11/20(金) 20:25:14お前ら頭が悪すぎる、そんなものに教える価値は感じない
何しにきてるんだろう?
0095デフォルトの名無しさん
2009/11/20(金) 20:28:170096デフォルトの名無しさん
2009/11/20(金) 21:01:50証拠はないけどこれは事実。
こういう考えなんだろ
0097デフォルトの名無しさん
2009/11/20(金) 21:44:11誰もそんなこと書いてないのに。
0098デフォルトの名無しさん
2009/11/20(金) 21:46:090099デフォルトの名無しさん
2009/11/20(金) 21:51:110100デフォルトの名無しさん
2009/11/20(金) 21:58:10アドレスを指し示す変数のアドレスだろ。
0101デフォルトの名無しさん
2009/11/20(金) 22:04:10整数を入れておくための変数だろ
みたいな言い方だな
0102デフォルトの名無しさん
2009/11/20(金) 22:17:370103デフォルトの名無しさん
2009/11/20(金) 22:20:10pの内容は、アドレスを指し示す変数のアドレスだな。
0104デフォルトの名無しさん
2009/11/20(金) 22:21:51こういうのが回りにいたらうざすぎるwwwwwww
0105デフォルトの名無しさん
2009/11/20(金) 22:28:03職場にいたらうざすぎるwwwwwwwwwww
0106デフォルトの名無しさん
2009/11/20(金) 22:31:080107デフォルトの名無しさん
2009/11/20(金) 22:31:32アドレスのアドレス、はあり得ない。
→
アドレスの入ってる変数のアドレス、はあり得る。
0108デフォルトの名無しさん
2009/11/20(金) 22:48:01たとえば
〜〜それ以上でも以下でもない
とかいう決まり文句に対して
以上でも以下でもないなんてことはありえない!
とかいちいちいってそう。キモッ
0109デフォルトの名無しさん
2009/11/20(金) 22:57:23「まずい兆候」を妄想と言い切った
おまけに教員か本しか情報源が思い当たらない
決定打で他の人がヒントっぽいことを書いてくれているのが通じていない
どこの現場のためか知らんが、こーゆーバカの矯正をぶっ叩けないところからボランティアでやれって?
お断りだ、何を言っても変に妄想されるだけで草臥れ儲けだからな
# スレ違いだが delete に new が返したものではない値(しかも整数)を平気で書ける神経が全く理解しがたい
# それこそどこの本に書いてあったのか、誰に習ったのか、謎なんだが
0110デフォルトの名無しさん
2009/11/20(金) 22:57:46じゃあどうして僕たちは膨張しないの? 教えてせんせー
0111デフォルトの名無しさん
2009/11/20(金) 23:00:090112デフォルトの名無しさん
2009/11/20(金) 23:00:47この空間、僕たち全ては宇宙にある物質だよね?
ちがうの?
0113デフォルトの名無しさん
2009/11/20(金) 23:01:56俺らも膨張してる
ただ俺らの体は宇宙に比べてものすごい小さいから感じないだけ。
あと何十億年もたったら物質は膨張しすぎてバラバラになるよ
0114デフォルトの名無しさん
2009/11/20(金) 23:03:01そうなんだー!
でも数十億年先は、僕は生きていないからどうでもいいや。
ありがとう。
0115デフォルトの名無しさん
2009/11/20(金) 23:18:22Windowsに標準で入ってないの?
0116デフォルトの名無しさん
2009/11/20(金) 23:20:31コンパイラいらずだよ
まったくいい世の中になったもんだ
0117デフォルトの名無しさん
2009/11/20(金) 23:30:41ちょっとしたことやりたいだけなのに
フォルダの中が.hだか.cだかくだらんテキストファイルとexeで埋め尽くされなくてもテストできて便利だの
0118デフォルトの名無しさん
2009/11/20(金) 23:33:39wsh jscript
0119デフォルトの名無しさん
2009/11/20(金) 23:34:47ファイル操作とかしないのか?
0120デフォルトの名無しさん
2009/11/20(金) 23:40:310121デフォルトの名無しさん
2009/11/20(金) 23:44:220122デフォルトの名無しさん
2009/11/20(金) 23:59:04で、なんでそんな上から目線で回答しないやつが入門編スレにいるの?
バカなの?死ぬの?
0123デフォルトの名無しさん
2009/11/21(土) 00:01:32それもわざわざageてまで
0124デフォルトの名無しさん
2009/11/21(土) 00:15:56初心者質問者なのにやたら偉そうなやつ
やたら細かくてどうでもいいことまで指摘しないと気がすまないやつ
入門スレだから初心者が多いと思われる他人をバカにして楽しむやつ
ただ質問に答えまくるロボットくん
宇宙の話とかプログラミングやC言語とはほとんど関係ない話をしたがるやつ
123みたいなメタバカ
0125デフォルトの名無しさん
2009/11/21(土) 00:17:54一つ抜け落ちているぞ
0126デフォルトの名無しさん
2009/11/21(土) 00:20:120127デフォルトの名無しさん
2009/11/21(土) 00:20:370128デフォルトの名無しさん
2009/11/21(土) 00:22:030129デフォルトの名無しさん
2009/11/21(土) 00:22:14OS の定義
話はそれからだな。
0130デフォルトの名無しさん
2009/11/21(土) 00:22:590131デフォルトの名無しさん
2009/11/21(土) 01:01:15いちいちstructって書かないとダメで冗長でめんどくさいな。
C++のほうが良いな。
0132デフォルトの名無しさん
2009/11/21(土) 01:05:08typedef
0133デフォルトの名無しさん
2009/11/21(土) 01:05:29つtypedef
0134デフォルトの名無しさん
2009/11/21(土) 01:09:52freeで開放しなかったらどうなんの?
アプリケーションが終了してもそのメモリ領域は使用不能になるの?
0135デフォルトの名無しさん
2009/11/21(土) 01:13:230136デフォルトの名無しさん
2009/11/21(土) 01:17:03へぼOSではあり得るかもしれんが、実物は知らない。
0137デフォルトの名無しさん
2009/11/21(土) 01:21:16アプリの責任範囲外
0138デフォルトの名無しさん
2009/11/21(土) 02:23:18一部の古い処理系ではNULLは定数ではなくmalloc書き込み専用変数
だった。(一般は参照のみ可)
古い話なんで細かいことは省略するが、プログラムのモジュール通信
の為だけに特権的な値を設定することなど貴重なアドレス空間の無駄
遣いでタブーという時代の要請としておく
freeはNULLを参照しないで機械的にブロック解放を行うので
間違った値を与えると確実にヒープを壊しプログラムは早晩落ちた。
0139デフォルトの名無しさん
2009/11/21(土) 02:47:26> malloc書き込み専用変数
すらわけわからん。
0140デフォルトの名無しさん
2009/11/21(土) 03:00:05昔のシステムはヒープが空になったタイミングで拡張/縮小の
為に移動しなければならなかったりとかいろいろと複雑な
ものがあったね。こういった場合はNULL値の定義は難しい。
0141デフォルトの名無しさん
2009/11/21(土) 03:18:480142デフォルトの名無しさん
2009/11/21(土) 05:52:09ハードウェアに近い低レベル処理を記述する場合はいろいろと注意が
必要なのかも
けど新しめな環境やOS上のプログラミングでは多分完全OK
C++では予約語では無いみたいだが、主導権すら得ているし
完全にスレ違いではあるがJavaではnull無しではプログラムに
ならないくらいの重要な予約語だし
こういう理解でいいのかな?
0143デフォルトの名無しさん
2009/11/21(土) 07:39:48多分とかかもとか言ってないで、規格票よみゃいいだけ。
0144デフォルトの名無しさん
2009/11/21(土) 10:37:00nullポインタなんて用語は規格票を読んでも登場しない
低レベル処理では 0 番地に何かあり、そこを指し示すポインタを有効なポインタとして使う場合がある
しかし、そこでも NULL は 0 だ
メモリコンパクションは、それが起きる機会と、その機会を経たポインタを更新する方法が明確化されているが
そのような環境でも NULL は 0 で十分に機能していた
空ポインタのビット列が 0 でない処理系は実在したらしいが、俺はその時代を生きていないので
昨晩のバカのように本から読んだことしか語れない
# C++ ではどっこい現役だけどね
0145デフォルトの名無しさん
2009/11/21(土) 14:42:07書かれてるベースアドレスからの相対アドレスだから
その上のC言語においてNULLをmallocの無効アドレス
戻り値として解釈定義する限り0は不合理とまでは
言わないが、大抵の場合例えば-1(0xFFFFFFFF)とか
負の整数で定義するほうが、CPUのせっかくの保護
機能を生かせることになる。
0146デフォルトの名無しさん
2009/11/21(土) 15:06:330147デフォルトの名無しさん
2009/11/21(土) 15:08:36言語としてNULLはリターンするとかの決まりだろ。
0148デフォルトの名無しさん
2009/11/21(土) 15:12:14何いってんだか
null constantは0または(void *)0だよ
0149デフォルトの名無しさん
2009/11/21(土) 15:43:11struct st {
const char *name;
int age;
};
struct st list[] =
{
{"Lucy", 13}, {"Tom", 17}, {0, 0}
};
このように、リストの最後に番兵な構造体{0, 0}を置いて
struct st *st = list;
for (;;) {
if (st->name && st->age) {
// 処理
}
else
break;
list++;
}
こんな感じで動いているのですが、他にいい方法はありますか?
一応 sizeof(list)/sizeof(struct st)で配列の要素数を求めることも出来ますが
納得できません。
よろしくお願いします。
0150デフォルトの名無しさん
2009/11/21(土) 15:45:51list++ ではなく st++ の間違えです。
脳内変換お願いします。
0151デフォルトの名無しさん
2009/11/21(土) 15:48:370152デフォルトの名無しさん
2009/11/21(土) 15:51:17すみません、誤爆しました。
C言語のスレだと思っていました。移動します。
0153デフォルトの名無しさん
2009/11/21(土) 15:58:340154デフォルトの名無しさん
2009/11/21(土) 16:00:22ここC言語の質問すれだ(笑)
ところで STL Vector って何ですかね。
検索しても C++ しか出てこない(C++は未経験)
Cにも STL Vector ってあるのでしょうか。
0155デフォルトの名無しさん
2009/11/21(土) 16:07:09cstl-0.6.2.zip
0156デフォルトの名無しさん
2009/11/21(土) 16:19:160157デフォルトの名無しさん
2009/11/21(土) 16:27:00自己参照構造体とは何ぞや?
と思って調べたら連結リストで使うものですか。
実は、自分の書いたコードではなく、オープンソースプログラムを改編しているのです。
配列でデータ構造が表現されているので、それに従うしかありません。
ちなみに、僕は、あまりC使いな人ではありません。
で、ライブラリ関数とか見てみると、番兵法使っているものも結構あるのでこのままでいこうと思います。
ありがとうございました。
0158デフォルトの名無しさん
2009/11/21(土) 16:39:06P *p;
}
ってやつか
0159デフォルトの名無しさん
2009/11/21(土) 16:52:58同じようにやれば良いだろ。
0160デフォルトの名無しさん
2009/11/21(土) 16:54:19ボードゲームのAIについて勉強していて、ゲーム木とα-β法というアルゴリズムを利用しているのですが
ソースコード内に特にランダムな値を利用しているわけではないのにプログラム同士の対戦結果が毎回違うのに悩んでいました。
勝手な予想ですが、おそらくゲーム木を再帰的に探索する途中に探索する順序が違うとα-β法によりゲーム木のサブツリーのカットの仕方が違うため違う結果がでるのではないかと考えました。
そこで、探索する順序を一定にするためにスタックコールで呼び出す関数の順序を設定したいのですが、C言語でそのような操作はできるのでしょうか?
0161デフォルトの名無しさん
2009/11/21(土) 17:11:18ツリーをたどるときに、どの枝をたどっているかを出力させればいいだけじゃね?
カットする時にも、どの枝をカットしたかを(評価関数の出力も含めて)出せばいい。
ちなみに、シングルスレッドで組んでいるのなら毎回結果が違うのはバグであるとしか思えない。
初期化されていない変数使ったとか、バッファオーバーランしたとかの。
0162デフォルトの名無しさん
2009/11/21(土) 17:14:21(そもそもランダムな順序で探索するようにはしてないと思うけど)
0163デフォルトの名無しさん
2009/11/21(土) 17:26:22はやく死ねよ
0164デフォルトの名無しさん
2009/11/21(土) 17:29:14シングルスレッドなのですがフリーのチェスプログラムなので恐らくバグではないと思います。
ランダム以外で違う出力になる要因て他に何かあるのでしょうか?
情報が少ないので答え難いとおもいますが
こちらから出してほしい情報がありましたらなんでも聞いてください
0165デフォルトの名無しさん
2009/11/21(土) 17:41:54それなら負荷状態によっても結果が変わる。
0166デフォルトの名無しさん
2009/11/21(土) 17:42:130167デフォルトの名無しさん
2009/11/21(土) 17:44:080168デフォルトの名無しさん
2009/11/21(土) 17:45:07わかりやすくコーディングされてはいるんですが、労力をかけてしまうので、そこまでは結構です^^;
0169デフォルトの名無しさん
2009/11/21(土) 18:55:17struct a {
char b[0];
};
の時sizeof(struct a)が4になるのは正しい言語仕様なのでしょうか?
gcc 4.2.1では期待通り0になりました。
0170デフォルトの名無しさん
2009/11/21(土) 19:03:51このへんは環境依存
0171デフォルトの名無しさん
2009/11/21(土) 19:04:460172デフォルトの名無しさん
2009/11/21(土) 19:10:130173デフォルトの名無しさん
2009/11/21(土) 19:15:190174toya
2009/11/21(土) 20:11:18このサイトもテンプレ入れてくれないか。
できれば編集も手伝ってくれ。
0175デフォルトの名無しさん
2009/11/21(土) 20:12:29悪かったな
アセンブラ作ってるよ
0176デフォルトの名無しさん
2009/11/21(土) 21:12:410177デフォルトの名無しさん
2009/11/21(土) 22:12:00キモ
0178デフォルトの名無しさん
2009/11/22(日) 03:56:55#include<stdio.h>
int count_bits(unsigned x) /*1.もしかしてここにも下で入力したnxがくるんですか?*/
{ int count=0;
while (x){ if(x&1U) count++; x>>=1; } /*2.ここのwhile分の終了条件は非xだと思うのですがこれはどのように終了してるのでしょうか?*/
return(count); /*3.ここでunsigned型が32ビットなので1が32桁で32が返されるのでしょうか?*/
}
int int_bits(void)
{ return(count_bits(~0U)); }
void print_bits(unsigned x) /*4.←ここに下で入力したnxがきますよね?*/
{
int i;
for(i=int_bits()-1;i>=0;i--)
putchar(((x>>i)&1U)?'1':'0');
}
int main(void)
{
unsigned nx;
printf("非負の整数を入力してください");
scanf("%d",&nx);
print_bits(nx);
putchar('\n');
return(0);
}
ラインの関係上見づらくて本当にすみませんしかも質問の意味も糞みたいにわかりづらいですね当方も聞きたいことすらよくわからなくなっている状態ですorzなんとか読み取ってくださると幸いです。
0179デフォルトの名無しさん
2009/11/22(日) 04:00:390180デフォルトの名無しさん
2009/11/22(日) 04:11:322.継続条件はxが非ゼロ。逆に言えばxがゼロにるのが終了条件。
3.xに入ってる数を2進法で表したときの1の数をが返される。0から32のいずれかの数。
4.うん。
0181デフォルトの名無しさん
2009/11/22(日) 05:29:240182デフォルトの名無しさん
2009/11/22(日) 05:36:170183デフォルトの名無しさん
2009/11/22(日) 05:38:19きっとできる。液晶ディスプレイめがけて
適当な重いものを思いっきり投げつけるんだ
バットでも、バイルでもいい
0184デフォルトの名無しさん
2009/11/22(日) 05:41:11業界標準の方法
printf("%c[2J",0x1b)
これでうまくいかなかったら
マニュアルなり資料なり参照しなければムリ
もしかして出来ない場合もあるかも
0185178
2009/11/22(日) 09:42:40本当にありがとうございます。3番がよくわからないのですが
>>xに入ってる数を2進数で表したとき
このときxにはなにがはいってるのでしょうか?末尾にUをつけたときには2進数になるとは書いていないんですがどこで二進数で表すようになるのでしょうか?
#include<stdio.h>
int count_bits(unsigned x)
{
int count=0;
while (x){
if(x&1U) count++;
x>>=1;
}
return(count); /*下の1111111111....の1の数がそのままここにくると思ったのですが・・・
}
int int_bits(void)
{
return(count_bits(~0U)); /*ここは0を反転させたものなので1111111111...となるのではないでしょうか?*/
}
void print_bits(unsigned x)
{
int i;
for(i=int_bits()-1;i>=0;i--)
putchar(((x>>i)&1U)?'1':'0');
}
理解力がなく大変申し訳ない。すみませんがもう少しおつきあいください。
0186デフォルトの名無しさん
2009/11/22(日) 11:47:47環境によっては,unsignedが16bitとかの時もあるし
0187デフォルトの名無しさん
2009/11/22(日) 12:17:49cls
0188デフォルトの名無しさん
2009/11/22(日) 12:19:25バッチファイルww
0189デフォルトの名無しさん
2009/11/22(日) 12:28:24Stringクラスを作っています。
関数や演算子は色々と省いてありますが、
このコードについて批評をお願いします。
0190189
2009/11/22(日) 12:30:09{
boost::shared_array<wchar_t> _base;
public:
String()
{
wchar_t *bs = new wchar_t[1];
bs[0] = L'\0';
_base = boost::shared_array<wchar_t>(bs);
}
String(const wchar_t *wArray)
{
int len = wcslen(wArray) + 1;
wchar_t *bs = new wchar_t[len];
wmemcpy_s(bs, len, wArray, len);
_base = boost::shared_array<wchar_t>(bs);
}
String(String &cpy){ this->_base = cpy._base; }
~String(){}
public:
int Count() { return wcslen(_base.get()); }
wchar_t* GetData() { return _base.get(); }
String Substring(int index, int length)
{
wchar_t* copyTo = new wchar_t[length + 1];
wmemcpy_s(copyTo, length, _base.get() + index, length);
copyTo[length] = L'\0';
return String(copyTo);
}
};
0191189
2009/11/22(日) 12:31:15{
setlocale(LC_ALL, "");
String s = L"Stringクラスです。";
wprintf(L"%s, count = %d, sizeof = %d\n", s.GetData(), s.Count(), sizeof(s));
String substr = s.Substring(6, 3);
wprintf(L"Substring: %s, count = %d\n", substr.GetData(), substr.Count());
getchar();
return 0;
}
http://codepad.org/y60w7ej7
コンセプトとしては、
Substringなどの文字列操作の関数は中のwchar配列を変更せず、
新しく文字列を作って返すという感じで。
なるべくshared_ptrをmain関数の中とかで使いたくないので、
今はStringインスタンスを値型で返しているのですが・・・
オーバーヘッドとかはどうなんでしょうか。
設計的問題、凡ミス、ハァ?なこと、
どんなことでもいいので指導してください。お願いします。
0192デフォルトの名無しさん
2009/11/22(日) 12:35:17#<stdlib.h>
system("cls");
か
#<conio.h>
clrscr();
かな。
0193189
2009/11/22(日) 12:41:000194デフォルトの名無しさん
2009/11/22(日) 12:44:36クラス名は WString とかにしたほうがいいんじゃない?
wchar用のstringクラスを作りたかったんだよね
SubString()は、引数のエラーチェックをしたほうがいい
マイナスとかMAXINTは指定されたくないでしょう
0195デフォルトの名無しさん
2009/11/22(日) 12:51:23,.―― 、
// \\
. / ./ \\
/ ′ ,. -―――- 、 \ % %ェ %%%%%■%%〓%%ャ %ェ … .
\ :! /: :/l ∧: : :∧: ヘ\/ .%%■% %ェ %¨ ∵% %ェ ・
. \|/: :�W 廴__,\/、__ノ:�Y %% %%%% ¨%%%%%%%■■〓%%%%
/ |:r|: | r=ミ r=ミl:| %%%%%%%%%■〓%% %% ∴ %ェ .
. _/: : :{.|: | xxx ' xxx リ %%%%%%%%%%% %ェ ∴ ….% %%
.. __,/: :_:./:/:ハ:ゝ )%%%%%%%%%%%%%%% %ェ %%%%%
.. |: : : : :/__ /:/:/: \`ヘー一ァ::i"|Y:\ ¨ %%%■%%% %ェ ∴‥
0196デフォルトの名無しさん
2009/11/22(日) 12:56:47最下行の文字列だけ書き換わるような表示ってどうやったらできるんですか。
>■インストール中 ===-> [69%]
みたいな。
0197デフォルトの名無しさん
2009/11/22(日) 13:01:13Linuxならcursesでググってみて。
環境依存OKスレがオーバーフローしているけど、誰かnewしないかな。
0198デフォルトの名無しさん
2009/11/22(日) 13:13:530200デフォルトの名無しさん
2009/11/22(日) 13:41:52'\r'
0201デフォルトの名無しさん
2009/11/22(日) 13:47:54たいていの場合、^H(0x08)で1文字戻すか、
^M(0x0d)で行頭に戻しているだけ
cursesとかtermcapとかは、正しく端末設定されて、かつ
設定ファイルが揃ってないと使えないので、OS起動時とかは
決め打ちでやることが多い
0202デフォルトの名無しさん
2009/11/22(日) 13:54:19@echo off
setlocal
set /a i = 0
:loop
set str=%str%*
set /a i += 5
cls
echo インストール中...[%i% %%] %str%
timeout /t 1 /nobreak > nul
if "%i%" == "100" goto endloop
goto loop
:endloop
echo 完了
pause
endlocal
0203デフォルトの名無しさん
2009/11/22(日) 13:57:09linuxって言ってんのに
0204デフォルトの名無しさん
2009/11/22(日) 16:05:33立てたよ
【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/l50
0205デフォルトの名無しさん
2009/11/23(月) 00:44:20朝から昼飯や夕飯も惜しんで葛藤してるものなんですが
wchar.hのfopen_s関数の使い方がよく判りません。
特に、fopen_s関数の第一引数がなんで二次ポインターなのか
教えて頂きたいです。そして、複数のUNICODEにエンコードされた
ナンバーのついたファイルを効率よくバファリングするのに
二次ポインターを使った方が後々不備が出ない設計になると思い
四苦八苦してるところです。つまり、fopen_s関数の第一引数のアクセス権も
把握しかつ自分の論理的思考によりポインターを細分化していくような労力が必要になります。
void openstream(int min,int max,char *p1){
FILE *file[MAXSIZE];
int i;
char copy[30];
char str[30];
char p2[150];
errno_t err;copy[0]='\0';str[0]='\0';p2[0]='\0';
for(i=0;i<(max-min)+1;i++){
strcpy(p2,p1);
sprintf(str,"%d",(i+min));
strcpy(copy,"\\単語");
strcat(copy,str);
strcat(copy,".txt");
strcat(p2,copy);
if( (err= fopen_s(&fp3[i],p2, "rb,ccs=UNICODE" ))!=0)
exit(1);
}
}
}
0206デフォルトの名無しさん
2009/11/23(月) 00:52:30UNICODEの単語x.txtファイルを順に開いていくプログラムですが
fp3のポインターによりそれぞれの定型処理で、ストリームを
開いていってもFILE型で宣言が無意味なぐらい
爆発的に伸びる階数のように不規則な動きをします。
0207デフォルトの名無しさん
2009/11/23(月) 00:55:20ご指南の方をよろしくお願いします
0208デフォルトの名無しさん
2009/11/23(月) 01:01:33質問の内容についてはよく分かんないけど
こうしたほうが良くね?
strcpy(p2,p1);
sprintf(str,"%d",(i+min));
strcpy(copy,"\\単語");
strcat(copy,str);
strcat(copy,".txt");
strcat(p2,copy);
↓
sprintf(p2, "%s\\単語%d.txt", p1, (i+min));
0209デフォルトの名無しさん
2009/11/23(月) 01:32:10そうした方が見やすいといえば見やすいですね。
基本的に難しく書こうが、優しい書こうがfopen_s関数の
第一引数はなぜ二次ポインターになってるいるのか
謎が深まるばかりです。その理由は、一次ポインターや
二次ポインターなどマドろこしい理論は置いといて
fcloseやfflushしても、fopen_sでストリームを
複数回開くとまるでゴミのようなバファが出力されてきます。
それは元を辿れば自分がテキストファイルにより出力された物には
違いありませんが、まるで関数作成者のフラストレーションを
吐き出すかのようなオナニークラスです。正直データとして扱かえれません。
ちなみにいい忘れましたが、私の処理系はWINDOWS7で
Visual Studio 2009を使ってます。私の直感ですが、このfopen_sの
二次ポインターは関数ポインターで受け渡すか、FILEポインターで引き渡す
Elmentではないかのどちらかだと思います。いずれにしよ、一つ一つの
処理単位が違うと感じました。
0210デフォルトの名無しさん
2009/11/23(月) 01:38:310211デフォルトの名無しさん
2009/11/23(月) 01:40:09fopen_s(FILE** pFile, ...)になっているのは、そうしないと FILE* の
変数を更新できないから。
本当は成否のerrno_tとFILE*の2つの値を返したいけど、Cではそういう
ことはできないので片方をポインタにしてパラメータに置いている。
0212デフォルトの名無しさん
2009/11/23(月) 01:40:52そう不思議な仕様でもないだろ。
渡すためじゃなくて受け取るためだからアドレス参照渡しなんだぞ?
0213デフォルトの名無しさん
2009/11/23(月) 01:43:19関数内で FILE* file[] ってあるのに、fopen_s() に渡しているのは
fp3[i] だったりしてあやしい。
0214デフォルトの名無しさん
2009/11/23(月) 03:37:15int a[10]ってやったら
a[10]はないとかわかりづらい。
[1]からはじまればいいのに。
0215デフォルトの名無しさん
2009/11/23(月) 04:13:440216デフォルトの名無しさん
2009/11/23(月) 04:27:40それが嫌なら OPTION BASE 1 を指定してVBでも使ってろってこった
0217デフォルトの名無しさん
2009/11/23(月) 05:53:27そういうのが誉められる世界へ行けよ
0218デフォルトの名無しさん
2009/11/23(月) 08:12:31すいません。
if( (err= fopen_s(&fp3[i],p2, "rb,ccs=UNICODE" ))!=0)
じゃなくて・・・ ↑
if( (err= fopen_s(&file[i],p2, "rb,ccs=UNICODE" ))!=0)
ですよ。ソースからコピペする時にミスりました
テヘ
0219デフォルトの名無しさん
2009/11/23(月) 08:25:20アドレスの参照渡しですか!!!
fopen_s()が二次ポインターを要求してるから
三次ポインターを使えって事ですかw俺はC言語
仙人じゃないので判りません。ちなみに、マドロこしいの
嫌いだからFILE *file[MAXSIZE]は2ch転機上は
openstream()内で宣言してますが
実際に使うときはグローバル変数で使ってました。
三次元ポインターとか、敷居の高いことできるなんてさすが
C言語の世界を極めてた人は違いますね
0220デフォルトの名無しさん
2009/11/23(月) 08:59:510221デフォルトの名無しさん
2009/11/23(月) 09:35:57早々に見切りをつけて別の道を行った方が良い。
0222デフォルトの名無しさん
2009/11/23(月) 09:38:31int x;
int *p;
p=&x;
三次元だろうが参照だろうが全部これをちょっと形変えただけじゃん。
0223デフォルトの名無しさん
2009/11/23(月) 09:56:17おまえ分かってないだろww
0224デフォルトの名無しさん
2009/11/23(月) 11:42:09pのポインタ
**p
pのポインタのポインタ
***p
pのポインタのポインタのポインタ
何が難しいんだか
0225デフォルトの名無しさん
2009/11/23(月) 11:47:240226デフォルトの名無しさん
2009/11/23(月) 11:52:58アドレス10000に書いてました
xをみつけたいならアドレス20000を見ろ
アドレス20000に書いてました
xをみつけたいならアドレス30000を見ろ
アドレス30000に書いてました
xをみつけたいならアドレス40000を見ろ
アドレス40000に書いてました
xの値は0xABCDです。
0227デフォルトの名無しさん
2009/11/23(月) 11:55:370228デフォルトの名無しさん
2009/11/23(月) 12:02:01なんで理解できないのかは理解できないが、きっと適性が無いのだろう。
0229デフォルトの名無しさん
2009/11/23(月) 12:13:03おまえ解ってないじゃんw
0230デフォルトの名無しさん
2009/11/23(月) 13:57:14文法の法則性を理解するまでが小難しいんだよね
0231デフォルトの名無しさん
2009/11/23(月) 14:04:530232デフォルトの名無しさん
2009/11/23(月) 14:16:04車輪の再発明がどうのこうの言ってないで一回はやっとくべき
0233デフォルトの名無しさん
2009/11/23(月) 14:29:15言語も大事だけど、アルゴリズム(とデータ構造)はもっと大事だから勉強し
0234デフォルトの名無しさん
2009/11/23(月) 15:26:360235デフォルトの名無しさん
2009/11/23(月) 15:58:10どちらも頭から入らず、先ず慣れ親しんだほうが(経験則を多数集めたデータベースを作る)上達は早い
どちらも真の理解は非常に難しい。
0236デフォルトの名無しさん
2009/11/23(月) 16:16:590237デフォルトの名無しさん
2009/11/23(月) 16:36:160238デフォルトの名無しさん
2009/11/23(月) 17:27:06ただのint型をメモリアドレスを入れておく変数として使えるな。
その辺のプログラミング言語だとこんなに簡単にメモリアドレス使えないな。
Cは便利だな
0239デフォルトの名無しさん
2009/11/23(月) 18:03:46判断の材料が不足しており、これだけではなんとも。
0240デフォルトの名無しさん
2009/11/23(月) 18:05:14それは環境依存。その昔は sizeof(int)
0241デフォルトの名無しさん
2009/11/23(月) 18:06:01な環境もあった。MS-DOS の far とか。
0242デフォルトの名無しさん
2009/11/23(月) 18:09:35もちろん、今ならintptr_t/uintptr_tがあるんだけど。
0243デフォルトの名無しさん
2009/11/23(月) 18:52:26アキュムレータが8ビットだから8かな?
アドレスは16ビット使えたよな?
0244デフォルトの名無しさん
2009/11/23(月) 19:34:12どうかは保証できないよね
昔のワードマシンでは、バイトアドレスを指すために
ポインタは2つのデータ(ワードアドレスとオフセット)で出来てたらしいし
0245デフォルトの名無しさん
2009/11/23(月) 19:39:540246デフォルトの名無しさん
2009/11/23(月) 19:44:14でも mmap の返り値がエラーかどうか判定する場合みたいに
なんか気持ち悪いこともあるよね
0247デフォルトの名無しさん
2009/11/23(月) 19:52:47メモリを1バイトずつアクセスしたいならchar *、
他の言語とやり取りするなら十分なサイズの整数型…
便利。
0248デフォルトの名無しさん
2009/11/23(月) 20:27:37その文字列が10000まであって
プロンプトにコピペすると500くらいで入力できなくなる
どうしたらいい?
0249デフォルトの名無しさん
2009/11/23(月) 20:31:030250デフォルトの名無しさん
2009/11/23(月) 20:32:230251デフォルトの名無しさん
2009/11/23(月) 20:35:060252デフォルトの名無しさん
2009/11/23(月) 20:47:12そんなこともわかんねのかよ?
0253デフォルトの名無しさん
2009/11/23(月) 21:18:410254デフォルトの名無しさん
2009/11/23(月) 21:43:580255デフォルトの名無しさん
2009/11/23(月) 23:38:34返事遅れて本当に申し訳ございません
ありがとうございます。
int int_bits(void)
{
return(count_bits(~0U));
}
のどこにunsignedのビット数を割り出す要素があるのでしょうか?あとここだけなのでどうかおしえていただけないでしょうか
お願いします
0256デフォルトの名無しさん
2009/11/24(火) 00:15:35count_bitsでunsignedのビット数を数えてるでしょ
0257デフォルトの名無しさん
2009/11/24(火) 00:17:470258デフォルトの名無しさん
2009/11/24(火) 00:31:51たとえば
int x=10;としてintのサイズが4バイトであるとして
xが12345678というアドレスにあるなら
&xは12345678、12345679、1234567A、1234567B
の4つのアドレスを保存する。
実はポインタとはアドレスの配列だったのである。
0259デフォルトの名無しさん
2009/11/24(火) 00:42:50寝言は寝て言ってくれないか
0260デフォルトの名無しさん
2009/11/24(火) 00:58:470261デフォルトの名無しさん
2009/11/24(火) 01:01:16必要ないなら使わなくてもいいんだぜ
0262デフォルトの名無しさん
2009/11/24(火) 01:06:070263デフォルトの名無しさん
2009/11/24(火) 01:07:17ああ、C99の話か
0264デフォルトの名無しさん
2009/11/24(火) 01:11:35それは少なすぎだって
0265デフォルトの名無しさん
2009/11/24(火) 01:13:290266デフォルトの名無しさん
2009/11/24(火) 01:15:59その他は拡張として任意で実装で。
浮動小数も標準から外しておけばよかった。
0267デフォルトの名無しさん
2009/11/24(火) 01:23:57他に何があるのよ
_Boolと_Complexですか
0268デフォルトの名無しさん
2009/11/24(火) 01:48:25にあるのと同じと思われる現象が起こってしまいました
malloc関数の実行の時点でプログラムが止まってしまいます
戻り値を調べようにも、戻る前で動作がストップしている模様
どういった例外が考えられるでしょうか
win vistaでbcc 5.5です
0269デフォルトの名無しさん
2009/11/24(火) 01:52:130270デフォルトの名無しさん
2009/11/24(火) 01:57:06malloc(100)程度でNULLになるわけないから
if(NULL)省略していい?
0271デフォルトの名無しさん
2009/11/24(火) 02:03:18だめです
今すぐC言語から離れて下さい
0272デフォルトの名無しさん
2009/11/24(火) 02:05:42hoge()は実行されないんで、省略可
0273デフォルトの名無しさん
2009/11/24(火) 04:27:14// の後に何らかの関数、更にその後で
printf("%f", 10);
とやると、printfは両方とも異なる値を返します。
フォーマット指定子と引数の型が違うからおかしくなるってのは分かるんですが、
何故そういう動きになるのでしょうか?
0274デフォルトの名無しさん
2009/11/24(火) 06:48:24printf("%f", 10, 0);
でおk
0275デフォルトの名無しさん
2009/11/24(火) 07:19:31%fに対応する引数を読もうとして、10と一緒にスタック上のゴミも拾っちゃうんだろ。
返り値が変わるってのは、間の処理でたまたまそのゴミが変化してるんだろうな。
0276デフォルトの名無しさん
2009/11/24(火) 10:29:16その printf を呼び出しているブロックから抜け出るまで
スタックは詰みっぱなしにしておき、最後にまとめて解放
という処理系はあった
そのような処理系では1回目の printf と2回目の printf が
見ているメモリのアドレスが異なることになる
0277デフォルトの名無しさん
2009/11/24(火) 11:45:05%fで8バイトのデータをスタックから読み込む
しかし関数に渡しているのはint型の4バイトのみ
残りの4バイトの値は不定なので実行するたびに異なる値が出る
0278デフォルトの名無しさん
2009/11/24(火) 12:27:26戻り値が違う、ってことだろ?
printf の戻り値は書いた文字数だから、
表示が違えば戻り値も変わるの当たり前だろ。
printf("a") なら戻り値 1 だし、
printf("aa") なら戻り値は 2 だ。
0279デフォルトの名無しさん
2009/11/24(火) 12:57:430280デフォルトの名無しさん
2009/11/24(火) 13:53:37ワイド文字から整数を取り出すのにはどういった手順を
踏んだらいいか、教えてください。
main(){
int num;
wchar_t str[30];
FILE *fp;
errno_t err;
f( (err= fopen_s(fp,"samep01.txt", "rb,ccs=UNICODE" ))!=0)
exit(1);
fwscanf(fp,"%s %d",str,&num);
}
0281デフォルトの名無しさん
2009/11/24(火) 13:55:06fwscanf(fp,L"%s %d",str,&num);
これに訂正
0282デフォルトの名無しさん
2009/11/24(火) 13:56:080283273
2009/11/24(火) 14:11:42確かに表示も違いますが戻り値も異なりました!
0284デフォルトの名無しさん
2009/11/24(火) 18:58:22&抜けてたw
それは視野に入ってました
問題はワイド文字から整数をどうやって得るかです
0285デフォルトの名無しさん
2009/11/24(火) 19:03:300286デフォルトの名無しさん
2009/11/24(火) 19:25:53今どき16ビットマイコンとかないよ
0287デフォルトの名無しさん
2009/11/24(火) 19:31:550288デフォルトの名無しさん
2009/11/24(火) 19:32:020289デフォルトの名無しさん
2009/11/24(火) 19:40:09MSDNの関数の説明にはfwascanfでint型も格納できるみたいなことが書いてあります
0290デフォルトの名無しさん
2009/11/24(火) 19:45:49なるほどやっと理解できましたありがとうございます!
これからもわからないことがありましたら聞かせていただくくことことがあると思いますのでそのときはよろしくおねがいします。
0291デフォルトの名無しさん
2009/11/24(火) 19:50:44ファイルのエンコードが違うとか、
文字列が空白を含むとか、
そういうオチ?
0292デフォルトの名無しさん
2009/11/24(火) 20:04:41samep01.txtはUTF-16になっているか?
あと、bやccs=UNICODEは本当に必要か。どれかが要らない。
http://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx
fopen_sの説明を見れば分かるように、ファイルにBOMがあればccsは不要。
BOMがない場合でUTF-16LEのテキストなら、ccsはUNICODEではなくUTF-16LEの指定が必要。
あるいは、そこには明記されていないが、バイナリモードでは文字コード変換も行われないためccsの指定は反映されない。
0293デフォルトの名無しさん
2009/11/24(火) 20:11:10では、早速メモ帳で開いてみますね
0294デフォルトの名無しさん
2009/11/24(火) 20:29:54余計に酷くなったw
0295デフォルトの名無しさん
2009/11/24(火) 20:43:41「0 指南48.txt 竹やぶ.mp3 アナルファックで君を独占」
0296デフォルトの名無しさん
2009/11/24(火) 20:44:39void main()
{
int a;
a=1;
func( );
}
funcはmainとは別のソースファイルに記述してあるものとします。
この状態で、グローバル変数や引数を使わずに、func内で上で定義したaを使いたいのですが
どういった方法があるでしょうか?
同じスコープ内だから、funcが書いてあるソースファイルの上に、extern int aを追加して
たのですが、コンパイラに定義されていないと言われました。
0297デフォルトの名無しさん
2009/11/24(火) 20:50:320298デフォルトの名無しさん
2009/11/24(火) 20:51:480299デフォルトの名無しさん
2009/11/24(火) 20:53:33文章読めないんですか?
0300デフォルトの名無しさん
2009/11/24(火) 20:54:42いきなり自分ですぐにルール破っちまうのな。
0301デフォルトの名無しさん
2009/11/24(火) 20:56:47チン毛の生えてない消防かよ。
0302デフォルトの名無しさん
2009/11/24(火) 20:57:28引数でもなくグローバル変数でもないmain内の変数aを
func()内で使う方法なんてないと思うんだが。
0303デフォルトの名無しさん
2009/11/24(火) 20:58:34スタックポインタの値から辿って探すとかすれば?
0305デフォルトの名無しさん
2009/11/24(火) 21:02:02引き数禁止、ってのが func() の引き数として渡すのが禁止ってだけなら簡単なんだが。
引き数自体を全面禁止されるともう無理だろ。
0306デフォルトの名無しさん
2009/11/24(火) 21:02:26wchar_t型で宣言するんじゃなくて、wint_t型で宣言するんだよ。
このブォケ!!!あなた方の頭の中のClock数が間違ってると思います
0307デフォルトの名無しさん
2009/11/24(火) 21:11:40規格票ではchar以上のサイズがあればいいことになってる。
wint_tも実装定義だし^^
0308デフォルトの名無しさん
2009/11/24(火) 21:41:58そのファイルから読み込むのがうまくいったら、numとstrの中身が何になってほしいと考えている?
0309デフォルトの名無しさん
2009/11/24(火) 21:50:39結果→Shift-JIS EUC UTF-8 になるように、
ライブラリは使わずにやる方法はないでしょうか?
また、エンコードされたURLを元は何の文字コードだったのかを判定する方法も教えていただきたいです。
(CodeManager.getcode で実現できるようなのですが、ライブラリのソースが見つかりません。
見れるサイト等ありましたらお願いします。)
0310デフォルトの名無しさん
2009/11/24(火) 23:13:500311デフォルトの名無しさん
2009/11/24(火) 23:26:44printf("%2X", hoge);
では表示できませんでした(8桁になってしまう)
0312デフォルトの名無しさん
2009/11/24(火) 23:30:31printf("%2X", hoge & 0xFF);
0313デフォルトの名無しさん
2009/11/24(火) 23:30:410314デフォルトの名無しさん
2009/11/24(火) 23:32:45printfの書式文字列はWindows上の某コンパイラはマニュアルと
実際に食い違いがある(%i)
よってprintf系はWindowsだろうがUNIX系だろうが
慣れるまで思い通り動かないと思ったら別の方法を考えるのが
早いことが多い
たとえば
printf("%s",ToHex(hoge));
char *ToHex(char hoge){
//ここの部分を自分で埋める
}
0315デフォルトの名無しさん
2009/11/24(火) 23:39:47static char hx[3];
hx[0] = "0123456789abcdef"[hoge>>4&0x0F];
hx[1] = "0123456789abcdef"[hoge&0x0F];
hx[2] = '\0';
return hx;
}
0316デフォルトの名無しさん
2009/11/24(火) 23:48:45ポインタを返すのはまずいんではないか?その返したポインタを delete なり free する必要がでてくるかも。
static な領域ならば、それはそれで別の問題が。
0317デフォルトの名無しさん
2009/11/24(火) 23:52:230318デフォルトの名無しさん
2009/11/24(火) 23:55:330319デフォルトの名無しさん
2009/11/25(水) 00:01:50再帰やマルチスレッド対応まで最初から考慮するのか。
0320デフォルトの名無しさん
2009/11/25(水) 00:06:42printf("%s %s",ToHex(hoge), ToHex(fuga));
みたいな使い方ができない。
0321デフォルトの名無しさん
2009/11/25(水) 00:06:49こんなんとか
printf("%s %s\n", ToHex(0x12), ToHex(0x34));
0322デフォルトの名無しさん
2009/11/25(水) 00:08:44どう対策したらよいでしょうか。(プログラムではomikujiなど一部略しています)
#include <stdio.h>
int main(void)
{
int select = 0;
Do
{
printf("\n何をしますか?\n 1 おみくじ\n 2 数字当て\n\n 0 終了する ");
scanf("%d", &select);
switch (select)
{
case 1 :
omikuji();
break;
case 2 :
omikuji2();
break;
case 0 :
printf("\n終了しますか? 9:実行 それ以外:中止 ");
scanf("%d", &select);
if (select != '9')
break;
}
} while (select != 9);
printf("\a");
return 0;
}
0323デフォルトの名無しさん
2009/11/25(水) 00:15:490324デフォルトの名無しさん
2009/11/25(水) 00:17:47入力部分のscanf()を,fgets()とsscanf()で置き換える。
fgets()した後、入力が数字かどうかを判定し、数字ならsscanf()で解析。
数字以外なら、再度入力を促すなり終了させるなり。
0325デフォルトの名無しさん
2009/11/25(水) 00:35:050326デフォルトの名無しさん
2009/11/25(水) 00:39:26#include <stdio.h>
#define Do do
int main(void)
{
int select = 0;
Do
{
printf("\n何をしますか?\n 1 おみくじ\n 2 数字当て\n\n 0 終了する ");
{char b[64];
while (scanf("%d", &select)!=1)gets(b);}
switch (select)
{
case 1 :
omikuji();
break;
case 2 :
omikuji2();
break;
case 0 :
printf("\n終了しますか? 9:実行 それ以外:中止 ");
scanf("%d", &select);
if (select != '9')
break;
}
} while (select != 9);
printf("\a");
return 0;
}
0327デフォルトの名無しさん
2009/11/25(水) 00:41:430328デフォルトの名無しさん
2009/11/25(水) 00:45:030329322
2009/11/25(水) 00:51:36とりあえず、>>326さんのプログラムを使いやってみます。
本当にありがとうございました
0330デフォルトの名無しさん
2009/11/25(水) 00:56:25まあ、練習なんだから誤入力は無いものとして作ればいいと思うよ。
どうせ scanf なんてすぐ使わなくなるしな。
細い仕様なんて覚えても意味が無い。
0331デフォルトの名無しさん
2009/11/25(水) 01:08:44unsigned char hoge = 0xab;
unsigned short shoge= 0xdead;
unsigned long lhoge = 0xdeadbeef;
printf("%hhx\n", hoge);
printf("%hx\n", shoge);
printf("%lx\n", lhoge);
0332デフォルトの名無しさん
2009/11/25(水) 01:18:59毛嫌いしてる奴もいるけど。
0333デフォルトの名無しさん
2009/11/25(水) 01:31:30改行の有無を知りたい場合もある
0334デフォルトの名無しさん
2009/11/25(水) 01:34:330335デフォルトの名無しさん
2009/11/25(水) 03:18:30無意味なコメントだね
0336デフォルトの名無しさん
2009/11/25(水) 03:20:57すみませんこちらお願いできませんか・・・ 四苦八苦しています。
>>310
http://www.tagindex.com/tool/url.html
こちらのサイト等にあるように、エンコードの種類は複数あります。
0337デフォルトの名無しさん
2009/11/25(水) 09:42:50ぐぐれ
文字コード変換もコード判定も探せば沢山あるだろ
但し文字コード変換もコード判定も完璧というのは無いので
どこまでやるかは自分で決めなくちゃならない
0339デフォルトの名無しさん
2009/11/25(水) 11:37:170340デフォルトの名無しさん
2009/11/25(水) 14:16:01scanf() の安全なパターンか、バッファの容量を指定できる fgets() か。
0341デフォルトの名無しさん
2009/11/25(水) 16:23:31仕様から安全性を予測するのもスキルのひとつ。
0342デフォルトの名無しさん
2009/11/25(水) 16:32:310343デフォルトの名無しさん
2009/11/25(水) 16:51:14入門者と初心者の間はどのくらいのレベルですか?
どんなプログラムを組めるようになれば入門者ではなく初心者になれますか?
0344デフォルトの名無しさん
2009/11/25(水) 16:53:440345デフォルトの名無しさん
2009/11/25(水) 17:08:59初心者 入門者 初級者 中級者 上級者 入段者 ...
この区別は簡単なようで意外に難し
いが世の中では概ね上の順序に沿
って変化していくことが想定され
ているのではないかと
ただプログラミング言語とか言語に限っては
極度にレベルというものが定義しにくいからな
入門者はある程度本気で学んでやろうと考えた
段階のことなのかも知れない
0346デフォルトの名無しさん
2009/11/25(水) 17:09:30ttp://www.geekpage.jp/blog/?id=2007/7/9
0347デフォルトの名無しさん
2009/11/25(水) 17:10:14×入門者は
○入門者とは
0348345
2009/11/25(水) 17:11:190349デフォルトの名無しさん
2009/11/25(水) 17:13:04今レベル2とレベル3の間くらいだ
0350デフォルトの名無しさん
2009/11/25(水) 17:36:560351デフォルトの名無しさん
2009/11/25(水) 19:48:59手前等分からんのかっていう豆知識
リエントラントと、スレッドセーフは全然違う。
スレッドセーフであってもリエントラントであるとは限らない。
0352デフォルトの名無しさん
2009/11/25(水) 19:52:390353デフォルトの名無しさん
2009/11/25(水) 20:01:02具体例をあげてみそ
0354釣られてみる
2009/11/25(水) 20:03:470355デフォルトの名無しさん
2009/11/25(水) 20:04:17それらが同時にアクセスするのを防ぐ方法を考えた
セマーフォでも何でもいい
これはスレッドセーフではあるが
リエントラントとは呼べない。
0356デフォルトの名無しさん
2009/11/25(水) 20:15:41i++;
if(i>10) i=0;
(B)
if(i>=10) i=0;
else i++;
(A)だと一瞬だけiが10を超えてしまうので、
拙い書き方、になるのでしょうか?
0357デフォルトの名無しさん
2009/11/25(水) 20:33:07リエントラント
= フローインディペンデント or マルチエントラブル
なんでつね。はじめて聞いたw
0358デフォルトの名無しさん
2009/11/25(水) 21:00:51それを意識する必要はないな。
何らかの手段により参照してる
という抽象的な理解でよくて
どうやって参照しているのか
はわからなくても使えるな。
0359デフォルトの名無しさん
2009/11/25(水) 21:04:51組み込みは、そんな甘い考えは通用しない。
0360デフォルトの名無しさん
2009/11/25(水) 21:12:320361デフォルトの名無しさん
2009/11/25(水) 21:14:07まともなCプログラムが組めないと思う
0362デフォルトの名無しさん
2009/11/25(水) 21:16:32組み込みで自由になるスタックは、2MB。
メインメモリで8MB。
CPUはMIPSやSHの250MHz。
これで携帯電話のようにGUIを備えてレスポンスよく反応し
音楽鳴らせてファイル管理できて・・・・
ってのをやってみればよい
OS任せってのがどれほどラクかわかる
0363デフォルトの名無しさん
2009/11/25(水) 21:19:22自分が使う携帯電話のOSは作ってみたいな
機能を削ってもっとキビキビ動いて欲しい
0364デフォルトの名無しさん
2009/11/25(水) 21:19:35使用可能メインメモリ コード/データ合わせて128k迄
CPU V30 10MHz
1990年代初頭のPCソフトウェア想定環境
0365デフォルトの名無しさん
2009/11/25(水) 21:21:08というより、わざわざC言語を使うのはメモリ意識するようなソフトばかりだな。
そうじゃなければ他の言語で済ます。
0366デフォルトの名無しさん
2009/11/25(水) 21:21:22標準関数は使っていないのでそこも代替出来るかどうかがポイント。
標準関数を使うとスタックを食いまくり、遅くなる
0367デフォルトの名無しさん
2009/11/25(水) 21:22:120368デフォルトの名無しさん
2009/11/25(水) 21:29:33メモリ管理もそうだが、
if(memori_no_banti == 0x77000000 || memori_no_banti == 0x77000004 || memori_no_banti == 0x77000008)
とか
switch(HogeraGocho)
{
case 0x04:
Call1();
break;
case 0x08:
Call2();
break;
case 0x0C;
Call3();
break;
とか、絶対に書かなくなる。こういうのに耐えられなくなる。
0369デフォルトの名無しさん
2009/11/25(水) 21:31:530370デフォルトの名無しさん
2009/11/25(水) 21:43:07それを無視してるんじゃないかと思える処理系が多いという
問題意識を持つ人も居る。
(CはPASCAL並みの高級言語だと1980年代は言われていた
そうだ)
0371デフォルトの名無しさん
2009/11/25(水) 21:46:29リエントラントという用語は、関数の中に居る人?の視点か
外に居る人?の視点の違いで意味が変わってくる曖昧な専門用語
なんで今は特定の分野の文脈以外では使わないほうが良い。
0372デフォルトの名無しさん
2009/11/25(水) 21:53:220373デフォルトの名無しさん
2009/11/25(水) 21:57:220374デフォルトの名無しさん
2009/11/25(水) 21:59:000375デフォルトの名無しさん
2009/11/25(水) 22:02:31小説みたいな感じで文章と音楽とグラフィック表示するだけのやつなら
Cなんか使うよりもっと楽な方法がいろいろありそうだ。たぶん。
0376デフォルトの名無しさん
2009/11/25(水) 22:03:350377デフォルトの名無しさん
2009/11/25(水) 22:05:14Windows上でWindowsAPIを利用して作るなら
比較的楽にできますけど。
0378373
2009/11/25(水) 22:08:56分岐みたいなのはなくていいんですけど、
ひぐらしみたいなのがつくりたいんです。
0379デフォルトの名無しさん
2009/11/25(水) 22:09:49それは抽象化のためだし、元来規格とはそういうもの。それを鵜呑みにするのは教育的にどうかと。
0380デフォルトの名無しさん
2009/11/25(水) 22:10:22という考えは捨てた方がいいかもしれない
0381デフォルトの名無しさん
2009/11/25(水) 22:12:38つまり、実装によってはアドレスではない可能性もあるってことよ♥
0382デフォルトの名無しさん
2009/11/25(水) 22:13:16全くの初心者ですが、初心者向けの分かり易い本があれば教えて頂けませんか??
0383373
2009/11/25(水) 22:14:25そうなんですか。
初心者なんですいません。
C言語とは何をするものなんですかね?
抽象的でごめんなさい。
0384デフォルトの名無しさん
2009/11/25(水) 22:16:42何かを作るっていうモチベーションがあるとないとでは
学習効率がぜんぜん違うから。
珍妙な言語を学ぶくらいなら、
最初からK&R第二版とプログラミングWindows上下を購入して
ごりごりWindowsプログラミングの勉強をした方がいいと思うくらい。
実際、この3冊を読めば、ベクトルグラフィックも、ビットマップグラフィックも、
印刷もタイマもMIDIもマルチスレッドもインターネットも全部使えるようになる。
0385デフォルトの名無しさん
2009/11/25(水) 22:17:05C言語を勉強するとノベルゲームも作れるかも知れないが逆は真ならず
という奴じゃないの?
0386デフォルトの名無しさん
2009/11/25(水) 22:20:56うんそだね。珍妙な言語で動作する珍妙なアプリケーションを作る
ぐらいWindows-APIやCの様々な技法を駆使できる機会は無いからね
0387373
2009/11/25(水) 22:29:56ごめんなさい。
もっと勉強してきますノシ
0388デフォルトの名無しさん
2009/11/25(水) 22:39:54GNUとかのサイト行けばわかるが、多くのプログラミング言語
処理系のソースはほぼC(C++やObjective-CやJavaもあることは
あるが)
言語が絡む分野では圧倒的な強さというか実績があるんじゃないかと
0389デフォルトの名無しさん
2009/11/25(水) 23:01:20なぜなら、Cとはアセンブラの代替を意図して作られた言語だったから、
アセンブラができることはCでもできねばならなかった。
アドレスに入った値を指し示すというのは副次的な産物であって
それが主目的なわけじゃない。
アドレス経由でメモリをいじる機能を値や関数に適用してみたら
覚えておけるようになったってだけだ。
まあ値も関数もメモリに乗ってる時点でメモリいじりと等価なことだが。
0390デフォルトの名無しさん
2009/11/25(水) 23:05:52メモリいじりができるからだ。
もちろん本当に高速な処理が必要なところはアセンブラで書かれているが、
C 9 : ASM 1 といったところ。
Cとは結局、人間にとって分かりやすい言語体系になったアセンブラなのだ。
0391デフォルトの名無しさん
2009/11/25(水) 23:06:03想像するのは勝手だが、そのような実装は存在するのでしょうか?
0392デフォルトの名無しさん
2009/11/25(水) 23:15:21プロセス毎にメモリアドレスが独立している
↓
異なるプロセスのメモリを書き換えることが出来ない
↓
アドレスでは無い
とも言えるんじゃね?
物理アドレスと論理アドレスが云々
0393デフォルトの名無しさん
2009/11/25(水) 23:17:47しらね^^
ただ、メモリにアドレスが振られていないハードや
アドレスが一意でないハードは存在している。
DOS時代にFarポインタとNearポインタなるものがあったそうだけど
その時代には生まれてないので知りまへん^^
あと、仕様的にはポインタが保持しているのはアドレス値ではなく、ポインタ値。
int の 1 と double の 1 が同じビット列とは限らないのと一緒で
int *の 1 と double * の 1 が同じビット列とも限らない(規格票には書いてない…はず^^)。
ポインタがメモリにメモリにアクセスする道具であるのは事実で
しかし、アドレスから一定の抽象性を持って分離していなければならないって感じ?
0394デフォルトの名無しさん
2009/11/25(水) 23:22:55物理アドレスは、メモリコントローラにアクセスしてやればCでも読み書きできる。
BIOSはもちろんそれをやっている
ただページ参照やタグからどうこうだの縦横のアドレスだの
ここいらあたりはCよりアセンブラでやったほうが遥かに短いコードになる
0395デフォルトの名無しさん
2009/11/25(水) 23:32:1132bitOSが4GBまでというのは、あくまでOSが提供する論理アドレス<->物理アドレスの変換マップのワクが
4GBまでというだけであって、自分でメモリコントローラにアクセスしてページングしてアドレッシングして、
とやってやれば、メモリコントローラが扱える上限いっぱいまで使用できることになる。
アプリケーションはOSの論理アドレスに依存しているから使えなくても
RAMディスクなどとして使うことだってできるはずだ。
理論上はそうだ。
0396デフォルトの名無しさん
2009/11/25(水) 23:33:100397デフォルトの名無しさん
2009/11/25(水) 23:44:20両者のビット列が同一であることを保障する旨の記述あったっけ?^^;;;スマ
0398デフォルトの名無しさん
2009/11/25(水) 23:47:110399デフォルトの名無しさん
2009/11/26(木) 00:08:34懐かしいw
0400デフォルトの名無しさん
2009/11/26(木) 00:14:49Windows上のVC開発のこと?珍妙って某BASICコンパイラのこと?
Windows開発では通用しているスクリプト言語をそれなりに知らないと
辛いだろ。Cだけじゃ駄目なことは間違い無し。
0401デフォルトの名無しさん
2009/11/26(木) 00:26:561〜9の数字を並べて表示させようと思っていて、
int C[9]={1,2,3,4,5,6,7,8,9};
を最初に作ってます。
そして一度でも使った数字には0を当てはめます。
k=0;
do{
printf("数を選んで下さい\n");
while(k<9){
if(C[k]!=0){
printf("%d\n",C[k]);
k++;
}
最初に1〜9を表示させるにはどうすればよいですか?
0402デフォルトの名無しさん
2009/11/26(木) 00:30:38bit pattern
0403デフォルトの名無しさん
2009/11/26(木) 00:34:010404デフォルトの名無しさん
2009/11/26(木) 00:34:530405デフォルトの名無しさん
2009/11/26(木) 00:39:50これの対策だけど、switchで振り分けてるならdefaultでいったん振り分けて、
影響されない適当な数を代入する じゃいけないかな?
0406デフォルトの名無しさん
2009/11/26(木) 00:40:50あとは頑張ってみます。ありがとうございました。
0407デフォルトの名無しさん
2009/11/26(木) 00:50:35簡単にしたいならintでなくcharにして最初に0を入れておけばいい
0408デフォルトの名無しさん
2009/11/26(木) 01:02:02何をしたいのか今一つ分かりませんが、
推測で、
#include <stdio.h>
void main(void)
{
int C[9]={1,2,3,4,5,6,7,8,9};
// を最初に作ってます。
// そして一度でも使った数字には0を当てはめます。
int k=0;
printf("数を選んで下さい\n");
while(k<9){
printf("%2d",C[k]);
C[k]=0;
k++;
}
putchar('\n');
}
0409401
2009/11/26(木) 01:19:40ちなみにアカギが死ぬ直前にしたギャンブルの
ナインを作っている途中です。
二つめの数を選んで勝負のする時、一度使った数字は
使えなくするために0を入れています。
とりあえずは↓
do{
printf("ここから数を選んで下さい\n");
while(k<9){
if(C[k]!=0){
printf("%d",C[k]);
}
k++;
}
printf("\n");
k=0;
これで数字の表示はいけそうなので次の作業をやってみます。
いきずまれば、また見直してみます。
みなさんアリガトウございました。
0410デフォルトの名無しさん
2009/11/26(木) 01:23:520411401
2009/11/26(木) 01:28:22もっとできればいろいろルールを増やせて楽しそうだなと思ってます。
0412デフォルトの名無しさん
2009/11/26(木) 01:41:32わざわざ違ってる理由が無いと思うが。
0413デフォルトの名無しさん
2009/11/26(木) 01:46:26printf("%d", sizeof a);
これは 8 なのか 2 なのか、あるいは 4 なのか、
どれが正しいの?
0414デフォルトの名無しさん
2009/11/26(木) 01:50:140415デフォルトの名無しさん
2009/11/26(木) 01:51:080416デフォルトの名無しさん
2009/11/26(木) 01:52:320417デフォルトの名無しさん
2009/11/26(木) 01:52:57まさに「逆に考えるんだ!」だな。
0418デフォルトの名無しさん
2009/11/26(木) 02:02:300419デフォルトの名無しさん
2009/11/26(木) 02:11:030420デフォルトの名無しさん
2009/11/26(木) 02:12:480421デフォルトの名無しさん
2009/11/26(木) 02:15:36配列というものはそういうものでないと困るがな。
0422デフォルトの名無しさん
2009/11/26(木) 02:38:02wchar s[8];
fgetws(s, sizeof s, stdin);
は間違いというわけだな?
TCHAR 使って fgets と切り替えにしてるとマズいわけだ。
0423デフォルトの名無しさん
2009/11/26(木) 03:09:27面白そうだから、ナインのルールを教えてください。
#include <stdio.h>
#include <string.h>
int main(void)
{
char numLst[10]={0}, buf[64], lstIdx, numSlct, remain, i;
strcpy(numLst, "123456789");
remain=9;
do{
for(i=0; i<remain; i++)
printf("%2c", numLst[i]);
putchar('\n');
do{
printf("数字を選べ : ");
gets(buf);
sscanf(buf, "%c", &numSlct);
for(i=0; i<remain; i++){
if(numSlct==numLst[i])
break;
}
}while(i==remain);
if(i!=remain-1)
memcpy(&numLst[i],&numLst[i+1],sizeof(numLst[0])*(remain-i));
numLst[remain-1]=0;
}while(--remain);
puts("終わり");
return 0;
}
0424デフォルトの名無しさん
2009/11/26(木) 10:35:56初
こ
い
っ
て
た
極
入
段
…初恋が何だって?
0425デフォルトの名無しさん
2009/11/26(木) 10:44:13そこで
#define numberof(v) (sizeof(v) / sizeof *(v))
ですよ
0426デフォルトの名無しさん
2009/11/26(木) 10:45:36C#なら入門サイトも結構あるがXNAのサイトって日本にはほとんどない。
MSDNみてもいきなり専門用語の羅列で何やりゃいいか意味不明。
これでゲーム作ってるひとっているの?
0427デフォルトの名無しさん
2009/11/26(木) 10:52:12XNAってCとは関係ないのか
0428デフォルトの名無しさん
2009/11/26(木) 18:59:16アホがよく勘違いする豆知識
「scanfはバッハオーバーフローする!」
しない。
なぜするのか。
scanf("%d", &FuxckingToshing);
こうでなく、
scanf("%10d", &FxckingToshing);
とすればオーバーフローなどせん。
これを知らないやつが多すぎる。
0429デフォルトの名無しさん
2009/11/26(木) 19:12:410430デフォルトの名無しさん
2009/11/26(木) 19:27:21%d ってw
%100s とか %255[^\n] とかじゃねーの?
0431デフォルトの名無しさん
2009/11/26(木) 19:28:57%3dなら3桁以上取らない
0432デフォルトの名無しさん
2009/11/26(木) 19:30:480433デフォルトの名無しさん
2009/11/26(木) 19:37:280434デフォルトの名無しさん
2009/11/26(木) 19:52:2114・15行目:文字列または文字定数が閉じていない(関数 main )
15行目:関数呼び出しに ) がない(関数 main )
18行目:左辺値が必要(関数 main )
何がまずいのかよく解らず…アドバイス下さい
課題の説明が複雑なので、一応渡されたプリントもスキャンしてソースと一緒にうpしました
ttp://www.dotup.org/uploda/www.dotup.org398556.zip.html
0435デフォルトの名無しさん
2009/11/26(木) 20:01:58さすが大学だと難しいことやるんだな
課題の方は全然わからんw
プログラムソースに問題がなさそうに見える。
とりあえずソースファイルの文字コードを EUCあたりにしてみては?
0436デフォルトの名無しさん
2009/11/26(木) 20:12:35その前のは文字コードだろうな。
0437436
2009/11/26(木) 20:18:540438デフォルトの名無しさん
2009/11/26(木) 20:27:28某ランドのコンパイラ5.5は
ansi以外のファイルではマトモにコンパイルできない。
C99にも準拠しておらず、俺の大好きなlong long intが使えない
0439sage
2009/11/26(木) 21:05:25aが50増えたらaをbに変更するもの作りたいのですが、どなたかアドバイスください。
0440デフォルトの名無しさん
2009/11/26(木) 21:07:050441434
2009/11/26(木) 21:09:06文字コードが問題ですか
お察しの通りボーランドなんですがw
EUC-JPにも変えてみましたが、エラーが変わらないというのはBCCdevloperのせいですかね…
違うコンパイラ探してみます
>>436
a1=0,b1=1という指定があったので、条件を満たさない場合にはループさせようと思ったのですが記述間違ってますか?
0442デフォルトの名無しさん
2009/11/26(木) 21:09:51ボーランドならSJISでおk
0443デフォルトの名無しさん
2009/11/26(木) 21:14:52ak==0 && bk == 1 じゃないとおかしいが、
そもそも値が決まってるなら入力させる必要はないだろw
0444素人学生その5
2009/11/26(木) 21:20:48先生!!!!質問があります!!!!
今作っているプログラム内で使用しているAPI(とあるソフト)を最新版に更新したらなぜかシステム終了時にアクセス違反が発生するようになってしまいました.
どうもatexitを抜けた後,crt0dat.c内のif(__onexitbegin){}を3回ほどループして,この関数を抜け出すところ(?)でアクセス違反が起きているようです.
どうやったら解決できるか教えてください!!
ちなみにAPIを更新する前は問題ありませんでした.
0445デフォルトの名無しさん
2009/11/26(木) 21:21:410446デフォルトの名無しさん
2009/11/26(木) 21:22:060447デフォルトの名無しさん
2009/11/26(木) 21:26:01APIの正しい使い方をしてください
今までは運良くエラーとして出なかっただけです
0448デフォルトの名無しさん
2009/11/26(木) 21:26:250449デフォルトの名無しさん
2009/11/26(木) 21:35:13((n+1)/2)*((n+1)/2)
0450素人学生その5
2009/11/26(木) 21:37:07仮にAPIの使用方法が間違っていると,exit時にアクセス違反が起こる可能性があるとうことでしょうか?
0451434
2009/11/26(木) 21:45:15ようやくいけました!
ありがとうございます
>>443
==でしたか 助かりました
ヒントの流れ図に入力を促す文等があったので、入れた方がいいのかな…とw
0452デフォルトの名無しさん
2009/11/26(木) 21:49:57アホがよく勘違いしている豆知識
API
アホはAPIというと、「どっかのライブラリ」
としか思っていないが
ドライバとユーザー入力のインターフェイスならば何でもAPIなのである。
どこぞの会社が作ったライブラリ云々は一切関係ない。
0453デフォルトの名無しさん
2009/11/26(木) 21:57:550454デフォルトの名無しさん
2009/11/26(木) 21:58:150455デフォルトの名無しさん
2009/11/26(木) 22:20:390456デフォルトの名無しさん
2009/11/26(木) 22:26:220457デフォルトの名無しさん
2009/11/26(木) 22:28:490458デフォルトの名無しさん
2009/11/26(木) 22:39:370459デフォルトの名無しさん
2009/11/26(木) 22:44:12パルスつっても使い方が分からない。
forループだとCPUによって時間がズレるうえに、ループしてる間はCPUのリソースを食っていることに他ならないわけで
0460デフォルトの名無しさん
2009/11/26(木) 22:46:530461デフォルトの名無しさん
2009/11/26(木) 22:51:52アホが組んだせいでいろいろ大変になった豆知識
昔のゲームが動かない
15年くらい前の98全盛期、4MHz機だと正常に動くけどそれ以上だと動かない
などというゲームがあった。なぜだろうか。
答えは簡単、初期化やメモリへのロードをforループで待つという、素人も真っ青の方法で待っていたからである。
4MHz未満機で「だいたいこんくらい待てばいいや」と、ソフトウェア的にタイマを作って回していたので
それよりも速い処理族度を持つ機ではループ完了までの早さが変わってしまい、
初期化が行われなかったりメモリにまだ乗ってないのに次の処理に行こうとしたりして動かなかったのである。
0462デフォルトの名無しさん
2009/11/26(木) 22:54:01Windows95 ってCPUが高速だとインストールに失敗するらしいぜ
0463デフォルトの名無しさん
2009/11/26(木) 22:54:050464デフォルトの名無しさん
2009/11/26(木) 22:57:24http://ko.wikipedia.org/wiki/%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98_%EA%B2%B0%ED%95%A8
0465デフォルトの名無しさん
2009/11/26(木) 23:15:160466デフォルトの名無しさん
2009/11/26(木) 23:34:080467デフォルトの名無しさん
2009/11/27(金) 00:03:02何も無いメモリ空間に神がメモリを割り当てる。全部は割り当てられないから、一部だけだ。
割り当てられた部分が不正じゃないアドレス。まだ割り当てられていない部分が不正アドレス。
>>459
その昔、vsync割り込みと言う手法があってな… ようするに使えるものは何でも使う。
0468デフォルトの名無しさん
2009/11/27(金) 00:26:294Mhz って何?
98 って 5Mhz 系とそれ以外だったろ
0469デフォルトの名無しさん
2009/11/27(金) 00:31:120470デフォルトの名無しさん
2009/11/27(金) 00:33:0220年以上前の話だがな。
0471401
2009/11/27(金) 01:14:55アカギが死ぬ間際、最後にしたギャンブルです。
トランプでも雀パイでもできるギャンブルで、
相手も自分も1〜9のカードを用意して好きな数を選んで出す。
自分が5を出して、相手が3とかなら、数字の大きい自分の勝ち。
自分が5を出して、相手が6とかなら、数字の大きい相手の勝ち。
自分と相手が同じ数なら引き分け。
9枚消費しきった後の結果で、勝利数の多いほうの勝ち。
相手の使ったカードを覚えておくなどの戦略がある。
0472デフォルトの名無しさん
2009/11/27(金) 05:10:190473デフォルトの名無しさん
2009/11/27(金) 11:58:49とりあえずC言語を勉強したいのですが
そこで必要となるコンパイラ?でおすすめはありますか?
0474デフォルトの名無しさん
2009/11/27(金) 12:17:550475デフォルトの名無しさん
2009/11/27(金) 12:20:210476デフォルトの名無しさん
2009/11/27(金) 12:20:330477デフォルトの名無しさん
2009/11/27(金) 13:23:06どんな状態だよ?
0478デフォルトの名無しさん
2009/11/27(金) 13:26:10Turbo C 2.01 オススメ。
統合開発環境付きが欲しかったら
Turbo C++ 1.01 でもいい。
0479デフォルトの名無しさん
2009/11/27(金) 13:54:37…えっ?
0480デフォルトの名無しさん
2009/11/27(金) 14:26:120481デフォルトの名無しさん
2009/11/27(金) 14:28:56memset(s,49,sizeof(s));
これは初期か時末尾についたnullを塗りつぶす?つぶさない?
0482デフォルトの名無しさん
2009/11/27(金) 14:29:540483デフォルトの名無しさん
2009/11/27(金) 16:14:06問題文
任意の画素数をもつ画像をアフィン変換するプログラムを作成しなさい。
変換処理後の画像はファイルとして保存するようにしなさい。
0484デフォルトの名無しさん
2009/11/27(金) 16:18:43char型について質問です。
charに数字を入れるとマイナスになったりして面白かったので
signed char var1 = 200;
printf("符号付\t %d\n", var1);
というコードで色々な数値を入れて試してみました。
var1 = 0; 00000000→ 0
var1 = 127; 01111111→ 127
var1 = 128; 10000000→-1
var1 = 255; 11111111→-128
予想ではこういう風に8ビットの一番左の数字でプラスかマイナスかを判断し
あとの7桁が値を表すのかなとなると思いました。
これだと符号を反転させるときも一番左の数値を変えるだけだから便利だなと思いました
しかし実際にやってみると
var1 = 0; 00000000→ 0
var1 = 127; 01111111→ 127
var1 = 128; 10000000→-128
var1 = 255; 11111111→-1
となりました。このほうが何かメリットがあるのでしょうか。
どうしてこういう仕様になっているのか知りたいです。どなたか教えてください。
0485デフォルトの名無しさん
2009/11/27(金) 16:37:470486デフォルトの名無しさん
2009/11/27(金) 16:39:200487デフォルトの名無しさん
2009/11/27(金) 16:40:18足し算などで符号を気にせず同じ様に処理できたりとか
0 + 1 = 1 ・・・ 00000000 + 1 = 00000001
-128 + 1 = -127 ・・・ 10000000 + 1 = 10000001
0488デフォルトの名無しさん
2009/11/27(金) 17:05:152進法がわかってないだろ
0489デフォルトの名無しさん
2009/11/27(金) 17:18:062進来たかとカモメに問うたのである。
ワケがわからない。
0490デフォルトの名無しさん
2009/11/27(金) 17:34:06調べて見ると、引数として渡せるのは0-255とEOFということなんですが
unsignedだとEOFが渡せないと思います。
0491デフォルトの名無しさん
2009/11/27(金) 17:38:42言葉の通りの状態を説明してみろよw
0492デフォルトの名無しさん
2009/11/27(金) 17:39:17EOFを渡す必要がないからでは?
EOFを渡す必要があるなら、渡せるように書くと思うが
0493デフォルトの名無しさん
2009/11/27(金) 17:40:17キャストなんてせずにintのままで扱います
0494デフォルトの名無しさん
2009/11/27(金) 17:42:47それをやると非ASCII文字を渡したときに未定義動作。
0495デフォルトの名無しさん
2009/11/27(金) 17:44:15教えてください、だろう馬鹿者。
0496デフォルトの名無しさん
2009/11/27(金) 17:44:25signed charに入った非ASCII文字や256以上の値を渡したときに未定義動作。
0497デフォルトの名無しさん
2009/11/27(金) 17:46:580498デフォルトの名無しさん
2009/11/27(金) 18:21:58太古の昔isxxxxはテーブル参照するマクロだった。その時代の名残。
キミのように疑問を持って理由を考える奴は使わなくなる。
コピペを繰り返すしか能の無い>>493のようなヘボはいまだにキャストしている。
0499デフォルトの名無しさん
2009/11/27(金) 18:30:140501デフォルトの名無しさん
2009/11/27(金) 18:39:100502デフォルトの名無しさん
2009/11/27(金) 18:48:22理由があるんで間違ってはいない。
0503デフォルトの名無しさん
2009/11/27(金) 19:32:52#define MAX 1000
int main(void){
int a, b, c, count = 0;
for(c = 1; ; c++){
for(b = 1; b <= c; b++){
for(a = 1; a <= b; a++){
if(c*c == b*b + a*a){
printf("(%d, %d, %d)\n", a, b, c);
if(++count >= MAX)
return 0;
}
}
三辺が整数の直角三角形を出力するプログラミングを作ってるんですが、同じ比率の結果を排除したいのですができません。
どのようにしたらよいでしょうか?
例えば3:4:5が先に出力されていたら6:8:10は出力去れないようにするといった感じです。
0504デフォルトの名無しさん
2009/11/27(金) 19:37:020505デフォルトの名無しさん
2009/11/27(金) 19:41:012:5(25)+12(144)=13(169)
3:7(49)+24(576)=25(625)
4:8(64)+15(225)=17(289)
5:9(81)+40(1600)=41(1681)
6:11(121)+60(3600)=61(3721)
7:12(144)+35(1225)=37(1369)
8:13(169)+84(7056)=85(7225)
9:15(225)+112(12544)=113(12769)
10:16(256)+63(3969)=65(4225)
このように出したいんだね?
そりゃ多分無理だ
0506デフォルトの名無しさん
2009/11/27(金) 19:45:060507490
2009/11/27(金) 19:45:10EOFを渡す必要がないということで納得しました
0508デフォルトの名無しさん
2009/11/27(金) 19:46:28int gcm(int a, int b) { return a % b ? gcm(b, a%b) : b;}
を追加して、
if(c*c==a*a + b*b && gcm(a,b)==1)
にする
0509デフォルトの名無しさん
2009/11/27(金) 19:46:39>排除したいのですができません。
チェックしてないからじゃね?
>例えば3:4:5が先に出力されていたら
それまで出力した組み合わせをすべて覚えておかないと
判断できんわな。
0510デフォルトの名無しさん
2009/11/27(金) 19:56:13宿題スレで答えてもらってんのに理解できなかったのかw
0511デフォルトの名無しさん
2009/11/27(金) 20:06:52俺は今まで
ポリデントとかどうでもいいじゃん、と思っていたが
トゥーーチャノォ(英語は発音大事)などで半角スペースやタブが削除され
ポリデントされてないソースを見たら
やっぱタブは大事だなと思った
0512デフォルトの名無しさん
2009/11/27(金) 20:09:220513デフォルトの名無しさん
2009/11/27(金) 20:09:53おじいちゃん お口くさい
0514デフォルトの名無しさん
2009/11/27(金) 20:34:46画像形式は?
0515デフォルトの名無しさん
2009/11/27(金) 20:36:20そういう マナちゃんの あそこもちょっと...
0516デフォルトの名無しさん
2009/11/27(金) 20:50:04んな馬鹿な。最大公約数が 1 でないものは省けばいいのでは?
0517デフォルトの名無しさん
2009/11/27(金) 21:07:250518デフォルトの名無しさん
2009/11/27(金) 21:27:29大文字で書かれてれば「最大公約数」ってすぐわかる。
この略号、中学校で全員習うからね。
0519デフォルトの名無しさん
2009/11/27(金) 21:28:10M は何の略でしょうか?
0520デフォルトの名無しさん
2009/11/27(金) 21:28:470521デフォルトの名無しさん
2009/11/27(金) 21:28:520522デフォルトの名無しさん
2009/11/27(金) 21:30:020523デフォルトの名無しさん
2009/11/27(金) 21:33:27Greatest Common Measure 略してGCM
どっちも最大公約数をあらわす。
最小公倍数LCMのMと混同してるわけではないので、
下手に突っ込むと逆に恥をかきます。
0524デフォルトの名無しさん
2009/11/27(金) 21:40:05http://edn.embarcadero.com/article/21751
まだフロッピーの時代なんだ
0525デフォルトの名無しさん
2009/11/27(金) 22:29:21CP437専用だったはず。
0526デフォルトの名無しさん
2009/11/27(金) 22:42:360527423
2009/11/27(金) 22:50:37演出によって面白いゲームになりそうですね。
キャラクター選択や、それぞれと戦うに至った状況設定などを入れたりすると、
友人間の話の種になりそうです。
練習になりそうだから私も単純な骨組だけ作ってみます。
自己流なので洗練とは遠いですが。
0528デフォルトの名無しさん
2009/11/27(金) 23:23:50ビットマスクとかには使わないほうがいいのかな
サイズと符号があいまいだよねこのこ
0529デフォルトの名無しさん
2009/11/27(金) 23:38:20とりあえず日本語関連は後回しにしたほうがいいよ。
日本語使うにしてもローマ字で書けばいいしな。
文字列いじったりするのに、かな漢字が入ってると
文字コードがどうとかで面倒だろ。
とりあえず ASCII 文字だけで一通り覚えてからだな。
0530デフォルトの名無しさん
2009/11/28(土) 00:31:410531デフォルトの名無しさん
2009/11/28(土) 00:35:39ASCII で一通り覚えてから、
それから日本語をワイド文字で使うことを覚えれば良い。
0532デフォルトの名無しさん
2009/11/28(土) 00:37:14「日本語を」じゃないな。
かなや漢字を、だな。
ローマ字でも日本語は日本語だもんな。
0533デフォルトの名無しさん
2009/11/28(土) 00:58:47jpとかchcp使っても戻らなくて、こんな時間orz
0534デフォルトの名無しさん
2009/11/28(土) 01:20:23中身は単なる
chcp 932
だろ。
0535デフォルトの名無しさん
2009/11/28(土) 01:27:15コマンドプロンプトって Shift-JIS なの?
NT 系の Windows って Unicode なんじゃなかったか?
UTF-16(LE) じゃないの?
0536デフォルトの名無しさん
2009/11/28(土) 01:39:26インターフェース(コマンドプロンプト等)は基本Shift-JIS
・・・だったはず
0537423
2009/11/28(土) 02:20:06ナインのゲームのソースをざっと作ってみました。
どうでしょうか?
詳しい方、マシなソースになるようにアドバイスを
お願いします。
自己流の部分が多いので、一般的な書き方なども教えてください。
自分としては、もう少し関数を切りだして、main関数を
見通しよくできれば、と思います。
ttp://www.dotup.org/uploda/www.dotup.org403333.c.html
0538423
2009/11/28(土) 03:31:36ttp://www.dotup.org/uploda/www.dotup.org403602.c.html
0539デフォルトの名無しさん
2009/11/28(土) 03:52:3690行前後:if 文の {} のありなしを統一したほうがいい
入力のところと結果発表とのところで
関数化するといいんじゃない?
ex) void selectLst(char nLstPlr[], char *idxPlr);
ex) void showScr(ROUND Round[]);
ラウンド判定の部分は悩むところ
ex) void showRnd(char num);
ex) void showRnd(char num, ROUND round[]);
あとほとんどの変数は、char型にこだわらずに
int型で書いたほうがすっきりしていいkかと
ex) int nLstCom[10]={1,2,3,4,5,6,7,8,9};
0540デフォルトの名無しさん
2009/11/28(土) 04:30:320541デフォルトの名無しさん
2009/11/28(土) 05:10:20memmoveつかうべき
0543デフォルトの名無しさん
2009/11/28(土) 10:14:07こういうのってできる?
0544デフォルトの名無しさん
2009/11/28(土) 10:21:09試せばいいじゃないか
0545デフォルトの名無しさん
2009/11/28(土) 11:08:500546デフォルトの名無しさん
2009/11/28(土) 11:33:020547デフォルトの名無しさん
2009/11/28(土) 12:23:050548デフォルトの名無しさん
2009/11/28(土) 12:29:26のように順番に文字列を関数に渡していきたいのだけれど再帰でやるのとforでどんどん渡していくのとどちらがよさそうですか?
0549デフォルトの名無しさん
2009/11/28(土) 12:41:47多分forの方が簡単
0550デフォルトの名無しさん
2009/11/28(土) 12:42:15(最大値は65535とする)
#include<stdio.h>
int main(void)
{
int num[80],n,i=0;
printf("10進数を入力:");
scanf("%d",n);
while(n!=0){
num[i++]=n%2;
n=n/2;
}
while(--i>=0)
printf("%d",num[i]);
return 0;
}
10進数を入力:18
10000001101000011000100
よろしかったらご教授願います
0551デフォルトの名無しさん
2009/11/28(土) 12:50:53まずはこれ。
値渡しでは入力を受け取れない。
scanf("%d",&n);
のようにして n のアドレスを渡せ。
0552デフォルトの名無しさん
2009/11/28(土) 13:00:16具体的には文字コード00からFFまでの一文字、二文字のすべての組み合わせ、三文字のすべての組み合わせとやって
八文字のすべての組み合わせまでやろうとしてる
0553デフォルトの名無しさん
2009/11/28(土) 13:03:32int ON, OFF, GOOD, BAD;
例えば
ON = 1;
if(ON == 1)
else if (OFF == 1)
なんでこんなことしますか。
1コでいいじゃないですか
int GOODING;
//以前のON=1と等価
GOODING |= 0x01;
//以前のOFF=1と等価
GOODING |= 0x02;
なんで無駄に変数を用意しようとしますか。
0554デフォルトの名無しさん
2009/11/28(土) 13:15:30文字コード00を含めると、文字列の終端と区別つかなくなるのでは?
0555デフォルトの名無しさん
2009/11/28(土) 13:19:458文字の全組み合わせって8バイトのデータが 2^64 個だよ?
そんなデータ置く場所があるのかい。
0556デフォルトの名無しさん
2009/11/28(土) 13:24:00解決しました
初歩的なミスで恥ずかしい限りです
ありがとうございました
0557デフォルトの名無しさん
2009/11/28(土) 13:45:300558458
2009/11/28(土) 14:05:38こんな感じのforループにしてみました
もっとスマートなやり方があればご指摘ください
0559デフォルトの名無しさん
2009/11/28(土) 14:11:31リテラルを書き換えようとするなよw
0560デフォルトの名無しさん
2009/11/28(土) 14:13:13個人的にはそういう書き方も分かりやすくて好き。
再帰だと、こんな感じ
char a[10]={0};
sub(int i, int len)
{
int c;
for(c=0x00; c<= 0xff; c++)
{
a[i]=c;
if(i == len) func(len, a); /* bが文字幅の場合 */
else sub(i + 1, len);
}
}
main()
{
int len;
for(len = 0; len <8; len++)
sub(0, len);
}
0561デフォルトの名無しさん
2009/11/28(土) 14:13:40リテラル派
0563デフォルトの名無しさん
2009/11/28(土) 15:08:36優先順位を分かりやすくするため
誰でもわかってる数学のルールどおりであっても
カッコをつける
ABC = (A + (B * C));
(((((((((((((((((((((((((((; ゚д゚))))))))))))))))))))))))))))))))) これはやりすぎである。
0564デフォルトの名無しさん
2009/11/28(土) 15:17:370565デフォルトの名無しさん
2009/11/28(土) 15:55:120566デフォルトの名無しさん
2009/11/28(土) 17:21:42どんだけカッコつけてもやりすぎってことはないだろw
0567デフォルトの名無しさん
2009/11/28(土) 17:36:360568デフォルトの名無しさん
2009/11/28(土) 18:22:022番目のループの条件式をj<sqrt(i)に変えてみたんですがうまくいきませんでした
どうしたらいいんでしょうか?
#include<stdio.h>
int main(void)
{
int i,j,f;
for(i=2;i<1000;i++){
f=0;
for(j=2;j<i;j++){
if(i%j == 0)
f=1;
}
if(f==0)
printf("%d ",i);
}
return 0;
}
0569デフォルトの名無しさん
2009/11/28(土) 18:55:430570デフォルトの名無しさん
2009/11/28(土) 18:59:31そもそも出力結果が違ってしまうんですがどこを改善したらいいんでしょう?
0571デフォルトの名無しさん
2009/11/28(土) 19:01:59for(j=3; j*j<=i; j+=2) {
if(i%j==0) {
f = 1;
break;
}}
でいいんじゃね?
0572デフォルトの名無しさん
2009/11/28(土) 19:04:180573デフォルトの名無しさん
2009/11/28(土) 19:05:31うまくいかないじゃ通じないので、ちゃんとどうなったか、
出力結果が違うってならどう違うのか、他人に分かるように
書くのがマナーというか常識
一応、cygwin の gcc-3.4.4 でやってみたけど
結果に変化は無かった
#include <math.h>
#include <stdio.h>
int main(void)
{
int i,j,f;
for(i=2;i<1000;i++){
f=0;
for(j=2;j<sqrt(i);j++){
if(i%j == 0)
f=1;
}
if(f==0)
printf("%d ",i);
}
return 0;
}
0574デフォルトの名無しさん
2009/11/28(土) 19:11:12どこかだよw
0575デフォルトの名無しさん
2009/11/28(土) 19:19:23よく考え直してみます
ありがとうございました
ちなみに出力結果が違ったというのは以下のようになっていました
言葉が足りずすいません
書き変え前
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 1
07 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 2
23 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 3
37 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 4
57 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 5
93 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 7
19 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 8
57 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 9
97
書き変え後
2 3 4 5 7 9 11 13 17 19 23 25 29 31 37 41 43 47 49 53 59 61 67 71 73 79 83 89 97
101 103 107 109 113 121 127 131 137 139 149 151 157 163 167 169 173 179 181 191
193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 289 293
307 311 313 317 331 337 347 349 353 359 361 367 373 379 383 389 397 401 409 419
421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 529 541
547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 841 853 857 859 863 877 881 883 887 907 911 919 929 937
941 947 953 961 967 971 977 983 991 997
0576デフォルトの名無しさん
2009/11/28(土) 19:21:07一々そんなの書かなくても普通はぱっとみて分かる。
573が底抜けに頭悪いだけだから気にすんな。
0577デフォルトの名無しさん
2009/11/28(土) 19:27:35いえ自分も気をつけるようにします
それと最後に一つ聞きたいんですが>>571のようにbreak;は入れた方がいいんですかね?
0578デフォルトの名無しさん
2009/11/28(土) 19:28:410579573
2009/11/28(土) 19:30:320580デフォルトの名無しさん
2009/11/28(土) 19:30:40なるほど
ありがとうございました
0581デフォルトの名無しさん
2009/11/28(土) 22:13:18書き直しました。
ttp://www.dotup.org/uploda/www.dotup.org405932.c
引数の並べ方の順番がいつも適当なのですが、
並べ方の順番の規則、のようなものがあれば、教えてください。
0582581
2009/11/29(日) 00:14:33ttp://www.dotup.org/uploda/www.dotup.org406494.c
0583デフォルトの名無しさん
2009/11/29(日) 00:18:23もしよろしかったらご教授ください。よろしくおねがいします。
#include<stdio.h>
void put_stringn(const char str[],int no)
{
int i;
for(i=0;i<=no;i++)
printf("%s",str);
}
int main(void)
{
int y;
char x[10];
printf("文字列を入力してください:");scanf("%s",x);
printf("何回表示するか入力してください:");scanf("%d",y);
put_stringn(x,y);
putchar('\n');
return(0);
}
0584デフォルトの名無しさん
2009/11/29(日) 00:19:59T_BAR Bar;
int *Gr;
}T_BAR;
T_BAR STRC_BAR;
STRC_BAR = (T_BAR *)malloc(DoubleStr);
これってどこに何の値が入るのですか。
0585デフォルトの名無しさん
2009/11/29(日) 00:20:380586デフォルトの名無しさん
2009/11/29(日) 00:21:590587デフォルトの名無しさん
2009/11/29(日) 00:23:08>>551
0588デフォルトの名無しさん
2009/11/29(日) 00:25:29一文字しか取れへんような気もするが!
0589デフォルトの名無しさん
2009/11/29(日) 00:31:410590デフォルトの名無しさん
2009/11/29(日) 01:20:35ぐはっ初歩的過ぎてすげ-ショックorzすみませんありがとうございました。
ただでさえ&忘れるのに文字列には&つけないとかわからなくなるー
0591デフォルトの名無しさん
2009/11/29(日) 08:40:45&x[0]とでもしておけばおk
0592デフォルトの名無しさん
2009/11/29(日) 14:42:59returnで返すのかvoidでよいのかよくわからないです
setupper(str)
void setupper(char *s)
{
while(*s!='\0'){
if(*s>='a' && *s<='z')
*s+='a'-'A';
}
}
0593デフォルトの名無しさん
2009/11/29(日) 14:56:00toupperつかえよ
0594デフォルトの名無しさん
2009/11/29(日) 16:20:39> printf("文字列を入力してください:");scanf("%s",x);
> printf("何回表示するか入力してください:");scanf("%d",y);
これって
scanf("%s",x);
だと改行文字がバッファに残るから
scanf("%d",y);
で入力できないんじゃないの?
scanf("%d",&y);にしたとしても
0595デフォルトの名無しさん
2009/11/29(日) 16:34:440596デフォルトの名無しさん
2009/11/29(日) 16:35:330597デフォルトの名無しさん
2009/11/29(日) 16:43:130598デフォルトの名無しさん
2009/11/29(日) 16:52:180599デフォルトの名無しさん
2009/11/29(日) 17:01:41そういわれたらそうなんですがここは使わない場合を教えていただければ幸いです
0600デフォルトの名無しさん
2009/11/29(日) 17:13:27returnで返すならvoidじゃだめだろ?
0601デフォルトの名無しさん
2009/11/29(日) 17:14:28voidでもreturnくらいできるだろ
0602デフォルトの名無しさん
2009/11/29(日) 17:16:27そのreturnに意味はあるのか?
0603デフォルトの名無しさん
2009/11/29(日) 17:16:43どうやってその関数を使用するのかをまず決めないとな。
0604デフォルトの名無しさん
2009/11/29(日) 17:17:50{
なんたらかんたら
return void;
}
0605デフォルトの名無しさん
2009/11/29(日) 17:18:40柴田望洋の本には、
アルファベットが連続した文字コードになっているのは、文字コード体系によっては正しくないので、
そういう前提で組むな。と書いてありますが、とりあえず>>592さんの作りたいのは、こんな感じでしょうか?
#include <stdio.h>
#define LEN 10
void setupper(char *s);
int main(void)
{
char str[LEN+1];
printf("英小文字と英大文字を混ぜて%d文字以内の文字列を入力してください\n",LEN);
scanf("%s", str);
puts("\n大文字に揃えるように変換します");
setupper(str);
puts(str);
return 0;
}
void setupper(char *s)
{
while(*s!='\0'){
if(*s>='a' && *s<='z')
*s -='a'-'A';
s++;
}
}
0606デフォルトの名無しさん
2009/11/29(日) 17:27:02ポインタで受けたほうがよい。
returnは1つのreturnにつき1つの値しか返せない。
実際には、例えば return A1, A2, A3, A4,......と出来るなら
そのとおりにいっぱい取りたいこともよくある。
0607デフォルトの名無しさん
2009/11/29(日) 17:27:48*s-='a'-'A';と増分するのを忘れてましたね
ありがとうございました
0608デフォルトの名無しさん
2009/11/29(日) 19:01:580609デフォルトの名無しさん
2009/11/29(日) 19:05:590610デフォルトの名無しさん
2009/11/29(日) 19:07:300611デフォルトの名無しさん
2009/11/29(日) 19:15:210612デフォルトの名無しさん
2009/11/29(日) 19:18:320613デフォルトの名無しさん
2009/11/29(日) 19:43:45ヘッダは定義部分
ソースは定義したものの中身
こう区分けすれば分かりやすい
だからソースファイルにあるものは必ず関数のみ
インクルードファイルはヘッダ除いてなし
グローバル変数もなし
これがベスト
0614デフォルトの名無しさん
2009/11/29(日) 19:47:542人以上で共同開発するようになるとありがたみがわかる
0615デフォルトの名無しさん
2009/11/29(日) 19:49:22フルコンパイルに5分以上かかるようになるとありがたみがわかる
0616デフォルトの名無しさん
2009/11/29(日) 19:49:50*.hはjavadocみたいなものって事でいいんですか?
0617デフォルトの名無しさん
2009/11/29(日) 19:54:40#include "FuckOSX.h"
#include "FuckinMacin.h"
#include "FuckJobs.h"
#define FUCKINTOSH 0
int global;
int main(void)
{
・・・・・
とかやってるようなのはダメだということ。
この例なら、
グローバル変数まではヘッダに書く
ソースに書くのはmainだけ
0618デフォルトの名無しさん
2009/11/29(日) 20:00:22#include <universalstudioJaponese.h>
とかやってはいけない。
#ifndef __Japonese_H__
#define __Japonese_H__
#include <universalstudioJaponese.h>
#endfi
これでなければいけない。
0619デフォルトの名無しさん
2009/11/29(日) 20:01:27および
snprintf
はC言語標準でしょうか?
0620デフォルトの名無しさん
2009/11/29(日) 20:04:52int add(int a, int b)
{
return a + b;
}
int main(void)
{
int (*func)() = add;
printf("2 + 3 = %d\n", (*func)(2, 3));
return 0;
}
これでちゃんと動いたんですが、関数ポインタの引数の型って省略していいんですか?
低水準なところはまだよく分からないんですが、呼び出し規約とか関係したりしますか?
もし省略して問題ないなら利用したいんですが……。
0621デフォルトの名無しさん
2009/11/29(日) 20:11:080622デフォルトの名無しさん
2009/11/29(日) 20:13:120623デフォルトの名無しさん
2009/11/29(日) 20:17:1832bitでも64bit整数渡すと破綻する。
0624デフォルトの名無しさん
2009/11/29(日) 20:17:430625デフォルトの名無しさん
2009/11/29(日) 20:19:59うん
0626デフォルトの名無しさん
2009/11/29(日) 20:22:45もしかして
C99からだったりしますか?
0627625
2009/11/29(日) 20:34:270628デフォルトの名無しさん
2009/11/29(日) 20:46:290629デフォルトの名無しさん
2009/11/29(日) 20:53:55intと同じサイズのものなら渡すことが出来るということですね。
省略時に引数の個数は問題にならないのですか?
0630デフォルトの名無しさん
2009/11/29(日) 20:58:230631デフォルトの名無しさん
2009/11/29(日) 20:59:45アホか。
0632デフォルトの名無しさん
2009/11/29(日) 21:08:46と書くと、最初の要素だけでなく全てがゼロクリアされるということですが、
それは規格のどの辺に書かれていますか?
また、
char mojiretsu[100]={0,0,0};
と書いたらどうなるのでしょう?
0633デフォルトの名無しさん
2009/11/29(日) 21:11:15と書いたらどうなるのでしょう?
0634デフォルトの名無しさん
2009/11/29(日) 21:13:160635デフォルトの名無しさん
2009/11/29(日) 21:14:03Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/555-563
0636デフォルトの名無しさん
2009/11/29(日) 21:28:08なにこのガラパゴス的適応しちゃった感満点なソース。
0638632
2009/11/29(日) 21:29:440639デフォルトの名無しさん
2009/11/29(日) 21:33:090640デフォルトの名無しさん
2009/11/29(日) 21:39:26staticではありません。
普通のauto変数です。
0641デフォルトの名無しさん
2009/11/29(日) 21:49:55635のリンク先見ればわかるだろ。
0642デフォルトの名無しさん
2009/11/29(日) 23:12:21現状、記憶ゲームではなく、
タイピングゲームになっています。
キーバッファをクリアする方法をwebで
調べても分かりませんでした。
あと、MS-DOSのコマンド"cls"を使っていますが、
環境に依存しない画面クリアの方法も分かりませんでした。
その他、気付いた点があれば、アドバイスお願いします。
ttp://www.dotup.org/uploda/www.dotup.org410223.c
0643デフォルトの名無しさん
2009/11/29(日) 23:58:280644デフォルトの名無しさん
2009/11/30(月) 00:02:550645デフォルトの名無しさん
2009/11/30(月) 00:37:12もしかして gets に渡すバッファのこと言ってる?
0646デフォルトの名無しさん
2009/11/30(月) 00:41:11gets に渡すために用意したバッファを初期化して 0 で埋めてるのも無意味。
gets は中身関係なく上書きするだけ。
0647デフォルトの名無しさん
2009/11/30(月) 00:45:010648デフォルトの名無しさん
2009/11/30(月) 00:46:38これはプリンタに対する命令だから。
ページ送り命令な。
0649642
2009/11/30(月) 00:50:02それなら別の方法を考えたほうが良さそうですね。
>>645
ちょっと変数の名前とコメントが紛らわしかったですが、
キーバッファはbufのことではないです。
今のままだと、数字が画面に表示されているときに
先に入力ができてしまいます。
「入力してください」が表示してから、
入力を受け付けるようにしたいのです。
0650デフォルトの名無しさん
2009/11/30(月) 00:51:37sprintfを使って
snprintfと等価な機能をもつ自作関数を実装することは出来ませんか?
0651デフォルトの名無しさん
2009/11/30(月) 00:53:370652デフォルトの名無しさん
2009/11/30(月) 00:56:18先行入力は本来は利点なんだけどな。
0653デフォルトの名無しさん
2009/11/30(月) 00:59:22sprintfを使わないで実装する事は可能です。
0654デフォルトの名無しさん
2009/11/30(月) 01:05:160655デフォルトの名無しさん
2009/11/30(月) 01:48:57win:system("cls")
unix:system("clear")
0656デフォルトの名無しさん
2009/11/30(月) 01:57:250657650
2009/11/30(月) 06:33:47ちょっと考え直して来ます。
0658デフォルトの名無しさん
2009/11/30(月) 11:19:44for(i = 0; i < 10; i++) {
sum(a, b);
}
関数内の変数の中身は1回ごとに初期化されますか?
なんだかおかしい結果が出たんですが
0659デフォルトの名無しさん
2009/11/30(月) 11:31:43但し、staticならば最初の一回だけ。
0660デフォルトの名無しさん
2009/11/30(月) 12:27:31具体的にお願いします。
0661デフォルトの名無しさん
2009/11/30(月) 12:29:520662デフォルトの名無しさん
2009/11/30(月) 12:37:110663デフォルトの名無しさん
2009/11/30(月) 12:38:470664デフォルトの名無しさん
2009/11/30(月) 13:08:000665デフォルトの名無しさん
2009/11/30(月) 14:21:53関数内で文字列である仮引数にH.を連結させているのですが、なぜかforした分だけ仮引数にH.が連結されてしまっています
実引数と仮引数の名前は一緒にしていますがこれは問題ないはずですよね?
0666デフォルトの名無しさん
2009/11/30(月) 14:24:28ソースplz
0667デフォルトの名無しさん
2009/11/30(月) 15:08:31バッファの件だが、環境依存しない良い方法を思いついたよ。
バッファリングはプロセス毎のものだから、入力だけを別プロセスにすればいい。
#include <stdio.h>
int main(){
char b[128];
return atoi(gets(b));
}
これをコンパイルして inp.exe としておいて、
本体のプログラム内で入力が必要になったところで
inp = system("inp");
とすればいい。
0668デフォルトの名無しさん
2009/11/30(月) 15:36:19system関数の返り値が環境依存
0669665
2009/11/30(月) 16:00:20ソース
なんだかもういろいろとおかしいような気もしますが
0670デフォルトの名無しさん
2009/11/30(月) 16:06:230671デフォルトの名無しさん
2009/11/30(月) 16:42:440672デフォルトの名無しさん
2009/11/30(月) 17:17:021 2 3
2 4 5
3 5 6
のように、対角線の上と下が対称になっているものです。
これを通信で送りたいのですが、当然半分にして送ろうとして
c=0; for(i=0;i<N;i++) for(j=i;j<N;j++) {temp[c]=leng[i*N+j];c++;}
として、上三角だけをtempにつめて送ることにしました。
このとき、受信側では、特定の要素だけを取り出したいのですが
たとえば、あるプロセッサでは、leng[2*N+2]を取り出したいとすると、
tempのどこに入っているかを調べたいのです。
これは、多数のプロセッサで、またはスレッドで動作させるので
なるべく計算量が少なく求めたいのですが
いい方法はないでしょうか。
0673デフォルトの名無しさん
2009/11/30(月) 17:20:41それをさらに最適化したいというなら別だが
0674デフォルトの名無しさん
2009/11/30(月) 17:22:09どういう式になるかわからないので、教えていただきたいのですが。
0675デフォルトの名無しさん
2009/11/30(月) 17:23:58よく見てないけど
strcat(tripkey, "H.");
してりゃ当然なんじゃ?
0676デフォルトの名無しさん
2009/11/30(月) 17:35:44ウィソドウズint 13h
アンアイクスint 80h
0677デフォルトの名無しさん
2009/11/30(月) 17:43:37有名な割にはあまり役に立たない等差数列の和の公式が役に立つところじゃね?
0678デフォルトの名無しさん
2009/11/30(月) 17:48:51idx = i*N+j-i*(i+1)/2
ということで、動かしてみます。
0679デフォルトの名無しさん
2009/11/30(月) 18:08:41ありがとうございました。
図を描いて考えてみたら、すぐでした……。
0680デフォルトの名無しさん
2009/11/30(月) 18:50:14idx=f(i,j)は簡単だけど
i=g(idx) j=h(idx) ってなる関数が思いつかないや。
0681デフォルトの名無しさん
2009/11/30(月) 19:59:310682デフォルトの名無しさん
2009/11/30(月) 20:04:320683デフォルトの名無しさん
2009/11/30(月) 20:11:33いやいや双方向だからw
0684デフォルトの名無しさん
2009/11/30(月) 20:12:310685デフォルトの名無しさん
2009/11/30(月) 20:14:22{
for(*i=0;;(*i)++) for(*j=0;*j<N-*i; (*j)++) if(idx--==0) return;
}
こんなんで十分じゃね?
0686デフォルトの名無しさん
2009/11/30(月) 20:40:13いや、実装はできるんだが、idxを求めるみたいに
式一本でできたらきれいだなと思ったんだが。
0687デフォルトの名無しさん
2009/11/30(月) 20:42:01void f(int idx, int *i, int *j) {
for(*i=0; ; (*i)++) for(*j=*i; *j<N; (*j)++) if(idx--==0) return;
}
だな。
0688デフォルトの名無しさん
2009/11/30(月) 20:55:39for()
for()
for()
for()
for()
ナンボ繋げんねん
0689デフォルトの名無しさん
2009/11/30(月) 20:56:33一工夫加えると1回のforで終わんねん
いいかげんにせえや
0690デフォルトの名無しさん
2009/11/30(月) 20:57:43実例をば
0691デフォルトの名無しさん
2009/11/30(月) 20:59:11式を短くすることだけにこだわった効率の悪いコードを書くんだろうなw
0692デフォルトの名無しさん
2009/11/30(月) 21:02:32for(j=0, j<10, j++)
A[i] = B[j];
↓
for(i=0, j=0; (i < 10) && (j < 10); )
if(j == 10)
A[i] = B[j];
j++;
else
・
・
こんなの見たことある。
0693デフォルトの名無しさん
2009/11/30(月) 21:03:17間違った
!=
0694デフォルトの名無しさん
2009/11/30(月) 21:04:58yoisugitaka.
0695デフォルトの名無しさん
2009/11/30(月) 21:16:41「ifは少なくしろ」
「構造体に16個も変数入れるな それ全部short int 1つで済む」
0696デフォルトの名無しさん
2009/11/30(月) 22:07:31idx=((i<j?(i^=j,j^=i,i^=j):i),i+j*N-((N+1)*N)/2);
0697デフォルトの名無しさん
2009/11/30(月) 22:14:46mallocをした時以外はfreeをしなくてもよいのでしょうか?
0698デフォルトの名無しさん
2009/11/30(月) 22:23:090699デフォルトの名無しさん
2009/11/30(月) 22:23:24calloc
realloc
strdup
asprintf
vasprintf
など
0700デフォルトの名無しさん
2009/11/30(月) 22:34:21ありがとうございます
>>699
最近Cを勉強をスターとしたのでよくわからないのですが、
int *hoge = &source;
みたいな奴以外で、動的にメモリ確保した場合だけfreeをすればおk?
0701デフォルトの名無しさん
2009/11/30(月) 23:14:10char s2[40] = "GHIJKL";
void Stringcat(char *s1, const char *s2)
{
while ( ( *s1++ ) != '\0' )
;
s1--;
while (((*s1++) = (*s2++)) != '\0')
;
}
文字列連結の関数なのですが、
while (((*s1++) = (*s2++)) != '\0')//これが何故機能するのかわかりません。
最初の*s1,*s2が何故無視なれないのでしょうか??
0702701
2009/11/30(月) 23:22:250703デフォルトの名無しさん
2009/11/30(月) 23:41:24const char *p;
は、pが指している文字列の中身を変えられない。
(*pはchar型の定数)
pがどこを指すのかは変えられる。
0704デフォルトの名無しさん
2009/11/30(月) 23:46:05後置きインクリメントについて勉強してくれ。
0706デフォルトの名無しさん
2009/12/01(火) 07:04:51プログラムは動かないとか聞いたんだけど本当?
BCC使ってるんですがXPで作ったものはvistaや7じゃだめ?64bitだと動かないのは知ってる
0707デフォルトの名無しさん
2009/12/01(火) 08:05:34WindowsでビルドしたプログラムはLinuxで動かないとかそういうこと。
32bit XPでビルドしたプログラムなら、必要なものをちゃんと持ってい
けばVistaや7や64bit Windowsでも動くよ。
0708デフォルトの名無しさん
2009/12/01(火) 10:43:11嘘
世の中にはクロスコンパイラという物があってたくさん使われている
0709デフォルトの名無しさん
2009/12/01(火) 12:04:33じゃないとDSとかWiiのゲームどうするんだよ。
0710デフォルトの名無しさん
2009/12/01(火) 12:06:25>コンパイラしたときのOS
「コンパイルしたときにターゲットとしたOS」のことでは?
0711デフォルトの名無しさん
2009/12/01(火) 12:08:050712デフォルトの名無しさん
2009/12/01(火) 12:08:15前に作ったトリップ生成プログラムに継ぎ足す形で検索プログラムを作ってみたものの結果がどうもおかしいです
生成プログラムだけなら正しい結果を出力しているし環境も変えていないのですがなぜでしょうか?
0713デフォルトの名無しさん
2009/12/01(火) 12:39:36vistaで関数の動作が微妙に変わっちゃって、動かなくなったものもあるみたいだよ
0714デフォルトの名無しさん
2009/12/01(火) 12:52:17675に礼を言うのが先じゃねーのか?w
0715デフォルトの名無しさん
2009/12/01(火) 13:03:30そうでした・・・
お礼を忘れるなんて最低ですね・・・
>>675
あらためてご指摘ありがとうございました
0716デフォルトの名無しさん
2009/12/01(火) 14:04:470717デフォルトの名無しさん
2009/12/01(火) 16:37:260718デフォルトの名無しさん
2009/12/01(火) 16:47:04質問は日本語かC言語でよろしく。
0719デフォルトの名無しさん
2009/12/01(火) 16:52:20int
main(void)
{
printf("%s\n", 0x09 == '\t' ? "おk" : "NG");
return 0;
}
0720デフォルトの名無しさん
2009/12/01(火) 17:02:32その発想はなかった...
0721デフォルトの名無しさん
2009/12/01(火) 17:22:540722デフォルトの名無しさん
2009/12/01(火) 17:48:340723デフォルトの名無しさん
2009/12/01(火) 18:43:27嘘臭いが本当な豆知識
Windowsは64bitOSでも意外と32bitピログラムが動くものだが
.NETを使って32bitOS上で組んだプログラムは 64bitOSでは動かない。
SDKにあるフラグ変更プログラムでフラグを立ててやらないと動かないのである。
0724712
2009/12/01(火) 22:41:24なんだかそのせいで正しい結果が出ていないような気がするのですが代わりになるようなものありますか?
0725デフォルトの名無しさん
2009/12/01(火) 22:42:190726デフォルトの名無しさん
2009/12/01(火) 22:43:02intは8バイト?
0727デフォルトの名無しさん
2009/12/01(火) 22:46:580728デフォルトの名無しさん
2009/12/01(火) 23:08:30それは OS の仕様じゃなくて、コンパイラの実装の問題だから、
使ってるコンパイラ次第としか言いようがない。
0729デフォルトの名無しさん
2009/12/01(火) 23:10:35char が signed と unsigned で選べるみたいに。
0730デフォルトの名無しさん
2009/12/01(火) 23:15:220731デフォルトの名無しさん
2009/12/01(火) 23:16:34OSが提供するヘッダファイルと型が合ってないと、システムコールも呼べないし
実質OSで決まるのでは?
0732デフォルトの名無しさん
2009/12/01(火) 23:19:01short か long かは signed と unsigned のようにどちらかの省略であるべき、と思う人といるようだが
もまいらどっち?
0733デフォルトの名無しさん
2009/12/01(火) 23:19:490734デフォルトの名無しさん
2009/12/01(火) 23:27:04誰もそんな話はしてないだろ。
0735デフォルトの名無しさん
2009/12/01(火) 23:52:09どっちって聞かれても、どちらにも当てはまらないんだが。
0736デフォルトの名無しさん
2009/12/02(水) 00:02:45short int
long int
って。
だから int64 みたいな型名にはやたら腹が立つ。
じゃあそれは "int64 int" の略なのかよ、みたいな。
0737デフォルトの名無しさん
2009/12/02(水) 00:15:56main()
{
return(0);
}
には short とも long とも書いてなく
気持ちの中ではむしろ char くらいだろ
int32 main()
は俺もやだ
0738デフォルトの名無しさん
2009/12/02(水) 00:16:24亀ですまないが、こんなのもあった。
http://practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10
0739デフォルトの名無しさん
2009/12/02(水) 00:17:120740デフォルトの名無しさん
2009/12/02(水) 00:22:21なみに気持ち悪い
0741デフォルトの名無しさん
2009/12/02(水) 00:30:41mainの戻り値ってOSへのリターンコードでしょ?floatって許されるの?
0742デフォルトの名無しさん
2009/12/02(水) 00:32:12CygwinでASCII以外が扱えると思ってはいけない。
無料版のVisual StudioでC/C++を使ってください。
0743デフォルトの名無しさん
2009/12/02(水) 00:32:18short/int/longが16/32/64ビットのようなintがshortともlongとも違う環境のことをどうお考えで?
0744デフォルトの名無しさん
2009/12/02(水) 00:35:48x86/x64/Any CPU周りのことか?
0745デフォルトの名無しさん
2009/12/02(水) 00:35:590746デフォルトの名無しさん
2009/12/02(水) 00:40:290747デフォルトの名無しさん
2009/12/02(水) 00:45:065.1.2.2.1 Program Startup の 1 でおkとされている
0748デフォルトの名無しさん
2009/12/02(水) 00:50:31<stdint.h>で我慢してください。
個人的には、このたびやっとVCにもやってくるのが嬉しい。
0749デフォルトの名無しさん
2009/12/02(水) 00:54:210750デフォルトの名無しさん
2009/12/02(水) 01:04:52プッ
0751デフォルトの名無しさん
2009/12/02(水) 01:31:01--input-charset とか --exec-charset とかそういうのがあるはず
0752デフォルトの名無しさん
2009/12/02(水) 01:45:40ASCII以外が入ってたら
そりゃもうバイナリファイルだろ。
0753デフォルトの名無しさん
2009/12/02(水) 01:51:27いやわかってないよな?
なぜそんな事を言った?
0754デフォルトの名無しさん
2009/12/02(水) 09:25:400755デフォルトの名無しさん
2009/12/02(水) 13:09:250756デフォルトの名無しさん
2009/12/02(水) 17:06:310757デフォルトの名無しさん
2009/12/02(水) 17:09:54hwndの持ち主のプロセス探してパイプ作って送ってやればいいかもしれないが
送られた方では関知しないであろう。もっと具体的に何がしたいのか。
0758デフォルトの名無しさん
2009/12/02(水) 17:26:53ちなみにメッセージキューはスレッドが所持。
0759デフォルトの名無しさん
2009/12/02(水) 17:58:40#include <stdio.h>
int fib()
{
static int a = 0, b = 1, t;
t = a + b, a = b, b = t;
return a;
}
int main(void)
{
int i;
for (i = 0; i < 10; i++) {
printf("%d\n", fib());
}
return 0;
}
0760デフォルトの名無しさん
2009/12/02(水) 18:00:49だからよ
int8
int16
int32
int64
こういうふうに型を決めればいいのに何でやらないのか。
0761デフォルトの名無しさん
2009/12/02(水) 18:05:150762デフォルトの名無しさん
2009/12/02(水) 18:05:500763デフォルトの名無しさん
2009/12/02(水) 18:06:03奇妙さでは、これも負けていない。
#include <stdio.h>
#define loop(v,n,b) for(v=0;v<n;v++){b}
int main(void)
{
int i;
loop(i, 20,
//for (i = 0; i < 10; i++) {
printf("%d ", i);
//}
);
return 0;
}
0764デフォルトの名無しさん
2009/12/02(水) 18:07:31移植性がなくなるからです
全ての環境でint64が用意できるとは限りません
char <= short int <= int <= long int
としておけば、少なくともcharと同じ大きさかそれ以上の大きさであれば良いので
移植性があります
もしかして、int64は、64bitではないということか
0765デフォルトの名無しさん
2009/12/02(水) 18:08:02サポートしなきゃいい。
ロシアや中国の計算機に多いが
いいだろ
0766デフォルトの名無しさん
2009/12/02(水) 18:12:26サポートしなくていいんだから
0767デフォルトの名無しさん
2009/12/02(水) 18:13:56そうなると標準は
int18
になるわけだけど、それで良いのか?
0768デフォルトの名無しさん
2009/12/02(水) 18:20:560769デフォルトの名無しさん
2009/12/02(水) 18:23:57Java とかに行ったほうがいいんじゃね?
むいてないよ。
0770デフォルトの名無しさん
2009/12/02(水) 18:29:43printf("演算子を入力してください>");scanf("%c",&c); ←この行のscanf
printf("数値を入力してください>");scanf("%d",&b);
と記述すると上記の位置のscanfがスキップされて3行目のprintfが処理されてしまいます
上記の行を最初に持って来ると問題なく動くんですが
他に解決法は有りませんでしょうか?
0771デフォルトの名無しさん
2009/12/02(水) 18:36:310772デフォルトの名無しさん
2009/12/02(水) 18:39:13演算子を入力してください>数値を入力してください>
になります
0773デフォルトの名無しさん
2009/12/02(水) 18:45:081発目のscanfで何か入力したあとにリターンキーを押すと
入力した文字や数字
+
リターンコード
と、二回に分けて受け取るために2発目のscanfにはリターンコードが入り、
「なんじゃこりゃ分からん」ってことで処理されてないように見えるだけである。
これを防ぐには、
標準入力から受けとっているなら
fflush(stdin)とか挟むとよい
しかし、これは規格外の使い方である。
0774デフォルトの名無しさん
2009/12/02(水) 19:05:260775デフォルトの名無しさん
2009/12/02(水) 19:11:25プログラミングの勉強するのに
scanf の仕様とかどうでもいい部分で躓いてたらつまらないだろ。
0776デフォルトの名無しさん
2009/12/02(水) 19:12:56Windows?
0777デフォルトの名無しさん
2009/12/02(水) 19:16:49初心者乙
0778デフォルトの名無しさん
2009/12/02(水) 19:25:32プ
0779デフォルトの名無しさん
2009/12/02(水) 20:04:050780デフォルトの名無しさん
2009/12/02(水) 20:36:18gets() でとてつもない長い一行を入力されたあかつきには、バッファオーバーランがまって降ります。
scanf() の安全パターンか、fgets() を使うべき、って大昔から散々いわれているのですけれどもね。
0781デフォルトの名無しさん
2009/12/02(水) 20:41:08オーバーフロー起こした使用者が悪い
0782デフォルトの名無しさん
2009/12/02(水) 20:43:00「引数として」サイズ指定出来るもんないんだっけ?
0783デフォルトの名無しさん
2009/12/02(水) 20:46:29%.*s
0784デフォルトの名無しさん
2009/12/02(水) 21:00:23使用者のせいにするのでは、あなたには成長、進歩などの言葉は無縁でしょうね。
0785デフォルトの名無しさん
2009/12/02(水) 21:02:340786デフォルトの名無しさん
2009/12/02(水) 21:08:580787デフォルトの名無しさん
2009/12/02(水) 21:22:50お前は雑誌のサンプルプログラムに、
いちいち、戻り値のチェックしてないだの文句付けるのか?
0788デフォルトの名無しさん
2009/12/02(水) 21:27:55プログラミングの勉強するのに
バッファオーバーフローどうでもいい部分で躓いてたらつまらないだろ。
0789デフォルトの名無しさん
2009/12/02(水) 21:29:220790デフォルトの名無しさん
2009/12/02(水) 21:31:59そんな甘い考えでは、大事な本番でしくりますよね。
0791デフォルトの名無しさん
2009/12/02(水) 21:33:06当然文句付ける。それが悪習慣になって他のプログラマに迷惑掛けるからな。
0792デフォルトの名無しさん
2009/12/02(水) 22:00:07scanf()より初心者に向いてるとは言いがたい。
0793デフォルトの名無しさん
2009/12/02(水) 22:10:32「ちょっとした練習」なら個人で、ここ以外で好きにすればいい。
ポイントは、入門者が悪習を身に付けないように気を配ろう、というだけの事なんだが?
0794デフォルトの名無しさん
2009/12/02(水) 22:13:090795デフォルトの名無しさん
2009/12/02(水) 22:15:07これから勉強しようという者には参考になる。
0796デフォルトの名無しさん
2009/12/02(水) 22:23:25出力もな。
0797デフォルトの名無しさん
2009/12/02(水) 23:00:46つかscanf()のほうこそ挙動が独特で、初心者がはまってるだろ。
scanf()は使いこなせばいいって言うやついるけど、時間かけて
挙動を理解しても、本番じゃまず使わないし、最初からfgets()使ったほうが
なんぼかいい。
0798デフォルトの名無しさん
2009/12/02(水) 23:08:460799デフォルトの名無しさん
2009/12/02(水) 23:12:20conio は、ただ conio なのである。
0800デフォルトの名無しさん
2009/12/02(水) 23:16:540801デフォルトの名無しさん
2009/12/02(水) 23:43:090802デフォルトの名無しさん
2009/12/02(水) 23:44:21( ´,_ゝ`)プッ
0803デフォルトの名無しさん
2009/12/02(水) 23:53:390804デフォルトの名無しさん
2009/12/02(水) 23:56:082ch初心者?
0805デフォルトの名無しさん
2009/12/03(木) 00:01:54はいはいそう思ってて下さい
俺は宿題程度にはgets()で十分だと思っている
業務用のプログラムには絶対使わないが
要するにケースバイケースという事だ
そんな事も分からないお前こそ進歩がないな
0806デフォルトの名無しさん
2009/12/03(木) 00:07:53少しタイプ量が増えるくらいだし。
0807デフォルトの名無しさん
2009/12/03(木) 00:15:50> 要するにケースバイケースという事だ
練習サボる奴ほど「本番ではすごいんだぜ」って言うんだよな。
0808デフォルトの名無しさん
2009/12/03(木) 00:18:17うるせーないちいち
そんな事は言われなくてもわかってんだよ
それでも敢えてgets()を使うんだよ
0809デフォルトの名無しさん
2009/12/03(木) 00:20:120810デフォルトの名無しさん
2009/12/03(木) 00:20:530811デフォルトの名無しさん
2009/12/03(木) 00:26:22改行文字外したりとか面倒臭いだろ。
0812デフォルトの名無しさん
2009/12/03(木) 00:30:22その練習する部分と関係ないとこでムキになっても仕方ないだろ。
単にバットの素振りするだけなのに
バッターボックスの中じゃないと振らないやいとか駄々こねるのか?
0813デフォルトの名無しさん
2009/12/03(木) 00:41:16危険性も一緒に教えるならいいが、直でソースに組み込みかねない
0814デフォルトの名無しさん
2009/12/03(木) 01:07:17例えが全く理解できない
0815デフォルトの名無しさん
2009/12/03(木) 01:42:540816デフォルトの名無しさん
2009/12/03(木) 01:53:370817デフォルトの名無しさん
2009/12/03(木) 01:58:380818デフォルトの名無しさん
2009/12/03(木) 01:59:07scanf()とか覚えても無駄だよ。
0819デフォルトの名無しさん
2009/12/03(木) 02:10:54PGM Format(MIME:image/x-portable-greymap)のヘッダを解析するプログラムを書いてみてください
0820デフォルトの名無しさん
2009/12/03(木) 02:17:050821デフォルトの名無しさん
2009/12/03(木) 02:21:460822デフォルトの名無しさん
2009/12/03(木) 08:03:33意味わからん
0823デフォルトの名無しさん
2009/12/03(木) 08:07:320824デフォルトの名無しさん
2009/12/03(木) 08:11:350825デフォルトの名無しさん
2009/12/03(木) 08:26:100826デフォルトの名無しさん
2009/12/03(木) 08:35:20ってどう違うの?
0827デフォルトの名無しさん
2009/12/03(木) 09:33:39給与 += 10000;
給与 = +10000;
全然違う!
0828デフォルトの名無しさん
2009/12/03(木) 09:57:450829デフォルトの名無しさん
2009/12/03(木) 10:06:15その2つの例えは私にとって同じことを示しているように思うのですが
私はどこで間違ったのでしょうか?
0830デフォルトの名無しさん
2009/12/03(木) 10:12:55上は追加で、下は上書きだ。
10000 と +10000 は同じだぞ
0831デフォルトの名無しさん
2009/12/03(木) 10:43:09a=+10; は a = 10;
どこが同じに見えるんだかw
0832釣られてみる
2009/12/03(木) 10:59:160833デフォルトの名無しさん
2009/12/03(木) 11:42:00俺は>>829じゃないけど
おそらく給与==\0っていうジョークだろ
0834デフォルトの名無しさん
2009/12/03(木) 11:59:500835デフォルトの名無しさん
2009/12/03(木) 12:06:260836デフォルトの名無しさん
2009/12/03(木) 12:10:460837デフォルトの名無しさん
2009/12/03(木) 12:19:120838デフォルトの名無しさん
2009/12/03(木) 12:22:56unsigned 給与; なら
給与 =+10000; は夢がないし
int 給与; に
給与 += 10000; されたら人生掛ける感じだな
0839デフォルトの名無しさん
2009/12/03(木) 12:26:20最近の宿題の条件をみると、fgets() 使え、というのがわりに多いのですが。
それにgets() の気持ち悪さを理解できないようではセンスがない。
0840デフォルトの名無しさん
2009/12/03(木) 13:00:22自分しか入力しないようなものに
ガチガチのセキュリティなんか組み込んでも意味無いだろ。
0841デフォルトの名無しさん
2009/12/03(木) 13:04:310842デフォルトの名無しさん
2009/12/03(木) 13:14:23fgets使ったところで、たいして手間は増えないだろ。
20年以上前から、すでにfgets推奨が定石だったのに、なぜgetsにそこまでこだわるのか。
0843デフォルトの名無しさん
2009/12/03(木) 13:24:46辞書で頭殴って子ね
0844デフォルトの名無しさん
2009/12/03(木) 13:56:230845デフォルトの名無しさん
2009/12/03(木) 14:03:100846デフォルトの名無しさん
2009/12/03(木) 14:04:53deprecatedね
rも抜けてたけど
0847デフォルトの名無しさん
2009/12/03(木) 14:18:54古い HP-C で泣いた覚えがw
しかも "= +" と書くと、警告出るんだよ。
「"+" は要らんやろ。足したいなら空白をあけず "=+" と書けや。」
0848デフォルトの名無しさん
2009/12/03(木) 14:21:20rが抜けてたどころか、いらんlが入ってるし、cも抜けてるじゃねーかw
0849デフォルトの名無しさん
2009/12/03(木) 17:18:10「スレの趣旨から言って、入門者も見ることを意識している者」と
何故か「自分の好みに口出しをされていると思い込んでいる者」との違い。
まあ、このスレに限った事じゃないが。
0850デフォルトの名無しさん
2009/12/03(木) 17:34:210851デフォルトの名無しさん
2009/12/03(木) 17:53:01基本的なことなのにね(爆)
0852デフォルトの名無しさん
2009/12/03(木) 18:00:510853デフォルトの名無しさん
2009/12/03(木) 18:06:460854デフォルトの名無しさん
2009/12/03(木) 18:21:07このスレで荒らしの出番はありません
お引取りを
0855デフォルトの名無しさん
2009/12/03(木) 18:24:470856デフォルトの名無しさん
2009/12/03(木) 18:25:190857デフォルトの名無しさん
2009/12/03(木) 18:28:38ちゃんと適切に説明すればいいのに
>>775みたいな書き方するから荒れるんだよなー
0858デフォルトの名無しさん
2009/12/03(木) 22:54:570859デフォルトの名無しさん
2009/12/03(木) 23:52:230860デフォルトの名無しさん
2009/12/04(金) 02:58:13多分違う。
後者はgetsでいいよ派を指していると思うが、彼等の言い分はこうだ。
「初心者にfgetsなんて難しいものを進めるのはおかしい。」
0861デフォルトの名無しさん
2009/12/04(金) 02:58:560862デフォルトの名無しさん
2009/12/04(金) 04:48:09mallocで動的に多次元配列を作りたくて以下の関数で、
int malloc_3dim(int ****array3, int row, int column, int oku)
{
int i,j,k;
*array3 = (int***)malloc(sizeof(int**)*row);
for(i=0; i<row; i++){
*(*array3 + i) = (int**)malloc(sizeof(int*)*column);
for(j=0; j<column; j++){
*(*(*array3 + i) + j) = (int*)malloc(sizeof(int)*oku);
for(k=0; k<oku; k++){
array3[i][j][k] = 0;
printf("array3[%d][%d][%d] = %d\n",i,j,k,array3[i][j][k]);
}
}
}
return 1;
}
0863デフォルトの名無しさん
2009/12/04(金) 05:05:53mallocで動的に多次元配列を作りたくて以下の関数で作成することはできわしたんですが、
コメントの部分を有効にするとj=0回目のループでは配列にすべて0が入るのに
j=1回目のループになると配列に0が代入されずアクセス違反になります。
この関数で作成した配列には、main関数内で値を与えるので別にコメントの部分は
必要ないのですが、どうしてアクセス違反になるのか自分ではよくわかりません。
わかる方がいたらご教示お願いします。
int malloc_3dim(int ****array3, int row, int column, int oku)
{
int i,j,k;
*array3 = (int***)malloc(sizeof(int**)*row);
for(i=0; i<row; i++){
*(*array3 + i) = (int**)malloc(sizeof(int*)*column);
for(j=0; j<column; j++){
*(*(*array3 + i) + j) = (int*)malloc(sizeof(int)*oku);
// for(k=0; k<oku; k++){
// array3[i][j][k] = 0;
// printf("array3[%d][%d][%d] = %d\n",i,j,k,array3[i][j][k]);
}
}
}
return 1;
}
0864デフォルトの名無しさん
2009/12/04(金) 07:45:54(*array3)[i][j][k]
じゃないの?
0865デフォルトの名無しさん
2009/12/04(金) 08:21:311回で全て確保しちゃいなよ
0866デフォルトの名無しさん
2009/12/04(金) 10:41:39malloc の戻り値チェックしてない。
再提出。
0867デフォルトの名無しさん
2009/12/04(金) 10:46:310868デフォルトの名無しさん
2009/12/04(金) 10:59:56賢明。ただし一般にサイズがでかいのでグローバル変数に
するのが普通。
0869デフォルトの名無しさん
2009/12/04(金) 11:04:20わからなければ一次元で
どうしてそういうのは実験しないかなあ
0870デフォルトの名無しさん
2009/12/04(金) 11:10:380871デフォルトの名無しさん
2009/12/04(金) 12:25:13int* data = (int*)malloc(sizeof(int)*row*column*oku);
data[i*column*oku + j*oku + k];
みたいに一次元配列で代用したほうが簡単じゃね?
0872デフォルトの名無しさん
2009/12/04(金) 12:29:230873デフォルトの名無しさん
2009/12/04(金) 12:30:13それが。猿段階で思いつくようなことを得意になってア
ドバイスされるとエラくムカつくことがあるな。
0874デフォルトの名無しさん
2009/12/04(金) 12:49:37猿じゃければ簡単なはず
0875デフォルトの名無しさん
2009/12/04(金) 12:51:030876デフォルトの名無しさん
2009/12/04(金) 12:55:52受信者が同じフォントとは限らないって教えてやったほうがいいのか?
変なところで改行されてて、読みにくいったらないんだけど。
一部を引用しようとすると余分な文字がくっついてくるし。
0877デフォルトの名無しさん
2009/12/04(金) 13:00:080878デフォルトの名無しさん
2009/12/04(金) 13:31:42猿みたいな質問してるんだから最後まで土下座しろよな
0879デフォルトの名無しさん
2009/12/04(金) 13:35:01・調べない
・何を知りたいのか口を割らない
・偉そうにされたくない
0880デフォルトの名無しさん
2009/12/04(金) 13:37:380881デフォルトの名無しさん
2009/12/04(金) 13:55:060882デフォルトの名無しさん
2009/12/04(金) 14:00:24何でも調べればわかるんだと思う
何を知りたいのかがわかるのが当たり前だと思う
偉そうにしたい
裏返しただけだが...
0883デフォルトの名無しさん
2009/12/04(金) 14:15:24折り返しをするのはあくまでビュワの仕事だろ。変なとこで改行文字を入れて折り返し擬きをするんじゃねえよぼけ。
読む人が自分と同じビュワ使ってるとか思ってんじゃねえよカス。
0884デフォルトの名無しさん
2009/12/04(金) 15:16:24アドレス値は同じだろ?
0885デフォルトの名無しさん
2009/12/04(金) 15:17:55&を付けなければならないとも限らない
0886デフォルトの名無しさん
2009/12/04(金) 16:51:40gets() 薦めるくらいなら、限定して *scanf() 薦めたほうがまだましかと。
0887デフォルトの名無しさん
2009/12/04(金) 16:52:57アンカーの使い方しらない?
0888デフォルトの名無しさん
2009/12/04(金) 22:08:260889デフォルトの名無しさん
2009/12/04(金) 22:18:010890デフォルトの名無しさん
2009/12/04(金) 22:34:140891デフォルトの名無しさん
2009/12/04(金) 23:22:55*scanf?scanf以外は難しいから薦めないに決まってる。
0892デフォルトの名無しさん
2009/12/04(金) 23:28:130893デフォルトの名無しさん
2009/12/05(土) 04:02:35ちゃんと
(*scanf)( );
こういうふうに括弧付けて書かないと駄目だろ。
*scanf( ); だと
*(scanf( )); になるぞ。
0894デフォルトの名無しさん
2009/12/05(土) 04:45:080895デフォルトの名無しさん
2009/12/05(土) 07:41:350896デフォルトの名無しさん
2009/12/05(土) 08:48:000897デフォルトの名無しさん
2009/12/05(土) 09:22:570898デフォルトの名無しさん
2009/12/05(土) 09:49:07電子メールは、80文字くらいで改行入れるって昔からのしきたりだろ。
0899デフォルトの名無しさん
2009/12/05(土) 09:51:220900デフォルトの名無しさん
2009/12/05(土) 09:56:000901デフォルトの名無しさん
2009/12/05(土) 12:19:05上書きするための文字列のバイト長が異なるからmemcpyが使えない
なんかいい関数無いの?
0902デフォルトの名無しさん
2009/12/05(土) 12:49:20するんだから
>文字列のバイト長が異なる
のは当たり前じゃね?
0903デフォルトの名無しさん
2009/12/05(土) 12:50:440904デフォルトの名無しさん
2009/12/05(土) 12:52:480905デフォルトの名無しさん
2009/12/05(土) 12:55:56まず日本語の勉強から始めろよ。
0906デフォルトの名無しさん
2009/12/05(土) 13:02:24解答できないなら書き込むんじゃねーよ。
二度と来るな。ザマァwww
0907デフォルトの名無しさん
2009/12/05(土) 13:03:280908デフォルトの名無しさん
2009/12/05(土) 14:00:36#include<stdio.h>
int main(void){
printf( "\x1b[0;36m" );
printf( "abc\n" );
}
実行結果は水色の字で abc と表示されると思ったのですが
実際は [0;36mabc と表示されます。
C++ではprintf("\x1b〜 で操作ができないんでしょうか?
0909デフォルトの名無しさん
2009/12/05(土) 14:08:260910デフォルトの名無しさん
2009/12/05(土) 14:13:04C++ だからではなくて、端末の問題。 cmd ではダメ。command.com ではどうですか?
0911デフォルトの名無しさん
2009/12/05(土) 14:14:15古い手段で現在のWindowsの流儀に沿っていない。ANSI.SYSという
DOSの頃からあった標準添付ドライバをconfig.sysに設定しC:¥に置くとかそんなやり方で対応できたっけな Windows 2000の頃までなら
XP以降でそれで出来るかどうかは知らない。
システムフォルダーにANSI.SYSを検索して無ければそのやり方
(エスケープシーケンス)出来ないと思ったほうがいい。
0912デフォルトの名無しさん
2009/12/05(土) 14:22:40やらないほうがいい
VC++はWindows専用の
GUIアプリを作るもので、
コンソールアプリには
適していない。
0913デフォルトの名無しさん
2009/12/05(土) 14:29:53だが Outlook Ekusopress のエンコードには問題ががが
>>901
バイト長が異なるなら、それは上書きと呼べるのかどうか…
"ABCDxxxEFG" → "ABCDyyyyyEFG" なら、
1. "EFG" を memmove で移動。
2. "xxx" の先頭から "yyyyy" を memcpy で書き換え。
0914デフォルトの名無しさん
2009/12/05(土) 14:30:42頭沸いてんのか…?
0916908
2009/12/05(土) 14:47:09プログラミングは様々な事を考慮しないといけないので難しいですね…
今回は飛ばして次の事を勉強してから、また文字の色を変えたくなった時に改めて調べてみます。
0917デフォルトの名無しさん
2009/12/05(土) 15:04:23プラグインは使わない方向で教えていただけませんか?
0918デフォルトの名無しさん
2009/12/05(土) 15:10:55まぁ、レイヤーとなるライブラリを挟めばクロスプラットフォームなプログラムを作ることはできる
Qt, wxWidgets, SDLなど
0919デフォルトの名無しさん
2009/12/05(土) 15:12:21コンパイラの問題ではないし、そもそも C の範疇ですらない。
Windows のコンソールウィンドウを使う以上、ANSI エスケープシーケンスが
使えると思うほうが間違っている。
0920912
2009/12/05(土) 15:29:44間違いとまでは言わないが、Webブラウザが軽く起動出来た上
手軽にアプリに内蔵できるOSで、ソーメン流しみたいに
コンソールに出力させる開発方法はレガシーだろな。
0921デフォルトの名無しさん
2009/12/05(土) 15:53:36気のせいだといいんだけど。
0922デフォルトの名無しさん
2009/12/05(土) 16:06:340923デフォルトの名無しさん
2009/12/05(土) 16:15:430924デフォルトの名無しさん
2009/12/05(土) 16:17:40そういう意味かよw
0925デフォルトの名無しさん
2009/12/05(土) 18:18:48winコンソールアプリってwmain等,wchar_tに対応してるじゃないですか
それで最近はもうunicodeに対応してるのが当たり前で
これからは全部unicodeでやりましょうねって風潮があると思うんですけど
クロスプラットフォーム環境で開発しようと思うと
unixとかlinuxだとunistd.hとかの環境標準関数群がwcharに対応してなくて
いちいち変換するのが二度手間なんですけどそれでも対応した方がいいんでしょうか
unicodeで統一するよりもマルチバイトを基本に必要なときだけwchar_tにした方が
スマートな気がするのですが、世の中はどうしてunicodeで統一する流れになっているのでしょうか?
0926デフォルトの名無しさん
2009/12/05(土) 18:21:18TCHAR でも使っておけばいいんじゃない?
0927デフォルトの名無しさん
2009/12/05(土) 18:39:16sprintf(buffer, "%f", 1.234);
これでbufferに出力する小数の桁数を調整するには
どうすればよいですか?
0928デフォルトの名無しさん
2009/12/05(土) 18:41:00TCHARはよけい面倒。
0929デフォルトの名無しさん
2009/12/05(土) 18:41:01Unicode ←対義→ マルチバイト
じゃないからな。
ワイド ←対義→ マルチバイト
だからな。
Unicode はマルチバイトもワイドもどちらもある。
UTF8 はマルチバイトだし、UTF16 はワイド。
0930デフォルトの名無しさん
2009/12/05(土) 18:43:11例えばgetoptとかを使う場合
使う前にTCHARがwchar_tだったら変換する
っていう処理を入れるってことですかね
他に例えば
char test[128];
strcat(test,argv[0]);
だったのをunicodeに対応するとwcscatを使ってたのですが
TCHARを使おうと思うとTCHAR型に対応した関数を自分で作る必要があるってことでしょうか
それでその関数内でTCHARがどっちか判別してstrなのかwcsなのか使い分けるって感じなんでしょうか
自分は趣味のアマグラマなんですけど
プロの人はこうやって書いてるんでしょうか
>>929
すみませんそのへんはごっちゃになってました
0931デフォルトの名無しさん
2009/12/05(土) 18:44:41もう今となっては使う意味は無いよ。
0932デフォルトの名無しさん
2009/12/05(土) 18:46:34http://wisdom.sakura.ne.jp/programming/c/c57.html
0933デフォルトの名無しさん
2009/12/05(土) 18:50:2795系とNT系が混在してた時期でも、ほとんど機能してなかっただろうしな > TCHAR
0934デフォルトの名無しさん
2009/12/05(土) 19:00:12もしくはwcharに対応したラッパ関数を自分で書く
っていうのがスタンダードなんですね,ありがとうございます.
チラ裏ですが今書いてる物に限れば,非専門の人でも読めるようにしたくて
そのうえでwchar_tくらいはいいだろうと思っていたのですが
wchar_tの変換やラッパ関数が増えると混乱させそうなので
全部charで書き直したいと思います
といった経緯でwchar_tに対応しないシステムが作られ続けるんですね・・・
0935デフォルトの名無しさん
2009/12/05(土) 19:04:52TCHAR系はただのマクロ
__UNICODE__ の有無で
関数を置き換えてくれるよ
0936デフォルトの名無しさん
2009/12/05(土) 19:05:46ありがとうございます。
0937デフォルトの名無しさん
2009/12/05(土) 19:16:16それで呼び出し対象関数がだぶちゃに対応してないってことだろ
それならTCHARでの対応は無理じゃね?
0938デフォルトの名無しさん
2009/12/05(土) 19:23:39ちゃんと書き直さないと型判定エラー出るから置き換えてはくれない記憶が
0939デフォルトの名無しさん
2009/12/05(土) 19:26:27基本的に全部charかな。
wchar_tとかほとんど使わない。
0940デフォルトの名無しさん
2009/12/05(土) 19:52:52>unixとかlinuxだとunistd.hとかの環境標準関数群がwcharに対応してなくて
wchar_t がない…だと?
捨ててしまえ、そんなゴミ環境。
0941デフォルトの名無しさん
2009/12/05(土) 20:16:06システムコールでwcharに対応する必要ってあんまり無いじゃん。
wchar_tという型の定義自体が無い訳は無いと思うよ。
0942デフォルトの名無しさん
2009/12/05(土) 20:30:45VC++も対応してないぞ。ファイル入出力。
STLでも対応してないぞ。fstreamのwstring版はない。
0943デフォルトの名無しさん
2009/12/05(土) 20:32:49C標準化団体がwchar_tのファイル入出力を規定しないから
いつまでたっても、charでやることになる。
環境依存してしまう辛菜。
0944デフォルトの名無しさん
2009/12/05(土) 20:36:05fstream系でconst wchar_t*でファイル名の引数を受け取るやつはVC++独自で存在するぞ。
それがなかったとしても、HANDLEで入出力するようなストリームバッファ・ストリームクラスの派生を作るという手もあるし。
0945デフォルトの名無しさん
2009/12/05(土) 20:37:39実際にwindowsのフォルダ名、ファイル名は、CP932 = SJISだが
使っていて不具合でないだろ。
長いパスさえ、linuxで動作可能な標準のCで扱う方法もある。
カレントディレクトリを、260文字以内ずつ移動していって、ファイル元にたどり着いてから作業すればいい。
0946デフォルトの名無しさん
2009/12/05(土) 20:39:36それつかう位なら、windows.hで使えるCreateFileをつかうだろ。意味なし。他のコンパイラで動かないし
0947デフォルトの名無しさん
2009/12/05(土) 20:43:19独自でなくて、標準関数が両方を受け付けるっていう意味だったんだ。
0948デフォルトの名無しさん
2009/12/05(土) 20:45:00> 実際にwindowsのフォルダ名、ファイル名は、CP932 = SJISだが
それは違う。Windows 95/NTのLFNなFATのときからUnicodeだった。
(Win9xのAPIではマルチバイト文字でしか扱えなかったけど)
0949デフォルトの名無しさん
2009/12/05(土) 20:46:340950デフォルトの名無しさん
2009/12/05(土) 20:47:220951デフォルトの名無しさん
2009/12/05(土) 20:50:44windowsでファイル名の文字コードを変換するにはどうすればいい
0952デフォルトの名無しさん
2009/12/05(土) 20:57:41ファイル名にunicodeにしかない文字使えるし、unicodeなんじゃね?
0953デフォルトの名無しさん
2009/12/05(土) 21:12:02http://d.hatena.ne.jp/hideakii/20091202/1259721823
0954デフォルトの名無しさん
2009/12/05(土) 21:14:51これはwindowsじゃなくてツールが一般にunicodeに対応してないってことじゃね
0955デフォルトの名無しさん
2009/12/05(土) 21:19:35€.txt てファイルはどうなってるんだ。
0956デフォルトの名無しさん
2009/12/05(土) 21:23:18全然そんなこと書いてないんだが。
0957デフォルトの名無しさん
2009/12/05(土) 21:30:43日本で標準設定で使うとCP932になって、それ以外だとunicode表示らしい。
0958955
2009/12/05(土) 21:33:360959デフォルトの名無しさん
2009/12/05(土) 21:34:180960デフォルトの名無しさん
2009/12/05(土) 21:35:370961デフォルトの名無しさん
2009/12/05(土) 21:36:07それはシステム標準のロケールをどこにするかって話じゃね?
それによってunicode未対応のプログラムの挙動が変わるだけでファイル名はunicodeでは
0962デフォルトの名無しさん
2009/12/05(土) 21:36:21時代遅れ乙
0963デフォルトの名無しさん
2009/12/05(土) 21:36:59charだけを使うことが出来る。
0964デフォルトの名無しさん
2009/12/05(土) 21:37:08米国人乙
0965デフォルトの名無しさん
2009/12/05(土) 21:38:33FTPにでも上げて貰えるとわかりやすいのだが。
0967デフォルトの名無しさん
2009/12/05(土) 21:40:470968デフォルトの名無しさん
2009/12/05(土) 21:42:53FAT32:sjis
NTFS:Unicode
だって
ただunicodeに対応してないプログラムで
ファイル名を取得してファイル名を変えるとかすると
強制的にsjisになっちゃうってさ
だけどファイル名操作でunicodeに対応したwin32apiってあるっけ?
0969デフォルトの名無しさん
2009/12/05(土) 21:45:11> 強制的にsjisになっちゃうってさ
SJISの範囲の文字しか使えないってことで、ファイル名にSJISが使われるってことじゃないだろ。
0971デフォルトの名無しさん
2009/12/05(土) 21:46:34この説でだたしいって事だろ
0972デフォルトの名無しさん
2009/12/05(土) 21:47:490973デフォルトの名無しさん
2009/12/05(土) 21:47:56W付のapiってそうじゃないの?
A付のAPIも内部でワイド文字に変換されるって話だし。
0974デフォルトの名無しさん
2009/12/05(土) 21:51:10インターネット上で「Windows のファイル名の文字コードは SJIS が使用される」
という情報が散見されますが、正確には、Windows2000, WindowsXP などの
NT 系 Windows カーネルでは、Windows カーネル内部では、
ファイル名は全て Unicode で扱われており、状況によって SJIS への変換が行われます。
具体的には、次のような動作になります。
(1) Windows カーネル内部では Unicode を使用
(2) NTFS ファイルシステムに保存する際は Unicode を使用
(3) CIFS プロトコルによるファイル転送の際は Unicode を使用
(5) Windows 上で稼動するアプリケーションには、Windows カーネルが SJIS に変換して渡す
http://www-06.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-007ACA9B
0975デフォルトの名無しさん
2009/12/05(土) 21:52:570976デフォルトの名無しさん
2009/12/05(土) 21:54:14これはマルチプラットフォームのソースコードを書く上で困ったことになるな。
fopenなどファイル操作をする部分は、そのまま使えず linix windowsごとにラッパーするしかないな。
0977デフォルトの名無しさん
2009/12/05(土) 21:59:17linuxに合わせるにはラッパーは、UTF8を出力するようにしないと駄目か。
wchar_t型は、linuxの標準関数にないからな。
char utf8で入出力すると、fopenなども独自に書き換えないといけなくなり大作業になるな。
0978デフォルトの名無しさん
2009/12/05(土) 22:00:030979デフォルトの名無しさん
2009/12/05(土) 22:00:420980デフォルトの名無しさん
2009/12/05(土) 22:00:49FAT(16/32両方)も、事実上Unicode。
たしかに、8.3の短いファイル名はCP932などのマルチバイトだけど、
LFN(長いファイル名)はUTF-16LEで扱っている。
http://technet.microsoft.com/en-us/library/cc938438.aspx
0981デフォルトの名無しさん
2009/12/05(土) 22:02:40対応してないのはgetoptだとかgetenvとかのC標準じゃなくて環境標準関数だけで
いまいち話分からずに横レスですまんが
0982デフォルトの名無しさん
2009/12/05(土) 22:04:35入出力で必要があれば変換。
0983デフォルトの名無しさん
2009/12/05(土) 22:07:36wprintfとかfgetwsとかはあるけど、残念ながらfopenのwchar_t版はないの。POSIXにも標準Cにも。
0984デフォルトの名無しさん
2009/12/05(土) 22:09:220985デフォルトの名無しさん
2009/12/05(土) 22:16:41たしかgetoptはc標準じゃ無いよな、しかるに_wgetoptも無いと思われ
>>983
msvcには_wfopenってのがあるよ
うちのgccにもあるが、標準じゃないならディストリに依存するかな?
一応クロスプラットフォームで動作できると考えていいと思うが
0986デフォルトの名無しさん
2009/12/05(土) 22:22:59_getevnも_wfopenもVCというかWindowsくらいにしかないから、今話題にしているんでしょ。
0987デフォルトの名無しさん
2009/12/05(土) 22:25:21mingwではないのかよ。
0988デフォルトの名無しさん
2009/12/05(土) 22:28:09EUCかUTF8に変換しないといけないけど。
もともとのコードと、linixの内部コードの両方が判明して、それをコンバートする必要あるけど。
0989デフォルトの名無しさん
2009/12/05(土) 22:29:190990デフォルトの名無しさん
2009/12/05(土) 22:34:39>>984
これが一番スマートじゃないかな
0991デフォルトの名無しさん
2009/12/05(土) 22:36:100992デフォルトの名無しさん
2009/12/05(土) 22:42:22LANGでも取ってきてnkfしたら?
0993デフォルトの名無しさん
2009/12/05(土) 22:45:590994デフォルトの名無しさん
2009/12/05(土) 22:49:42C言語なら俺に聞け(入門編)Part 57
http://pc12.2ch.net/test/read.cgi/tech/1260020924/
0995デフォルトの名無しさん
2009/12/05(土) 22:50:02✿梅✿
. ✿✿
0996デフォルトの名無しさん
2009/12/05(土) 22:51:31mingwとbccにはなぜか入ってる。
linuxにないのが絶望的にまずい。
charで取ってきて、コンパイラ毎に対応するwchar_tにかえていくしかないか。
0997デフォルトの名無しさん
2009/12/05(土) 22:52:590998デフォルトの名無しさん
2009/12/05(土) 22:54:16入出力がどうなってるか調べてレポートしてくれ
0999デフォルトの名無しさん
2009/12/05(土) 22:56:03一方は、全く変更無しで通るようにする。
1000デフォルトの名無しさん
2009/12/05(土) 22:59:1510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。