C言語なら俺に聞け(入門篇) Part 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/09(木) 00:31:01・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/
過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 http://pc8.2ch.net/test/read.cgi/tech/1153818463/
関連スレ
くだすれC言語(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1153542424/
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/
0154デフォルトの名無しさん
2006/11/12(日) 01:28:262次元配列にするより
char *mark[4] = {"ハート","ダイヤ","スペード","クローバー"};
でいいだろ
0155140
2006/11/12(日) 01:31:41いやいや、実は俺こういう方法気づかなかった
いままで
char digit[13] = {'A','2','3','4','5','6','7','8','9','10','J',''Q',K'}; か
char digit[] = {"A2345678910JQK"}; のように
文字列として初期化してた
ポインタ配列って方法もあったんだなと、気づかされたよ
俺もまだまだ勉強不足だと実感・・・・・
>>154
上のと同じだな・・・・
0156デフォルトの名無しさん
2006/11/12(日) 01:34:21参考書に載っているコードをそのまま打ち込んでるがコンパイルエラーになるということ?
Qが抜けてることからも分かるが、打ち込みミスが多いんじゃないか。
質問をする前に、自分が書いたソースと参考書を「一字一句」比較すべし。
>>145
>こんなエラー初めてです。参考書のエラー対策にも載っていません。
その参考書はC言語のすべてを網羅した魔法の本ではない。本に載ってないことは分からない、ではなく
もっと調べる対象を広げるべき。
コンパイラの出すエラーなら、コンパイラのマニュアルなどを調べる。
VC++とかならMSDNにたいていのことが載っている。BCCのことはよく知らんが。
すぐ上の行に
>警告 W8065 blackgack.c 33: プロトタイプ宣言のない関数 'drawCrad' の呼び出し(関数 main )
とある。プロトタイプ宣言が何かを知ってる? まずはそれをその参考書で調べること。
とりあえずコンパイルエラーがたくさん出たら、一番上のから順に解決していけ。
一つの原因から、それに連鎖してさまざまなエラーが出る。一つをつぶせばそれに関連していくつかのエラーが消えることがある。
0157140
2006/11/12(日) 01:37:00>>Error: 外部シンボル '_drawCrad' が未解決(C:\BBB\BLACKGACK.OBJ が参照)
ちなみにこれはdrawCradという関数が使われているが関数の実体が無いよ、と言っている
0158デフォルトの名無しさん
2006/11/12(日) 02:20:13そうなんですか
じゃあIEとかペイントとかメモ帳とかをCで作ろうと思ったら
WINAPIやらそれ関係が入っているライブラリを呼び出して作るんでしょうか?
なんていうかその呼び出す関数もCで作られてるんですよね?
んー;;なんかよく分からない
Cがすごくできる人の定義ってなんなんでしょう・・
0159133、ずれてしまったので最初から訂正です
2006/11/12(日) 02:49:03はい、ここで訊く前にもっと調べたりエラーを
たどってみます
0160156
2006/11/12(日) 03:26:37問題に対する解決方法を知るのも大事だが、
自分で解決方法を見つけらるようにする方法を学ぶことも大事。
がんばれ。
0161デフォルトの名無しさん
2006/11/12(日) 03:31:28プログラミングに向いてないな。いい加減コテつけっぱなしなことに気付けよ。
0162デフォルトの名無しさん
2006/11/12(日) 04:51:31どうしてもソートできないのです。身長順にしたいんですが・・
構造体の配列のソートってむずかしい。。
typedef struct Person{
char name[100];
double height;
}Person;
int main(void)
{
Person prs1[NUM];
int a,b,c,d;
double tst;
for(a=0; a<3; a++){
printf("名前を入力してください。\n");
scanf("%s",prs1[a].name);
printf("身長を入力してください。\n");
scanf("%lf",&prs1[a].height);
}
for(b=0; b<NUM-1; b++){
for(c=0; c<NUM; c++){
if(prs1[c].height > prs1[b].height){
tst = prs1[c].height;
prs1[c].height = prs1[b].height;
prs1[b].height = tst;
}
}
}
for(d=0; d<NUM; d++){
printf("%sさんは%lfセンチです。\n",prs1[d].name,prs1[d].height);
}
return 0;
}
0163デフォルトの名無しさん
2006/11/12(日) 07:13:19Person tmp;
for(b=0; b<NUM-1; b++){
for(c=b+1; c<NUM; c++){
if(prs1[c].height > prs1[b].height){
tmp=prs1[c];
prs1[c]=prs1[b];
prs1[b]=tmp;
}
}
}
0164デフォルトの名無しさん
2006/11/12(日) 07:13:35構造体のメンバ(身長だけ)を入れ替えてるだけだと思うんだけど
0165デフォルトの名無しさん
2006/11/12(日) 07:14:340166デフォルトの名無しさん
2006/11/12(日) 07:36:19'10' とか書いてる時点で釣りだろ?
0167デフォルトの名無しさん
2006/11/12(日) 08:00:06>>127
ありがとんです
MS-DOS時代のものを
ちょっといじるだけではだめなのですね(!=)
wincon.hをぐぐってきます〜
0168162
2006/11/12(日) 10:37:55なんでtstがtmpに変わってるのか意味がわからないんですが・・
163の文章をどこかに入れ替えればいいのでしょうか?
やったんだけどうまくいきませぬ。。
0169デフォルトの名無しさん
2006/11/12(日) 11:22:170170162
2006/11/12(日) 11:27:27c=b+1のとことPersonのとこでした。
ありがとうございました。
0171デフォルトの名無しさん
2006/11/12(日) 13:17:000172デフォルトの名無しさん
2006/11/12(日) 13:22:13エラーになっている行を消す を繰り返す
0173デフォルトの名無しさん
2006/11/12(日) 15:34:04エラーを出さない怠け者なコンパイラを 使う
0174デフォルトの名無しさん
2006/11/12(日) 18:29:39ごめんUNIXよくわかんない
0175デフォルトの名無しさん
2006/11/12(日) 18:47:47わからないなら答えないでください!
0176デフォルトの名無しさん
2006/11/12(日) 18:48:550177デフォルトの名無しさん
2006/11/12(日) 19:03:58コンパイラの性能にではなく
オマエの性能をうp
0178デフォルトの名無しさん
2006/11/12(日) 19:16:180179デフォルトの名無しさん
2006/11/12(日) 20:02:320180デフォルトの名無しさん
2006/11/12(日) 20:33:010181デフォルトの名無しさん
2006/11/13(月) 00:15:14構造体のメンバー名に変数を使用することはできないのでしょうか?
0182デフォルトの名無しさん
2006/11/13(月) 00:18:22???
試してみりゃいいじゃん
もしくは具体的な例を店ろ
0183デフォルトの名無しさん
2006/11/13(月) 00:27:15メンバー名をchar配列とかで決めるってことか?
0184デフォルトの名無しさん
2006/11/13(月) 00:32:52試したりしてるんですが、いかんせん勉強したてで...
>>183
まさにそれがやりたいんです
char配列で宣言したり、アクセスしたりしたいんですが...
0185デフォルトの名無しさん
2006/11/13(月) 00:45:510186デフォルトの名無しさん
2006/11/13(月) 00:51:53やっぱ無理ですか...
無理だと分かるだけでもありがたいです。
どうもありがとう
0187デフォルトの名無しさん
2006/11/13(月) 01:12:230188デフォルトの名無しさん
2006/11/13(月) 09:10:31上の関数の中身をs1=s2;にしたらコピーできない理由がわからないです
1文字ずつ比較しないとだめなのでしょうか
#include <stdio.h>
#include <string.h>
#define MAX 10
void str_copy(char *s1,char*s2)
{
while(*s2!='\0')
*s1++ = *s2++;
*s1 ='\0';
}
int main(void)
{
char str_a[MAX]="abcde";
char str_b[MAX]="fghi";
printf("str_a:%s, str_b=%s\n",str_a,str_b);
str_copy(str_a,str_b);
printf("str_a:%s,str_b=%s\n",str_a,str_b);
return 0;
}
0189デフォルトの名無しさん
2006/11/13(月) 09:40:59呼び出し元のstr_a, str_bには全く影響受けない
0190デフォルトの名無しさん
2006/11/13(月) 10:08:050191デフォルトの名無しさん
2006/11/13(月) 11:37:540192デフォルトの名無しさん
2006/11/13(月) 12:04:000193デフォルトの名無しさん
2006/11/13(月) 12:07:12構造体のサイズが無限大になるから
0194デフォルトの名無しさん
2006/11/13(月) 12:20:43"モード1選択"
#else
"モード2選択"
#endif
#ifdefでどちらが選択されたかをコンパイル時にコンソールに表示したいのですが、
なにか方法はないでしょうか?
0195デフォルトの名無しさん
2006/11/13(月) 12:30:46# 多分 #pragma で出ることが多い
0196デフォルトの名無しさん
2006/11/13(月) 13:14:03#message モード2
でできました。有り難うございました。
C51を使用してますが、手持ちのヘルプには記載ありませんでした。
0197デフォルトの名無しさん
2006/11/13(月) 16:16:07「コンパイル時」
0198デフォルトの名無しさん
2006/11/13(月) 16:17:20double型の変数で整数の部分だけを出力するにはどうしたらいいですか?
0199デフォルトの名無しさん
2006/11/13(月) 16:25:15double val = 1234.5678;
printf("%.0f");
->1235
printf("%d", (int)val);
->1234
0200デフォルトの名無しさん
2006/11/13(月) 17:03:08ありがとうございます
切捨てと切り上げの両方できるんですね。
そしてsage忘れてすみません・・・。
0201デフォルトの名無しさん
2006/11/13(月) 18:10:02切り上げはceil。
切り捨てのfloorもある。
0202デフォルトの名無しさん
2006/11/13(月) 19:05:17struct a(a1) に struct a(a2) を持たせるとその struct a(a2) もstruct a(a3) を持つのでその struct a(a3) はさらに struct a(a4) を持つので(ry
となってしまう
struct a へのポインタなら持たせられるにょ
0203デフォルトの名無しさん
2006/11/13(月) 19:11:12(VC++の場合)まるめの方向が0へ向かう四捨五入(?)っぽいね?
printf("%.0lf %.0lf %.0lf %.0lf", -123.5, -123.4, 123.4, 123.5);
→ -124 -123 123 124
このときの振る舞いは環境依存?
0204デフォルトの名無しさん
2006/11/13(月) 19:13:50C言語としては負数のとき丸め方向は定義されてないから
コンパイラの実装依存と思う
と調べずにカキコ
0205デフォルトの名無しさん
2006/11/13(月) 19:21:42素人なんですが、わりやすくどなたかおしえていただけないでしょうか?
0206デフォルトの名無しさん
2006/11/13(月) 19:22:24単に絶対値で丸めってだけじゃね
と便乗して調べずレス
0207デフォルトの名無しさん
2006/11/13(月) 19:43:07文法が似ているのと、ライブラリ関数が似ているだけで
まったく別の言語です
0208デフォルトの名無しさん
2006/11/13(月) 20:08:42ありがとうございます。
0209デフォルトの名無しさん
2006/11/13(月) 20:18:27Cを拡張、ベースにしたもの
まぁCをまねてC+やC++など作ったみたいな
結果的には別物...
0210デフォルトの名無しさん
2006/11/13(月) 20:19:400211デフォルトの名無しさん
2006/11/13(月) 20:30:36>>210
とりあえずCを勉強すればC+やC++などの方にも応用がきくといった感じですか?
ありがとうございました。
0212デフォルトの名無しさん
2006/11/13(月) 20:33:13限られた特定の環境でしか使わない。
覚えるなら Objective-C にしろ。
0213デフォルトの名無しさん
2006/11/13(月) 20:40:040214デフォルトの名無しさん
2006/11/13(月) 20:41:16それでもC++すきだけどな
0215デフォルトの名無しさん
2006/11/13(月) 20:48:58Objective-CはCとの互換性があるけど、現実的じゃない。
0216デフォルトの名無しさん
2006/11/13(月) 20:53:03とりあえずCを勉強してみようと思います。
0217デフォルトの名無しさん
2006/11/13(月) 21:10:11C#は流行るか?
何かすぐ消えそうな気がする
0218デフォルトの名無しさん
2006/11/13(月) 21:17:200219デフォルトの名無しさん
2006/11/13(月) 21:30:27同意。俺の周りにはC#やってる奴はいない
0220デフォルトの名無しさん
2006/11/13(月) 21:53:190221デフォルトの名無しさん
2006/11/14(火) 01:49:250222デフォルトの名無しさん
2006/11/14(火) 01:59:04文字列を使う。
0223デフォルトの名無しさん
2006/11/14(火) 01:59:550224デフォルトの名無しさん
2006/11/14(火) 02:01:470225デフォルトの名無しさん
2006/11/14(火) 02:27:54Mac専用でしょ?
0226デフォルトの名無しさん
2006/11/14(火) 02:50:36戻り値や引数を展開しないので
動作が速くなると言うが、
戻り値void、引数なしの場合は早くなるんでしょうか?
(・・というかvoidも型か・・)
関数を実行するだけで、何か値が動くと思うので、
そのせいでマクロよりは多少遅いものなのでしょうか?
0227デフォルトの名無しさん
2006/11/14(火) 02:53:57例えば、123 456 78
と入力されると、
78 456 123
と表示されるようなのです。
0228デフォルトの名無しさん
2006/11/14(火) 03:02:11ぱっと思いつくのは2通り。
1.全部配列に読み込んで逆順に出す
2.ファイルポインタをftell()で取得して配列に入れ、fseek()で逆順に出す
0229デフォルトの名無しさん
2006/11/14(火) 03:50:16char str*[] = {"CAT","DOG"}; になっていいのでしょうか?
0230デフォルトの名無しさん
2006/11/14(火) 04:10:03前者はchar型の配列
後者はchar型へのポインタ配列
意味が全然違う
0231デフォルトの名無しさん
2006/11/14(火) 04:10:38予め -1 にしておくとは、どういう意味でしょうか?
0232デフォルトの名無しさん
2006/11/14(火) 04:13:19日本語で書いて
それだけじゃ意味わからんぞ
0233デフォルトの名無しさん
2006/11/14(火) 04:37:06サンクスです。
どうして、*が付くとそう書けるのかがわかりません
0234デフォルトの名無しさん
2006/11/14(火) 04:37:49メモリはどうなるのか教えてください。
あと、絶対にほかのプログラムのメモリにはアクセスできない
のでしょうか?
というか、Cの質問じゃないですかね?
0235デフォルトの名無しさん
2006/11/14(火) 04:46:400236デフォルトの名無しさん
2006/11/14(火) 06:05:16メモリが予約されるが、その中に何が入っているかは未定。
前そのメモリ空間を使っていた変数の値がその領域にのこったまま
だったらそれがそのままその領域に残ってる(初期化してくれない)
したがって宣言時に予約した領域に無意味な値を入れて安全にする
(初期化)ことが重要な場合が・・ある
0237デフォルトの名無しさん
2006/11/14(火) 07:40:34int foo = 5;と書いて
int fooz[] = {1, 2, 3, 4,};と書くが如く、
char * bar = "aho";と書いて
char * barz[] = {"tako", "ika", "kurage",};と書く。
0238デフォルトの名無しさん
2006/11/14(火) 07:41:51今時のコンパイラはインライン展開もするから、下手な小細工考えずに関数で書け。
そしてその関数だけでなくプログラム全体でプロファイリングしろ。
話はそれからだ。
0239デフォルトの名無しさん
2006/11/14(火) 08:30:14226です。ありがとうございます!
インライン展開、プロファイリングという言葉を初めて知り、
調べることが出来ましたyo
0240デフォルトの名無しさん
2006/11/14(火) 08:35:34数値を指定桁数まで右スペース埋めしたいのですがどのように書けば良いのでしょうか?
左埋め… printf("%4d",10)→" 10"を出力
右埋め… printf("?",10)→"10 "を出力
�Aまた、上記の桁数(4)も動的に指定するにはどのように書式を指定すれば良いのでしょうか?
よろしくおねがいします。(性的な意味で)
0241デフォルトの名無しさん
2006/11/14(火) 08:57:38printf("%-*d", 4, 10);
0242デフォルトの名無しさん
2006/11/14(火) 09:12:000243デフォルトの名無しさん
2006/11/14(火) 10:13:510244デフォルトの名無しさん
2006/11/14(火) 15:37:33n×nのサイズで螺旋状に0から(n二乗ー1)までの数が並ぶ行列を作成し、
画面に表示させるプログラムって配列を使って組むにはどうすればいいでしょうか?
ヒントだけでもいいので教えてください。お願いします。
0245デフォルトの名無しさん
2006/11/14(火) 15:43:52宿題スレにでも行ったら?
0246デフォルトの名無しさん
2006/11/14(火) 18:29:280247デフォルトの名無しさん
2006/11/14(火) 18:35:33typedef unsigned long (*function_ptr)(int, long, long);
のようにね。
0248デフォルトの名無しさん
2006/11/14(火) 19:38:4316進以外が途中に入力されたらエラーを出力したいのですが、何か良い方法はありますか?
0249デフォルトの名無しさん
2006/11/14(火) 19:39:450250デフォルトの名無しさん
2006/11/14(火) 19:40:13馬鹿だなぁ
タッチパネルに決まってるだろ?
0251デフォルトの名無しさん
2006/11/14(火) 19:47:26改めて質問させて下さい。コピペになりますが、よろしくお願いします。
グーグル先生に質問してみたのですがよくわかりませんでした・・orz
宜しければ詳しく教えて欲しいのですが。
C++にて、テキストファイルに書き込まれたデータを構造体に格納する方法です。
データは一行につき1件で、カンマで区切られて4つの項目があります。
char型が2つとint型が2つになります。
データは10件(行)あります。
よろしくお願いします(´・ω・`)
0252デフォルトの名無しさん
2006/11/14(火) 19:55:520253デフォルトの名無しさん
2006/11/14(火) 19:57:28■ このスレッドは過去ログ倉庫に格納されています