C言語ならママに聞け
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGどういうときに使うものなのでしょうか?
0009デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1086612317/
0010デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1086868001/
0011キグナス氷河
NGNG具体的にはツリー型掲示版に使われるよママン
00128
NGNGあまりツリー型掲示板についてわからないのですが、
CGIで作られていて、どうてきにHTMLを作成するときに
再帰関数を使っているってことでしょうか?
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1086373839/l50
0015デフォルトの名無しさん
NGNG自分自身を呼び出すような関数の事よ、ボウヤ。
抜け出す条件とスタックオーバーフローに気をつけるんですよ。
0016デフォルトの名無しさん
NGNGスタックオーバーフローを起こさない永続的な再帰って可能なの?
サンプルコードがあったらおせーて
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGAUTO変数の領域の確保にスタックを使わないコンパイラを使うのさ
0019デフォルトの名無しさん
NGNGママには絶対分からなさそうなディープさが・・・
0020デフォルトの名無しさん
NGNGそう、18はパパなのさ、たぶん。
0021デフォルトの名無しさん
NGNGfoo(int i){ while(i){ foo(0); } }
0022デフォルトの名無しさん
NGNG再帰なんかめったに使わないから知らなくてもいいよ
まあ折れなんかペイントルーチン制作以来再帰なんてつかってないから。
再帰処理の代行手段はいっぱいあるし
0023デフォルトの名無しさん
NGNGWinProcの前のCALLBACKとかいうキーワードを調べてたら見つかりました。
0024デフォルトの名無しさん
NGNG関数の呼び出し方法の1種で、他に__cdecl(デフォルト)、__fastcall __pascal __thiscallなんかがある。
興味がなかったら後は読み飛ばして。
__cdecl
何も指定しないとコレになる。引数は右側のものから置く。
関数を呼び出した側が引数のメモリの開放を行うので可変個引数が扱える。
__pascal
関数自体が引数のメモリの開放を行うので、__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし関数名は全て大文字に変換されてしまう。これだけ引数を左側のものから置いていく。
__stdcallが無い時代のWinAPIに使われていた。
__stdcall
__pascalの同様に引数が置かれているメモリの開放を自分自身で(呼ばれた側の関数で)行うので、
これも__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし__pascalと違い関数の大文字小文字はそのままなのでhogeとHOGEというような関数名でも混在できる。
他は__cdeclと同じく引数は右側のものから置く。
__fastcall
__stdcallの機能に加え引数の1部をレジスタに置くので__stdcallよりも早くなる可能性がある。けどなぜか使われていない。
__thiscal
(C++)クラスのメンバ関数用なんで好き勝手に指定するものではない。__stdcallに加えthisポインタをレジスタに置く。
可変個引数の場合、__cdeclに加え最後にthisポインタを置く。
ちなみに__stdcallがなかった頃は#define PASCAL __pascalとなっていたが、
今は#define PASCAL __stdcallとなっているので注意。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG世界で一番好きなんだー
002723
NGNGありがとう
0028デフォルトの名無しさん
NGNG×ありがとう
○ママありがとう
0029デフォルトの名無しさん
NGNGみたいな感じで文字列を受けとるようにする函数を定義したいとき,
引数の型はなんにしたらいいんだ?
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGここだから来れるんだよ
甘えたい年頃だろ
0034デフォルトの名無しさん
NGNGC言語ならオレに聞けスレの隔離スレだから何でもOK
0035デフォルトの名無しさん
NGNGconst std::string
0036デフォルトの名無しさん
NGNGprintf(...);
0037デフォルトの名無しさん
NGNGほかにどんなものがありますか?
特殊な使い方とかありますか?
0038デフォルトの名無しさん
NGNG保守乙!
0039デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_format_specification_fields_.2d_.printf_and_wprintf_functions.asp
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_printf_type_field_characters.asp
0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG`%' 一文字が出力される。変換される引数は無い。完全な変換の記法で表すと `%%' である。
0043デフォルトの名無しさん
NGNGこれは,配列argvの大きさになっています.
argv[0], argv[1], ... は
argv[0] プログラムファイルのパスの文字列へのポインタ
argv[1] 1番目のコマンドライン引数の文字列へのポインタ
argv[2] 2番目のコマンドライン引数の文字列へのポインタ
... ...
のようにコマンドライン引数の文字列へのポインタが納められた配列になっています.
0044デフォルトの名無しさん
NGNG入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。
警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main)
警告2:コードは効果をもたない。(関数 main)
警告3:問題のあるポインタの変換。(関数 input)
ソース↓
#include <stdio.h>
#define MAX 256
char *input();
void main()
{
*input();
}
char *input()
{
char s[MAX];
printf("COMMAND:");
scanf("%s", s);
return s;
}
0045デフォルトの名無しさん
NGNGお前ら、何様だよ!
いっつもいっつもくだらないことばっか言いやがってよー
ちゃんと働けよ!暇人が!
真剣に答えてくれる人にはすいません。
そうゆう人にはマジで感謝してます。
0046デフォルトの名無しさん
NGNGうっせハゲ
うっせハゲ
うっせハゲ
うっせハゲ
うっせハゲ
0047デフォルトの名無しさん
NGNG#include <stdio.h>
#define MAX 256
char *input(void);
int main(void)
{
printf("%s\n", input());
return 0;
}
char *input(void)
{
static char s[MAX];
printf("COMMAND:");
scanf("%s", s);
return s;
}
0048デフォルトの名無しさん
05/02/15 03:51:58%*f
004925の妹
2005/04/10(日) 18:42:00>引数は右側のものから置く。
おにいちゃん、スタックという主語が入ってないから何の説明なのか意味不明だよ。
恥ずかしいからもうちょっと本とか読んで勉強してよね。
0050デフォルトの名無しさん
2005/04/10(日) 18:42:210051デフォルトの名無しさん
2005/04/13(水) 19:08:16コーディングする上でルールってあると思うんだけど、そのルールが書いてある本とかある?
例えば、staticを勝手に使うとか、関数の型を勝手に変更とか。
(これってほんとにダメなのかは知らない)
0052デフォルトの名無しさん
2005/04/13(水) 19:25:300053デフォルトの名無しさん
2005/04/13(水) 20:13:29でも、他に例えようがない…。
諦めます。
ありがとうございました。
0054デフォルトの名無しさん
2005/04/13(水) 20:31:050055デフォルトの名無しさん
2005/04/13(水) 20:53:21staticを勝手に使うとか、関数の型を勝手に変更とかしたソースとはどんなものなのか見せろ。
0056デフォルトの名無しさん
2005/04/13(水) 20:55:52わからないことがあったらママに聞くのよ。
関数の名前はプロジェクト、システム、プログラム、作成者の頭文字を並べて、
ハイフンで区切った後、使った順に三桁の番号を振るのよ。
で、できた関数名は台帳に忘れずに記入しておきなさいね。わかった?
0057デフォルトの名無しさん
2005/04/13(水) 22:20:06ハイフン…
COBOL かよ!!ママン!
0058デフォルトの名無しさん
2005/04/13(水) 23:53:400059デフォルトの名無しさん
2005/04/13(水) 23:57:050060デフォルトの名無しさん
2005/04/14(木) 12:41:22そうよ。C 言語の C は COBOL の C なのよ。
Hello World を書く時もママのように書きなさい。
#define PROCEDURE main()
#define DIVISION
PROCEDURE DIVISION
{ printf("Hello World\n");}
0061デフォルトの名無しさん
2005/04/14(木) 15:58:33そんなコードじゃ COBOL にはみえん
第一C言語としても不完全
全然ダメだ。
社会に出て出直してこい専業主婦めが
0062初心者
2005/04/14(木) 16:08:103次元の画像処理を行いたいのですが、Cで3次元はどのように展開していけばよいのでしょうか?
2次元でしかしたことがなくて、聞く人もいなくて困っています。
よろしくお願いします。
0063デフォルトの名無しさん
2005/04/14(木) 16:16:41ママに聞け
0064初心者
2005/04/14(木) 16:30:38知らんのやろ?
0065デフォルトの名無しさん
2005/04/14(木) 16:51:37ママに聞け
ママに聞く気がないならスレ違い
ネタスレでムキになっている自称初心者は羽材
0066デフォルトの名無しさん
2005/04/15(金) 19:53:45まー。三次元に興味を持ったって聞いて、ママ嬉しいわ。
三次元って二次元に毛が生えたようなものだと思えばいいのよ。
まあ、その毛が気持ち悪いって思うかも知れないけど、
ママも生えているって思って克服してね。
0067デフォルトの名無しさん
2005/04/16(土) 22:04:330068デフォルトの名無しさん
2005/04/18(月) 01:34:060069デフォルトの名無しさん
2005/04/18(月) 19:05:51そんな坊やはOpenGLでも使っておきなさい
0070デフォルトの名無しさん
2005/04/18(月) 19:06:49僕ちゃんはボクセルでよちよちちたいのでしゅか?
0071デフォルトの名無しさん
2005/05/15(日) 12:11:04char a[100], b[100];
scanf(%s,%s",&a,&b);
としたいのですが。
最初のaの配列のほうにコンマもふくめてはいってしまいます。
これをうまく回避するためにはどうすればいいんでしょうか。
おねがいいたします。
0072デフォルトの名無しさん
2005/05/15(日) 12:31:400073デフォルトの名無しさん
2005/05/15(日) 12:41:48ありがとうございまzす、スペースだとOKでした。
ただ、どうしてもコンマをつかうばあいんはなにか方法ないのでしょうか?
1回別の配列にいれて、ifでコンマを見分けて2つの配列に分配とかしか方法はないのでしょうか?
0074デフォルトの名無しさん
2005/05/15(日) 12:51:230075デフォルトの名無しさん
2005/05/15(日) 13:46:40なるほどStrtokですね。ありがとうございます。
勉強になります。もう一度組み直してみます、
0076デフォルトの名無しさん
2005/05/15(日) 13:58:44scanf("%99[^,],%99[^,]", & a, & b);
%sの場合も%99sとした方が安全。
つーか、そもそもfgets()してsscanf()がお勧め。
>>74
gets()を薦めるな。strtok()を薦めるな。知識がないなら回答するな。
>>75
Strtokではない、strtokだ。
0077デフォルトの名無しさん
2005/05/15(日) 14:16:47より細かいご指摘ありがとうございます。
%99s、fgets()してsscanf()の使いかたをより詳しく勉強してみます。
74さんの方法がだめな理由もさぐってみます。
方法はたくさんありますが、まずい方法など奥ふかく、たいへん参考になります。
0078デフォルトの名無しさん
2005/06/30(木) 22:38:03入力に応じて2分探索木を作成し、走査順を表示しながら最大値と最小値を求めるプログラムを作成しなさい。
走査順に表示するとは、探索の過程で訪れる頂点の要素の値を出力しながら走査が実行されることである。
最大値を求める関数と、最小値を求める関数を別々に作成しなさい。
2分探索木だけなら自分でもわかるのですが、最大最小をどのように求めればいいのかがいまいち分かりません。
よろしくお願いします。
0079デフォルトの名無しさん
2005/06/30(木) 22:50:260080デフォルトの名無しさん
2005/07/01(金) 00:31:41最大・最小の要素の値を取っといて、各ノード毎の要素と比較してとっかえればええやんけ。
0081デフォルトの名無しさん
2005/07/01(金) 00:40:350082デフォルトの名無しさん
2005/07/02(土) 12:50:32YES
こんなもん考えるまでもないと思うんだがねぇ
授業聞いてないんじゃないか
0083デフォルトの名無しさん
2005/07/02(土) 16:12:02そりゃぁ、どこかにはいるだろ。
0084デフォルトの名無しさん
2005/07/02(土) 16:13:360085デフォルトの名無しさん
2005/07/02(土) 18:25:240086デフォルトの名無しさん
2005/07/02(土) 18:49:460087デフォルトの名無しさん
2005/07/03(日) 11:40:460088デフォルトの名無しさん
2005/07/03(日) 12:47:450089デフォルトの名無しさん
2005/07/03(日) 17:12:46,. '"´  ̄  ̄  ̄ ` 、
/ \
, ' / , ,ィ \ ヽ
/ , ' / // | i、 ヽヽ ',
,' ./ / // 〃 .| l ヽ .ヽヽ ヽ ',
,' / / / / // 〃 |l i i__i ,ヽ i l. l
l/ i l / 7´/ `ヽ! 'l| ̄ l l !l ', ! ! | ,へヽ
. ハ l ! i / /,.=、! / , =il、 ! .l i l/ `ヽ\
i いl i / 〃J;;;::iト / イiJ;;;;::iヾ l i i/ \ヽ
!/Yヽi l. '' ヾ-'::| |::-':ソ ' / // \ヽ
/ i il l ,,,,-=‐'' i ‐=- ,,,/ // / / /
! l ヽヘ r ─ 、 /r‐ ' 、 / //
/ヽ l ヾゝ ., t  ̄`} / ⌒丶、 ヽ/ .//
/ ヽ ヽヽ ヽ ` ー --‐ ´ }ー- 、 } / '
ゝ, フ il \ \ {__ } (
`ー─→、 \ \_,.、_、___,.{´ ~` / (⌒
/ー‐‐ 、\ \_,ノ ./  ̄T{ /
{ } ヽ,__, -く__ / {__/
ゝ.,___,ノ ゝ,ヽ//-! ノ
`ー‐‐''
>>78だめでしょ、人様に迷惑掛けちゃ。
0090デフォルトの名無しさん
2005/07/03(日) 17:13:490091デフォルトの名無しさん
2005/07/03(日) 21:12:23返す関数max_min(int a[],int n,int *max,int *min,int *ave)を作成せよ。関数が正しく動くこと
を確認するメインプログラムも作成すること。
#include <stdio.h>
#include <float.h>
void max_min(int a[],int n,int *max,int *min,int *ave);
main()
{
int a[]={21,45,67,7,88,9999,123};
int max=0,min=0,ave=0;
int n=7;
max_min(a[],n,&max,&min,&ave);
printf("max=%d min=%d ave=%d\n",max,min,ave);
}
void max_min(int a[],int n,int *max,int *min,int *ave)
{
int i;
for(i=0;i<n;i++){
if(a[i]>=*max)*max=a[i];
if(a[i]<=*min)*min=a[i];
*ave+=a[i]; }
}
と書いたのですが、動きませんでした。何がいけないのか
ご指導ください。お願いします
0092デフォルトの名無しさん
2005/07/03(日) 21:40:44*ave /= n;
0093デフォルトの名無しさん
2005/07/03(日) 21:47:43{
int i;
*max = *min = a[0];
for(i=1;i<n;i++){
if(a[i]>=*max)*max=a[i];
if(a[i]<=*min)*min=a[i];
*ave+=a[i]; }
*ave /= n;
}
009491
2005/07/03(日) 21:54:53ああ!なるほど。ありがとうございます。あと
syntax error before ']' token と9行目に出てしまうのですが
これはどう直せばいいのでしょうか?
0095デフォルトの名無しさん
2005/07/03(日) 22:14:43009691
2005/07/03(日) 22:22:30助かりました。
ナゾなんですけど、a[]じゃなんで間違いなんですか?
配列aを渡すならa[]としたほうがいいような気がするのですが・・・
0097デフォルトの名無しさん
2005/07/03(日) 22:53:04と
char* b;
は一緒なんでしょうか?
0098デフォルトの名無しさん
2005/07/03(日) 22:53:50char* a, b;
は
char *a, b;
になるからそこだけ注意
0099デフォルトの名無しさん
2005/07/03(日) 22:59:12char と * と a それぞれがトークン
char*a でもよし
0100デフォルトの名無しさん
2005/07/03(日) 23:10:34おお〜
c⌒っ*゚д゚)っφ メモメモ...
勉強になります!
>>98>>99 ありがとうございました
0101デフォルトの名無しさん
2005/07/03(日) 23:59:52なーんちゃったりして
0102デフォルトの名無しさん
2005/07/04(月) 01:04:34いい子は配列なんて渡そうと思っちゃ駄目よ。
一個ずつにするか、あとはどこに配列があるかを渡すかどっちかにしなさい。
0103デフォルトの名無しさん
2005/07/04(月) 01:19:31struct zzz{
char[] s1;
int x;
}
zzz[char[]] xxx;
xxx["yyy"].s1 = "aaa";
printf(xxx["yyy"].s1);
}
0104デフォルトの名無しさん
2005/07/07(木) 15:59:310105デフォルトの名無しさん
2005/07/07(木) 16:06:040106デフォルトの名無しさん
2005/07/07(木) 16:06:430107デフォルトの名無しさん
2005/07/07(木) 18:55:430108デフォルトの名無しさん
2005/07/07(木) 19:06:11まーマルチちゃんお行偽が悪いわね。
まあ、大目にみてあげるわ。出来るだけ初心者でもと言ったら、
やっぱり全部手計算で求めて印刷するというのが王道かしら。
1000 までだったら 1 日あれば全部チェックできるわよね。
こんなプログラムでどうかしら?
#include <stdio.h>
main(){
int data[]={3,17,23,29,47,53,59,71,89,113,137,173,179,191,227,239,
257,281,317,347,353,359,383,401,431,443,479,491,0};
int i;
for(i=0;data[i]!=0; i++)printf("%d, %d\n",data[i],1000-data[i]);
}
どお、時間はかかるけど簡単でしょ。
0109デフォルトの名無しさん
2005/07/07(木) 19:06:35char var[][];
func(char** ptr){
}
という関数がある場合、func()の内部で、varの配列の中身(var[0][1]など)を
printf()で出力するには、どう記述すればよいのですか?
0110デフォルトの名無しさん
2005/07/07(木) 19:13:100111デフォルトの名無しさん
2005/07/07(木) 19:17:12そのfuncへvarは渡せない。
少なくとも最初以外の次元の要素数は決定している必要がある。
最初の次元は引数で渡す必要がある。
char var[N][2];
func(char ptr[][2], size_t n);
あるいはforを回すか。
0112デフォルトの名無しさん
2005/07/07(木) 19:21:512は?
0113109
2005/07/07(木) 19:24:30ありがとうございます。
では、
char var[5][5];
func(char** ptr){
}
という場合はどうでしょうか?
それと、Javaのように、var.length のようなことはできますか?
0114デフォルトの名無しさん
2005/07/07(木) 21:13:42せっかくママが計算してあげたのにだめなの?しょうがない子ね。
でも、そんなわがまま言って、本当にコンピュータに素数を計算させて大丈夫なの?
初心者に素数の計算なんかわかんないんじゃないの?ママは心配だわ。
素数の計算の仕方を言ってみなさい。その通り作ってあげるから。
0115デフォルトの名無しさん
2005/07/07(木) 21:40:510116デフォルトの名無しさん
2005/07/07(木) 22:02:09コンパイルしてみれば?
実験は自分でするもんだ。
>それと、Javaのように、var.length のようなことはできますか?
出来ない。
0117デフォルトの名無しさん
2005/07/07(木) 22:42:040118デフォルトの名無しさん
2005/07/07(木) 22:59:460119デフォルトの名無しさん
2005/07/07(木) 23:07:52てか、そのage改行無しレスは、素数1000の宿題マルチしたお前だろ?
0120デフォルトの名無しさん
2005/07/07(木) 23:10:08せっかくママ黙ってたのに…
パパには内緒よ
0121デフォルトの名無しさん
2005/07/07(木) 23:22:45そうですよ。マナーをしらなくてしちゃったけど答えてもらえたので続けさせてもらいました。
>>118
確かにたくさんあったんですけど、どんなのがいいのかなと思ったんで質問させてもらいました。
0122デフォルトの名無しさん
2005/07/07(木) 23:50:430123デフォルトの名無しさん
2005/07/08(金) 00:21:23お前、間違ってもソフト開発業界には来るなよ。
いや、煽ってるんじゃない。お前のためだ。
その調子だと入社1年でクビか鬱メンヘル行きは間違いない。
0124デフォルトの名無しさん
2005/07/08(金) 00:25:020125デフォルトの名無しさん
2005/07/08(金) 07:35:58それもだめ。
2次元配列はポインタのポインタにはならない。
var.lengthなんてCにはない。
C++ならstd::vectorとかboost::arrayやboost::multi_arrayにそんなのがあるけど。
0126デフォルトの名無しさん
2005/07/08(金) 10:33:17struct foo bar[] = {
{...},
{...},
{...},
};
size_t length = sizeof(bar) / sizeof(*bar);
int foz[5];
length = sizeof(foz) / sizeof(*foz);
0127デフォルトの名無しさん
2005/07/08(金) 11:11:06まー。マルチちゃんみんなに嫌われてママ困っちゃうわ。
みんなと仲良くしてね。
2の倍数、3の倍数の後が書いてなかったので、初心者にもわかり易いように、
効率が最悪のプログラムを作ってみたわ。
どーかしら。
#include <stdio.h>
main(){
int kazu[1001]={0};
int i,j;
for(i=2;i<=31;i++)for(j=2;i*j<=1000;j++)kazu[i*j]=1;
for(i=3;i<500;i+=2)if(kazu[i]+kazu[1000-i]==0)printf("%d, %d\n",i,1000-i);
return 0;
}
0128デフォルトの名無しさん
2005/07/08(金) 22:21:460129デフォルトの名無しさん
2005/07/09(土) 15:36:190130デフォルトの名無しさん
2005/07/09(土) 18:07:17落ち着かん!
0131デフォルトの名無しさん
2005/07/09(土) 18:21:36これなら渡せるわよ。
int func(char (*value)[])
{
・・・
}
0132デフォルトの名無しさん
2005/07/25(月) 17:23:150133デフォルトの名無しさん
2005/07/25(月) 18:01:430134デフォルトの名無しさん
2005/07/26(火) 01:03:560135デフォルトの名無しさん
2005/09/27(火) 02:38:49printf()とか使えるじゃないですか。
それってコンパイラが暗黙の了解で何かしてるからなんですか?
0136デフォルトの名無しさん
2005/09/27(火) 12:41:44Cでは見たことない関数も呼び出せるようになっている。
ただし、型チェックなどが省略されるのでちゃんとヘッダをインクルードすべき。
(それでもprintfは可変個引数だから型チェックはされないけどな。)
0137デフォルトの名無しさん
2005/09/27(火) 15:56:19なるほど。そういうことでしたか。
ありがとうございます。
0138デフォルトの名無しさん
2005/09/27(火) 22:37:12いや、printf()も第一引き数はちゃんとチェックされる筈だぞ。
0139デフォルトの名無しさん
2005/09/28(水) 12:06:550140デフォルトの名無しさん
2005/10/02(日) 00:39:25はぁ?
0141デフォルトの名無しさん
2005/10/02(日) 20:01:01http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます。
0142デフォルトの名無しさん
2005/10/02(日) 20:21:590143デフォルトの名無しさん
2005/10/03(月) 11:39:58まあ、変なこと言う子ねぇ……
C言語のプログラムはぜーんぶ関数なのよ。だいじょうぶよ。
0144デフォルトの名無しさん
2005/10/06(木) 00:43:35■ このスレッドは過去ログ倉庫に格納されています