C言語なら俺に聞け(入門編)Part 58
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/12/15(火) 23:42:55★前スレ
C言語なら俺に聞け(入門編)Part 57
http://pc12.2ch.net/test/read.cgi/tech/1260020924/
★過去スレ
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.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0153デフォルトの名無しさん
2009/12/17(木) 00:35:25これらはもっとも重要なハッキング用言語だというだけでなく、
それぞれプログラミングに対してまったく違ったアプローチをしているので、どれも非常に有益な勉強となるでしょう。
0154厨房 ◆hfigpiEhOM
2009/12/17(木) 00:43:26アセンブリとか難しそうですね。
せめて自分でチートコード作れるくらいになりたいです。
まったくの初心者ですか今後ともよろしくお願いします。
ちなみに以前C言語も学習していましたが、ポインタで投げました。
また1からやり直したいと思います。
0155デフォルトの名無しさん
2009/12/17(木) 00:45:31#include <stdio.h>
char glob[]="HOGE";
void func(int n){
static char sta[]="HOGE";
char aut[]="HOGE";
printf("d%回目\n", n);
printf("global: %s\n", glob);
printf("static: %s\n", sta);
printf("auto: %s\n", aut);
glob[1] = 'A';
sta[1] = 'A';
aut[1] = 'A';
}
int main(){
func(1);
func(2);
return 0;
}
0156デフォルトの名無しさん
2009/12/17(木) 00:49:25C++ は要らねえな。
0157デフォルトの名無しさん
2009/12/17(木) 01:01:570158デフォルトの名無しさん
2009/12/17(木) 01:08:00例えば
int a;
scanf("%d", &a);
switch (a)
{
case 1:
int b;
break;
case 2:
double b;
break;
case 3:
char b;
break;
}
こんな感じで。
0159デフォルトの名無しさん
2009/12/17(木) 01:11:23普及してるが、FORTRAN、COBOLと同じ道を歩み始めている。
0160デフォルトの名無しさん
2009/12/17(木) 01:14:26scanf("%d", &a);
viod b;
switch (a)
{
case 1:
int c=(int)b;
break;
case 2:
double c=(double)b;
break;
case 3:
char c=(char)b;
break;
}
0161デフォルトの名無しさん
2009/12/17(木) 01:29:59通常は、必要に応じてキャストすればいい。
つか、どうしたいんだ?
0162デフォルトの名無しさん
2009/12/17(木) 01:49:45無理。
たとえば、Windows の COM なら VARIANT型を使えば、なんとなくそれっぽいことができるが、入門レベルではない。
0163デフォルトの名無しさん
2009/12/17(木) 01:57:19つか、その質問だけでは何がしたいのかが伝わってこないから答えられん。
0164デフォルトの名無しさん
2009/12/17(木) 02:23:46ここをintでもcharでもいけるにしたい
↓
void function(double *v1)
{
int i;
for(i=0;i<10;i++)
{
//型の関係のない数値計算
P[i]=〜
}
}
ていうことです。
0165デフォルトの名無しさん
2009/12/17(木) 02:24:31ユーザ関数ではとりあえずvoid*型でポインタを引数を受け取って、引数の中に型のタイプの情報(上のscanfのa)
を入れて、それに応じてキャストすればいけるかなと思ったわけです。
void function(void *v1,char a)
{
int i;
switch(a)
{
case 1:
int *P;
P=(int*)v1;
break;
case 2:
double *P;
P=(double*)v1;
break;
case 3:
char *P;
P=(char*)v1;
break;
}
for(i=0;i<10;i++)
{
//型の関係のない数値計算
P[i]=〜
}
}
0166デフォルトの名無しさん
2009/12/17(木) 02:38:04設計からやり直した方がいいよ。
0167デフォルトの名無しさん
2009/12/17(木) 03:00:09{
int iheight;
int iweight;
}
この様に定義された構造体データ(idataNum件)を
身長順にダブルポインタを使ってソートをかけたいのですが、
そのダブルポインタのスワップ処理が分からず困っています・・・。
void swap( DATA** stData_ptr, int idataNum)
{
DATA* stSwap;
for( int i = 0; i < idataNum-1; i++ )
{
for( int n = i + 1; n < idataNum; n++ )
{
if( (*stData_ptr + i )->iheight > (*stData_ptr + n )->iheight )
{
stSwap = ( *stData_ptr + i );
( *stData_ptr + i ) = ( *stData_ptr + n ) ;
( *stData_ptr + n ) = stSwap ;
}
}
}
}
てな感じで自分なりに試行錯誤してみたのですが、どうしてもスワップ部でエラーが出てしまいます。
どうか、お力をお貸しして頂けないでしょうか?
0168デフォルトの名無しさん
2009/12/17(木) 03:02:530169デフォルトの名無しさん
2009/12/17(木) 03:16:59なんで変な書き方したがるかなぁ?
0170デフォルトの名無しさん
2009/12/17(木) 03:19:540171デフォルトの名無しさん
2009/12/17(木) 03:28:48ありがとうございます。
stSwap = *(stMyData+i);
*(stMyData+i) = *(stMyData+n);
*(stMyData+n) = stSwap;
このようにやってみたところ、一応コンパイルは通るのですが、
実行させてみるとメモリー違反っとなってしまいます・・・。
>>168
ごめんなさい。その書き方もあまり分からないので・・・・
0172デフォルトの名無しさん
2009/12/17(木) 04:59:27この世の事実はすべてint型。
つまりint*型とint[]型とint型さえ使うことができればあらゆるプログラムの困難は解決する。
0173デフォルトの名無しさん
2009/12/17(木) 05:01:07マクロで無理矢理やるというおよそ非実用的な手段がある。
#define DEFINE_FUNCTION(type) \
void function_ ## type(type *v1) \
{ \
int i; \
for(i=0;i<10;i++) \
{ \
P[i]=〜 \
} \
}
そして、こんな風に引数として使いたい型だけマクロを並べる。
DEFINE_FUNCTION(int)
DEFINE_FUNCTION(dobule)
すると、それぞれ型に応じたfunction_int、funciton_doubleって関数が出来上がる。
こんなことするくらいだったら、C++のテンプレートを使ったほうがましなんだけど、ここはCのスレだし。
0174デフォルトの名無しさん
2009/12/17(木) 05:02:23そんなものもint*型の前にはひれふすことになる。
0175デフォルトの名無しさん
2009/12/17(木) 07:32:49そういうときは、union使うといい
struct hoge {
int data_type; // 0:int 1:char 2:double ...
union {
char c;
int i;
double d;
...
} u;
};
0176デフォルトの名無しさん
2009/12/17(木) 07:39:33いやその解は有りえんから
0177デフォルトの名無しさん
2009/12/17(木) 11:26:16{
int i;
for(i=0;i<10;i++)
{
//型に応じた数値計算
switch(a)
{
case 1:
//((int*)v1)[i];
break;
case 2:
//((double*)v1)[i];
break;
case 3:
//((char*)v1)[i];
break;
}
}
}
こうはできないものかと妄想したが
0178デフォルトの名無しさん
2009/12/17(木) 12:59:18そんなのが必要になる状況なんてありえないだろ。
0179デフォルトの名無しさん
2009/12/17(木) 13:20:43そうでなけりゃ C++ で template 使え。
0180デフォルトの名無しさん
2009/12/17(木) 14:05:170181デフォルトの名無しさん
2009/12/17(木) 14:48:26もしできるのなら詳しくソースコードを教えてください
0182デフォルトの名無しさん
2009/12/17(木) 14:49:250183デフォルトの名無しさん
2009/12/17(木) 14:50:070184デフォルトの名無しさん
2009/12/17(木) 15:04:330185デフォルトの名無しさん
2009/12/17(木) 15:11:030186デフォルトの名無しさん
2009/12/17(木) 15:14:02漢字使ってる場合とかは読みを別に入力して、その読みの順でソートするんだよ?
読みはローマ字表記のものもあればかな表記のものあるけど
どちらにせよその後は普通のソートだよ
0187デフォルトの名無しさん
2009/12/17(木) 15:53:48比較して自分が並べたい順に並べるしかないだろ。
「太郎」と「次郎」はどっちが先だ?
0188デフォルトの名無しさん
2009/12/17(木) 15:57:48文字コード順なら太郎が咲き
0189デフォルトの名無しさん
2009/12/17(木) 16:02:370190デフォルトの名無しさん
2009/12/17(木) 16:07:14次郎と書いて「つぐろう」と読ませたり
出生届けの読みが自由ってどうなんだろうな
0191デフォルトの名無しさん
2009/12/17(木) 16:14:43読み仮名を登録しないだけかんだから「読ませ方」も自由なら「読み方」も自由
自分の好きな読み方で処理すれば良い
0192デフォルトの名無しさん
2009/12/17(木) 16:15:29読みは登録しないだろ
0193デフォルトの名無しさん
2009/12/17(木) 16:16:260194デフォルトの名無しさん
2009/12/17(木) 16:18:22読み以外の何で整列させればいいんだろ
0195デフォルトの名無しさん
2009/12/17(木) 16:19:39○ 前編を後編より先にしたい場合に
0196デフォルトの名無しさん
2009/12/17(木) 16:21:05正規表現
ハードコーディングで頑張れ
0197デフォルトの名無しさん
2009/12/17(木) 16:24:26正規表現はCで使えたっけ?
0198デフォルトの名無しさん
2009/12/17(木) 16:29:36「この顧客リストを強い順にソートしてくれ」
0199デフォルトの名無しさん
2009/12/17(木) 16:39:490200デフォルトの名無しさん
2009/12/17(木) 18:12:330201デフォルトの名無しさん
2009/12/17(木) 18:14:300202デフォルトの名無しさん
2009/12/17(木) 18:17:05ん〜000000とかの付属情報なしに純粋に文字コードだけ抜き出したいです。
0203デフォルトの名無しさん
2009/12/17(木) 18:19:310204デフォルトの名無しさん
2009/12/17(木) 18:25:04”3042304430463048304a”と書き出されるイメージです。
0205デフォルトの名無しさん
2009/12/17(木) 18:31:57意外と難しいのがセンタリング
フィールドの大きさをまず測る
一文字だけなら、その中心部分、半分に割った位置にフォントの中心部分を置けばいいが
文字数が増えたときのオフセットの取り方が意外とパッと出てこないもの。
普通にやると
「堀 川 掘 ら れ た 町」
にならず、
「堀川掘 られた町」
みたいになってしまう
0206デフォルトの名無しさん
2009/12/17(木) 18:33:340207デフォルトの名無しさん
2009/12/17(木) 18:34:50/'".:=≡ミ_≧_尨彡三:ヽ、≧_尨彡三:ヽ、彡三:ヽ、三:ヽ、:ヽ、
//.:;:彡:f'"´‐------ ``'r=:l------ ``'r=:l-- ``'r=:l ``'r=:l 'r=:l
/〃彡_彡′,.=、 ̄ ̄ ,.=、 |ミ:〉 ̄ ̄,.=、 |ミ:〉,.=、 |ミ:〉、 |ミ:〉|ミ:〉
'y=、、:f´===tr==、.___,. ==、._ゞ{=、.___,. ==、._ゞ{,. ==、._ゞ{==、._ゞ{._ゞ{
{´yヘl'′ | /⌒l′ |`Y} /⌒l′ |`Y}′ |`Y} |`Y}|`Y} ああきあきらあきらめあきらめた
゙、ゝ) `''''ツ_ _;`ー‐'゙:::::l{ノ_ _;`ー‐'゙:::::l{_;`ー‐'゙:::::l{‐'゙:::::l{゙:::::l{ そそこそこでそこで試そこで試合
. ヽ.__ ,ィnmmm、 .:::|!mmm、 .::|!m、 .::|! .::|! .::|!
,.ィ'´ト.´ ´`"`"`゙″ .::::;'`"`"`゙″ .:::;'`゙″ .:::;'″ .:::;' .:::;'
イ´::ノ|::::l \ "' :::/ "' :::/' :::/ :::/ :::/
::::::::::::|:::::l ヽ、 ..:: .:::/.、 ..:: .:::/.、 ..:: .:::/.、: .:::/.、::/.、
:::::: ::: |:::::ヽ ヽ、.......::::/..:::/!\\:/..:::/!\\::/!\\ !\\ \
::::::::::: |::::::::ヽ ``''‐--ァt''′ |!:::ヽ:::\t''′ |!:::ヽ:::\|!:::ヽ:::\:::ヽ:::\:\
:::::::::::::|::::::::::::ヽ、 /i|iト、 |l:::::::ヽ:::::\ |l:::::::ヽ:::::\::::ヽ:::::\:ヽ:::::\:\
:::::::::::::|::::::::::::::/:ヽ、 ∧|i|i|i|〉. ||::::::::::ヽ:::::::\||::::::::::ヽ:::::::\:::ヽ:::::::\ヽ::::::\:\
0208デフォルトの名無しさん
2009/12/17(木) 18:47:020209デフォルトの名無しさん
2009/12/17(木) 18:47:2316進ダンプのことあまり理解してなかったみたいなので出直してきます
0210デフォルトの名無しさん
2009/12/17(木) 19:38:540211デフォルトの名無しさん
2009/12/17(木) 19:40:49パ
/ | \
チ | グ
/ チ \
グ | チ
| \ | / |
| チ グ グ |
パ \ / グ
| パ パ チ |
| / | \ |
チ | パ
\ チ /
パ | チ
\ | /
グ
0212デフォルトの名無しさん
2009/12/17(木) 19:56:200213デフォルトの名無しさん
2009/12/17(木) 21:01:16天才現る!
と思ったら、ソートできてねぇ!w
0214デフォルトの名無しさん
2009/12/17(木) 21:21:280215デフォルトの名無しさん
2009/12/17(木) 23:56:41まず配置のルールがわからない
発想はともかくもっと根本的な部分を調整しろよ
0216デフォルトの名無しさん
2009/12/18(金) 00:08:46ふっ
0217デフォルトの名無しさん
2009/12/18(金) 00:39:29int *p;
{
int x;
p=&x;
}
p[1]=500;
こんなのでも正常にうごいてる(ようにみえる)かもしれないし。
0218デフォルトの名無しさん
2009/12/18(金) 00:46:00>175の方法は普通によくやる。
ていうか>165を見てはじめに思いつくのはこれ。
>178
共用体は、引数に汎用性を持たせたいフレームワーク、メッセージインターフェイス
とかでよく利用する。
後はジャンプテーブルを使うために、関数のプロトタイプ宣言をそろえたいけど、
引数はいろいろあり得るような場合は、引数をvoid*にしたり共用体で渡したりする。
>179
関数のプロトタイプ宣言をそろえるのがミソなので、templateは使えない。
0219デフォルトの名無しさん
2009/12/18(金) 00:48:53そうだね。不具合が発生するのが、全然別の場所、タイミングだったりするのが
やっかいだよね。
0220デフォルトの名無しさん
2009/12/18(金) 06:06:03たしかにやっかいだよね。
0221デフォルトの名無しさん
2009/12/18(金) 09:22:03これだけ勘違いカキコする奴もメヅラシイな
普段何やってんだろ??
0222デフォルトの名無しさん
2009/12/18(金) 09:25:040223デフォルトの名無しさん
2009/12/18(金) 09:31:21別におかしくは無い。
0224デフォルトの名無しさん
2009/12/18(金) 10:05:26おかしくないと思う
0225デフォルトの名無しさん
2009/12/18(金) 10:40:09最後の行は何か勘違いしているように思えてならないが、
まあスレ違いだしどうでもいいや。
0226デフォルトの名無しさん
2009/12/18(金) 10:50:42va_start
自分は使ったことないけど、これじゃダメなの?
ttp://wisdom.sakura.ne.jp/programming/c/c62.html
>printf()関数などは、フォーマット指定子によって引数リストの個数と型をチェックしていますね
と同じように型チェックしてから、、とか
0227デフォルトの名無しさん
2009/12/18(金) 11:42:010228デフォルトの名無しさん
2009/12/18(金) 11:42:440229デフォルトの名無しさん
2009/12/18(金) 11:44:380230デフォルトの名無しさん
2009/12/18(金) 11:49:19結局、何らかの形で型を示す引数を一緒に渡すわけで
>>165 から何も変わっていない。
0231デフォルトの名無しさん
2009/12/18(金) 11:53:270232デフォルトの名無しさん
2009/12/18(金) 12:51:390233デフォルトの名無しさん
2009/12/18(金) 12:54:290234デフォルトの名無しさん
2009/12/18(金) 17:06:34判ってる奴は奴では一行レスのチャチャ入れるだけだからグダグダになるのは仕方がない
0235デフォルトの名無しさん
2009/12/18(金) 17:37:080236デフォルトの名無しさん
2009/12/18(金) 19:25:04> なにがしたいか分からんので、茶々入れるしかない。
もう一度 冷静に自分の言っていることを検証したまえ。
0237デフォルトの名無しさん
2009/12/18(金) 19:43:03キャッチコピーは「戦略的穴掘りゲーム」だろ?
0238デフォルトの名無しさん
2009/12/18(金) 19:50:190239デフォルトの名無しさん
2009/12/18(金) 20:02:520240デフォルトの名無しさん
2009/12/18(金) 22:49:36よくバイソンとかシーインクリメントとかで見るんだけど
なんこれ。
0241デフォルトの名無しさん
2009/12/18(金) 23:27:25戦略的穴掘りゲームおもしろそう
0242デフォルトの名無しさん
2009/12/18(金) 23:29:490243デフォルトの名無しさん
2009/12/19(土) 00:05:15{
int num = 567;
num = num / 10;
num = num % 10;
printf( "%d\n", num );
return 0;
}
これを剰余演算を使わずに書きたいんですが、できますか?
0244デフォルトの名無しさん
2009/12/19(土) 00:10:37remainder = dividend - quotient * divisor
0245デフォルトの名無しさん
2009/12/19(土) 00:13:09を
num - (num / 10) * 10
にする。
0246デフォルトの名無しさん
2009/12/19(土) 00:19:58int num = 6:
0247デフォルトの名無しさん
2009/12/19(土) 00:20:340248デフォルトの名無しさん
2009/12/19(土) 00:24:55itoaを使う方法考えてたのに〜
0249デフォルトの名無しさん
2009/12/19(土) 00:26:130250デフォルトの名無しさん
2009/12/19(土) 00:30:20すまんな…
0251デフォルトの名無しさん
2009/12/19(土) 07:11:41シーインクリメントとは斬新な呼び方だね。
けどなぜCスレで聞く?
もしかしてスルーが正解だったか?戦略的穴掘りに落ちちゃった?
0252デフォルトの名無しさん
2009/12/19(土) 08:42:08■ このスレッドは過去ログ倉庫に格納されています