C言語なら俺に聞け! Part 112
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/08/08(月) 01:32:01質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
C言語なら俺に聞け! Part 111
http://pc8.2ch.net/test/read.cgi/tech/1121657911/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0402360
2005/08/16(火) 22:55:23フォローしていただいてありがたい所ですが、自分でもよく分かりません。
先日見た設定書では、
ファイルの中の先頭から**バイトにAの情報、次の**バイトにBの情報、・・・
というようなことが書かれていたと記憶しています。
また、「ダンプ」という言葉もチラッと耳にした覚えがあります。
教えを請うには色々と情報が足りなかったようです。
0403デフォルトの名無しさん
2005/08/16(火) 23:04:48>そして、!= とか == などの演算子は、0 かそれ以外の値をとる整数値になります。
>よって、 たとえば (12 == 13) という条件文は「偽」ではなく 0 という "整数" をとります。
比較演算子は0か1を返してくるよ。
a = ( x > 0 ) ? ( 1 ) : ( 0 );
は
a = x > 0;
と同じ。
見辛いからあまりお勧めはしないけど。
0404デフォルトの名無しさん
2005/08/16(火) 23:17:29...
0405デフォルトの名無しさん
2005/08/16(火) 23:19:190406デフォルトの名無しさん
2005/08/16(火) 23:26:15?
比較演算子は0か1しか返さないって言いたいだけだよ。
0かそれ以外の整数を返すって>>368に書いてあるじゃん。
0407デフォルトの名無しさん
2005/08/16(火) 23:39:34ならば次の順序で書くべきだな。
a = x > 0;
は
a = ( x > 0 ) ? ( 1 ) : ( 0 );
と同じ。
0408デフォルトの名無しさん
2005/08/16(火) 23:43:19結局何が言いたいの?
0409デフォルトの名無しさん
2005/08/16(火) 23:43:40変数の初期化について質問です
unsigned int x=0;
x++;
こんなプログラムを書いたとすると
延々 xが0になっちゃいますよね
一回だけ初期化して 二回目は無視みたいなことは簡単にできないのでしょうか?
0410デフォルトの名無しさん
2005/08/16(火) 23:46:39unsigned int x=0;
x++;
こんなプログラムを書くとx==1になるが?
0411デフォルトの名無しさん
2005/08/16(火) 23:46:45しかしわかりにくい日本語と情報量だな、>>409糞ガキ
0412デフォルトの名無しさん
2005/08/16(火) 23:57:570と-1の可能性もあると思ったけど
0413デフォルトの名無しさん
2005/08/16(火) 23:59:48つ[static]
0414デフォルトの名無しさん
2005/08/17(水) 00:00:48>フォローしていただいてありがたい所ですが、自分でもよく分かりません。
まともに質問できないどころか、設計、仕様さえ理解してなかったわけね。
いいかげん腹たってくるな。ここでそんな告白しないで、挨拶して誘導して、
あっちでちゃんととりさげるのが筋じゃあるまいか? (あやまれとまで言わんが)
ttp://pc8.2ch.net/test/read.cgi/tech/1121644782/433
>教えを請うには色々と情報が足りなかったようです。
まあ、仕事がらみなら会社ん中でちゃんと解決しろよ。
もともとほんとにこの程度の話なら、基礎応用に過ぎないので、
解説やらヒントも何も、アドバイスしようが無いほどなので。
0415デフォルトの名無しさん
2005/08/17(水) 00:06:54ISO/IEC 9899:1999の6.5.8 -6と6.5.9 -3によれば、Relational operatorsも
Equality operatorsも共に結果は0と1で、その型はintだそうな。
0416デフォルトの名無しさん
2005/08/17(水) 00:35:53他に アルゴリズムの本買えば
C言語のプログラムは作れる様になるの?
0417デフォルトの名無しさん
2005/08/17(水) 00:37:34それでやったけど 延々1のままです
0418デフォルトの名無しさん
2005/08/17(水) 00:42:050419デフォルトの名無しさん
2005/08/17(水) 00:45:380420デフォルトの名無しさん
2005/08/17(水) 00:47:43{
static unsigned int c=0;
c++;
Printf("%d",c);
}
省略するとこんな感じですかね
0421デフォルトの名無しさん
2005/08/17(水) 00:52:13まさか起動する度に数字を変化させたいのか?
だったらファイルに書き出すしかない。
0422デフォルトの名無しさん
2005/08/17(水) 00:53:04市ね>>420
市ね>>420
市ね>>420
氏ね!>420
0423デフォルトの名無しさん
2005/08/17(水) 00:53:260424デフォルトの名無しさん
2005/08/17(水) 00:56:15何がしたいのかハッキリ書かんと
どうしようもないよ
0425デフォルトの名無しさん
2005/08/17(水) 00:58:030426デフォルトの名無しさん
2005/08/17(水) 00:58:05あ いけました
0427デフォルトの名無しさん
2005/08/17(水) 01:02:04なんか、もやもやする。
0428デフォルトの名無しさん
2005/08/17(水) 01:13:28と思ったらいけてないかもorz
pspの自作プログラムのソースをいじってるところなんです
0429デフォルトの名無しさん
2005/08/17(水) 01:37:21{
static unsigned int c=0;
c++;
Printf("%d",c);
main(aaa,aaa)
}
。
0430デフォルトの名無しさん
2005/08/17(水) 01:45:21えぇっと、何がしたいんですかぇ?
先ず、何でもいいからC言語の本買ってきて
読みましょう。
0431デフォルトの名無しさん
2005/08/17(水) 01:48:18メチャクチャです。
0433デフォルトの名無しさん
2005/08/17(水) 02:01:11>>409が再帰を理解しているとは思えんし。
0434デフォルトの名無しさん
2005/08/17(水) 02:03:33そっそうですか。
でも、先ず本読んでください。
0435デフォルトの名無しさん
2005/08/17(水) 03:24:420436ぼるじょあ ◆yBEncckFOU
2005/08/17(水) 09:20:260439デフォルトの名無しさん
2005/08/17(水) 18:00:21固定文字列をソースの中に持たせる時、
1) #define FIXED_STRING "hogehoge"
2) static const char* FIXED_STRING[] = "hogehoge";
と2種類の方法がありますが、両者に違いはあるのでしょうか?
違うのだとしたら、どういう場合で使い分ければよいのでしょうか?
「こういうときはこうする」、「俺はこうしてる」等
意見があったら教えてください。
0440デフォルトの名無しさん
2005/08/17(水) 18:07:53前者は後者より古い流儀。
後者は前者よりプログラムサイズが小さくなるけど、
それ以外の違いは開発時に感じた事はないな。
0441デフォルトの名無しさん
2005/08/17(水) 18:09:48static const char* FIXED_STRING[] = "hogehoge";
これは構文ネラーになるはず
0442デフォルトの名無しさん
2005/08/17(水) 18:22:15static const char FIXED_STRING[] = "hogehoge";
か
static const char* FIXED_STRING = "hogehoge";
ですね。一般的にマクロはデバッグしにくくなりますね。今回の場合は
関係ないかもしれませんが。
0443デフォルトの名無しさん
2005/08/17(水) 18:31:16複数の関数内で利用すると実体が複数作られる。
後者は長さが得られないが実体は複数作られない(かもしれない)。
Cの場合、マクロで充分な気もするのだが。
0444デフォルトの名無しさん
2005/08/17(水) 19:54:15配列サイズの指定で使えない。
0445デフォルトの名無しさん
2005/08/17(水) 21:20:29マクロならできる
0446デフォルトの名無しさん
2005/08/17(水) 21:26:39イヤな使い方だw
0447デフォルトの名無しさん
NGNGstaticにしてるってことは、インクルードファイルにでも書いておいて、
それぞれのファイルで、インクルードするような使い方を想定してるっぽいから、
ファイルサイズは小さくはならないと思う。
0448デフォルトの名無しさん
2005/08/17(水) 22:30:540449デフォルトの名無しさん
2005/08/17(水) 22:37:130450デフォルトの名無しさん
2005/08/18(木) 00:16:18#define INI_FILE_DIR "../config"
#define INI_FILE_NAME "foo.ini"
fopen(INI_FILE_DIR "/" INI_FILE_NAME, "r");
とか?
別にいいじゃん。
0451デフォルトの名無しさん
2005/08/18(木) 00:36:05お前は俺か!>>445じゃないけど
0452デフォルトの名無しさん
2005/08/18(木) 00:54:110453デフォルトの名無しさん
2005/08/18(木) 00:55:53使えても便利と思ったことはない
0454デフォルトの名無しさん
2005/08/18(木) 01:10:45ただ、セミコロンを打たなくていいのは結構うれしい。
0455デフォルトの名無しさん
2005/08/18(木) 01:25:330456デフォルトの名無しさん
2005/08/18(木) 03:10:20#include<stdio.h>
#define num=10;
int i;
double data[num]={ 173.8,168.2,180.3,166.0,189.7,167.4,159.8,170.5,167.5,167.4};
int main(void)
{
for(i=1;i<=num;i++){
int j,max=i;
for(j=i+1;j<=num;j++) /*最大の要素の場所を捜す*/
if (data[max]<data[j]) max=j;
data[i]=data[max];
data[max]=data[i]; /*入れ換え*/
}
for(i=1;i<=num;i++) printf("%7.1f ",data[i]);
return 0;
}
0457デフォルトの名無しさん
2005/08/18(木) 03:22:04{
int i,j,l;
for(i=0;i<num;i++){
for(j=i+1;j<num;j++){
if(data[i]<data[j]){
l=data[i];data[i]=data[j];data[j]=l;
}
}
}
for(i=0;i<num;i++) printf("%7.1f ",data[i]);
return 0;
}
0458デフォルトの名無しさん
2005/08/18(木) 03:51:36スレ違い。
宿題なら宿題スレへ、そうでないなら初心者スレ辺りへ。
0459デフォルトの名無しさん
2005/08/19(金) 01:51:210461デフォルトの名無しさん
2005/08/19(金) 09:54:30それぞれの構造体がもう一方の構造体を要素として持ちたい時、
どうやればいいんでしょう?下のだとニワトリと卵になってしまうし・・。
----- aaa.h -----
#include "bbb.h"
typedef struct {
BBB *b;
}AAA;
---- bbb.h ----
#include "aaa.h"
typedef struct {
AAA *a;
}BBB;
0462デフォルトの名無しさん
2005/08/19(金) 10:00:40typedef struct B B;
struct A { B* b; };
struct B { A* a; };
0463デフォルトの名無しさん
2005/08/19(金) 10:06:07別々のファイルで宣言すること自体がおかしいってこと?
0464デフォルトの名無しさん
2005/08/19(金) 10:53:56-----t0.h
#ifndef t0_h
#define t0_h
#include "t1.h"
struct a {
struct b *b;
};
typedef struct a a;
#endif
-----t1.h
#ifndef t1_h
#define t1_h
#include "t0.h"
struct b {
struct a *a;
};
typedef struct b b;
#endif
0465デフォルトの名無しさん
2005/08/19(金) 12:28:37入力の中でもっとも大きな数字を表示しなさい。
※入力桁数のエラーについて対処する事
という課題が出されたのですが、入力桁数のエラーがよく分かりません。
誰か教えていただけないでしょうか?
0466デフォルトの名無しさん
2005/08/19(金) 12:46:52どういうエラーなのかが分からないとなんとも。
0467デフォルトの名無しさん
2005/08/19(金) 12:53:11ありがとん。できました。
0468465
2005/08/19(金) 12:55:12先ほどのが課題文の全文なので私にもよく分かっていないのですが、
おそらくは型が扱う数字を超えて入力した場合、
たとえば、int型なら32,767より大きい数字を入力した場合に認識されないことについて対処する
ということだと思います。
0469デフォルトの名無しさん
2005/08/19(金) 13:26:10そう考えた、ということでコード組めばいいんじゃない?
あと、intの場合は環境によってサイズが違うので注意。
・sizeofでバイト数をチェックして上限を計算
・今の環境に合わせて、とりあえず決め打ち
など、方法はいろいろあるので試してみ。
(独り言)
学校の課題ってのは結果をただ提出するだけじゃないんだよ。
不明点、疑問点があったら提出前に質問しに行ってもいいんだし。
全く分からない、何がわからないのかわからない」ってのは論外だけど。
0471デフォルトの名無しさん
2005/08/19(金) 13:40:160472デフォルトの名無しさん
2005/08/19(金) 13:57:42まあ、宿題○投げじゃないから
いいんでないの?
0473465
2005/08/19(金) 14:00:55ですから、宿題スレで質問するのも気が引けてしまいまして(苦笑)
0474デフォルトの名無しさん
2005/08/19(金) 14:15:39double c;
a = 10;
b = 1000;
c = a / b ;
printf("c = %f",c);
結果 c = 0.000000となってしまうのはなぜでしょうか?
0475デフォルトの名無しさん
2005/08/19(金) 14:18:490476デフォルトの名無しさん
2005/08/19(金) 14:30:09ありがとうございました。
もうひとつすみません。
int a,b,d;
double c;
a = 5
b = 5;
d = 1000;
c = (a + b) /d ;
printf("c = %f",c);
この結果がc = 0.000000となりますが
int a,b,d;
double c;
a = 5
b = 5;
d = 1000;
c = a + b ;
c = c / d;
printf("c = %f",c);
この結果がc = 0.01となるのはどうしてでしょうか?
すみませんが教えてください。
0477デフォルトの名無しさん
NGNG> ・sizeofでバイト数をチェックして上限を計算
これってintの最大値のことを言ってるの?
だったらINT_MAXを使うのが定跡だと思うけど。
0478デフォルトの名無しさん
2005/08/19(金) 14:31:05Cでファイルからデータを読み出すとき、「1行(次の\nまで)を読み込む」ってどうしてます?
fgetc で1文字ずつ読み込んで \n かどうか判定して・・・ってやるしかないでしょうか。
まさか fscanf とか使うのもあれだし。
スクリプトファイルを読み込むときなどに使います。
0479デフォルトの名無しさん
2005/08/19(金) 14:33:58fgets関数っていうのがありますよ。
0480デフォルトの名無しさん
2005/08/19(金) 14:35:18fgets()
0481デフォルトの名無しさん
2005/08/19(金) 14:36:18fgets 調べてみました
・・・今までの苦労は・・・orz ありがとございました。
0482デフォルトの名無しさん
NGNG一行はかならず*Kバイト以下とか、そういう仕様で割り切れば、fgets()で簡単に書けると思う。
0483デフォルトの名無しさん
2005/08/19(金) 14:37:28>c = (a+b)/d;
(a+b)もdもint型だから、int型の(a+b)/dがdouble型に型変換されてcに代入される。
>c = c / d;
cがdouble型だからdがdouble型に暗黙的に型変換されてdouble型のc/dが計算される。
その結果がcに代入される。
もう少し型について勉強しとけ。
0484デフォルトの名無しさん
2005/08/19(金) 14:38:18ありがとうございました。
0485デフォルトの名無しさん
2005/08/19(金) 14:38:26前者の場合、
c = (a + b) /d の右辺はすべて整数値
後者の場合、
c = a + b ;
の時点だと右辺は整数値だが
c = c / d;
ではcがdoubleのため実数値となる
前者の場合でも、aかbをdoubleでキャストすれば
後者と同じ結果になる
0486デフォルトの名無しさん
2005/08/19(金) 14:40:44本当にすいません。ありがとうございました。
0487デフォルトの名無しさん
2005/08/19(金) 20:08:24を得るのってどうすればいいのですか?
0488デフォルトの名無しさん
2005/08/19(金) 20:13:49VC なら _fileno 関数が。非標準ね。
stdio.h を読んで構造体メンバから引張ってくるとか。
互換性に問題あるけど。
0489デフォルトの名無しさん
2005/08/19(金) 20:39:40Unix 系なら int fileno(FILE *stream) てなものが...
0490デフォルトの名無しさん
2005/08/19(金) 22:14:49atoiとかstrgetvalue()とか使えないもんかな
0491デフォルトの名無しさん
2005/08/19(金) 23:04:42一体全体何を言っているのやら。
0492デフォルトの名無しさん
2005/08/19(金) 23:24:55何か良い参考書とか
サンプル(オプションなどのコメントアウト付)とかないですかね?
0493デフォルトの名無しさん
2005/08/19(金) 23:28:27ttp://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html
ttp://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/makefile.html
俺はこの二つでなんとなかった。あくまで俺の場合な。
0494デフォルトの名無しさん
2005/08/19(金) 23:28:58スレ違い。
Unixプログラミングスレ、makeスレ、書籍スレなどへどうぞ。
0495464
2005/08/20(土) 01:40:36あんたに宿題
>>464 のコードから #include 行を削除しても問題がない事を確認し,
なぜ #include 行がなくても問題ないのか述べよ.
0496デフォルトの名無しさん
2005/08/20(土) 03:05:41typedef struct AAA_{
struct BBB_ *b;
}AAA;
---- bbb.h ----
typedef struct BBB_{
struct AAA_ *a;
}BBB
ってかんじ?
ちなみにstructはtypedefしない方がぱっと見分かりやすいぞ
0497デフォルトの名無しさん
2005/08/20(土) 10:58:01(w)sprintfてのは、int→char変換の為に、て意味でも存在してるぞ
char a;
int b;
(w)sprintf(&a,"%d",b);
0498デフォルトの名無しさん
2005/08/20(土) 11:01:14'\0'の分を用意していないからだめだろ。snprintf/swprintf
0499デフォルトの名無しさん
2005/08/20(土) 15:41:34is_prime = 1
for(i=2; i<=num/2; i=i+1)
if((num%i)==0) is_prime = 0;
これはどうゆう計算が行われてますか?
教えて下さい。。。
0500デフォルトの名無しさん
2005/08/20(土) 15:56:24約数があるかどうか調べてる
0501デフォルトの名無しさん
2005/08/20(土) 16:18:12誰が書いたんだ?
i=i+1じゃなくてi++でいいのに
■ このスレッドは過去ログ倉庫に格納されています