C言語なら俺に聞け! Part 124

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 123
http://pc8.2ch.net/test/read.cgi/tech/1140929905/
2デフォルトの名無しさん:2006/03/14(火) 11:24:17
//1乙
3デフォルトの名無しさん:2006/03/14(火) 11:47:40
ぬるぽって何?
4デフォルトの名無しさん:2006/03/14(火) 12:16:01
 ぬるぽ【NullPointerException】[Java・クラス・例外]
 
 参照する変数がnullであるため処理を続行できなくなったときに
 プログラムまたはJava仮想マシン(JVM)が送出するランタイム例外
 ガベージコレクション(GC)のタイミング、処理が重いときや
 JVMのバージョン等の影響で再現性なくこの例外が送出される場合がある
 
再現性なく問題が発生することがあるので、対処のしようがない
(設計も見直すことで解決するかもしれない)
→オーマイ「ガッ」
→キーボードなど「ガッ」と叩いて八つ当たりする
とすることから ぬるぽ→ガッ の流れができた

のかは知らん
5デフォルトの名無しさん:2006/03/14(火) 12:32:25
>>4
「ガッ」してたのは「Javaにはポインタなんてないよ派」だけど
まあ大体あってる。
6デフォルトの名無しさん:2006/03/14(火) 12:36:09
>>4-5
「ガッ」の由来が違う。
7デフォルトの名無しさん:2006/03/14(火) 14:55:07
3です。大体わかったんですが、スレの中の発言での『ぬるぽ』はどういう意味何でしょうか?
8デフォルトの名無しさん:2006/03/14(火) 15:26:59
ガッ
どこがわかったのかw
9デフォルトの名無しさん:2006/03/14(火) 15:39:35
ぬるぽが略語であること
10デフォルトの名無しさん:2006/03/14(火) 15:45:06
ガッわかったってことかな?
11デフォルトの名無しさん:2006/03/14(火) 17:41:02
hogeってなんだよ。
12デフォルトの名無しさん:2006/03/14(火) 17:53:03
ぬるぽの使い方がわからん
13デフォルトの名無しさん:2006/03/14(火) 17:55:26
いつ何処で誰が何のためにぬるぽ使ったんだ?
14デフォルトの名無しさん:2006/03/14(火) 18:03:45
>>12
#include <stddef.h>

int main()
{
    int *p = NULL;
    *p = 0;

    return 0;
}
15デフォルトの名無しさん:2006/03/14(火) 18:15:16 BE:15528342-
>>14
それはぬるぽの出し方のような。
16デフォルトの名無しさん:2006/03/14(火) 18:33:12
>>12, >>13, >>14, >>15 ガッ!
なんかこのスレは、ぬるぽ叩きスレになっているなw
17デフォルトの名無しさん:2006/03/15(水) 00:59:47
VBとCの根本的な違いって、何ですか?
18デフォルトの名無しさん:2006/03/15(水) 01:17:44
>>17
日本語と英語の違いと同じ
19デフォルトの名無しさん:2006/03/15(水) 01:18:21
VBはスレ違いなこと。
っつーか、「国鉄と乗用車の根本的な違いって、何ですか?」並にアフォな質問だな。
20デフォルトの名無しさん:2006/03/15(水) 01:21:23
>>17
http://pc8.2ch.net/test/read.cgi/tech/1139931895/914
から移ってきたんだろうけど、ここも残念ながらスレ違いだw
こっちの方がいいだろう
http://pc8.2ch.net/test/read.cgi/tech/1140269442/
21デフォルトの名無しさん:2006/03/15(水) 01:29:04
質問なのですが、
struct tagtext{
inta;
struct tagtext*next;
};
typedef struct tagtextTEXT;
int main()
{
TEXT*head,*cp;
inti;

head = NULL;
for(i = 0;i < 10;i++){
if((cp = (TEXT*)malloc(sizeof(TEXT)))==NULL)
{
puts("記憶領域の確保失敗");
exit(1);
}
cp->a = 200 + 10 * i;
cp->next = head;
head = cp;
}
while(cp != NULL){
printf("%d\n",cp->a);
cp = cp->next;
free(head);
head = cp;
}
return (0);
}
このプログラムの時に、freeで開放するのはwhileの中で一個ずつ開放するのと、
whileから出て freeで開放するのは、どっちで開放しても同じ結果になるんですか?
22デフォルトの名無しさん:2006/03/15(水) 01:42:38
>>21
どちらにしてもループさせながら全部 free() するのが正解だと思う。
23デフォルトの名無しさん:2006/03/15(水) 01:49:45
>>22
解答ありがとうございます<(_ _)>
今度から毎回whileの中で開放するようにします。
>>22さん本当にありがとうございました!
24デフォルトの名無しさん:2006/03/15(水) 03:05:59
>>23
まあ別に for でもいいんだけどさ。確保したものはきっちり解放するようにした方がいい。
まあ、解放直後に終ってOSに制御を移すような場合はやってもやんなくても同じだが、
OSなしの環境でそれをやるとしばらくすると暴走する機械ができ上がったりする。
25デフォルトの名無しさん:2006/03/15(水) 08:25:19
>>前スレ995
不定値だから1以外になることももちろんある。
連続して実行させると1ばかり出るというのも起こりえる。それでも不定は不定。
26デフォルトの名無しさん:2006/03/15(水) 17:04:10
実行すると最後に表示されるのですが、エラー報告付きの終了になります。
どこの辺が問題の部分なのか指摘して頂きたいのですがお願いします。
少し分けて貼ります。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct person {
char name[64];
struct person *next;
}Person;

typedef struct {
Person *head;
Person *tail;
}List;

Person *AllocNode(void);//1ノード追加
void AppendPerson(List *list);//ノードの追加
void PrintPerson(List *list);//全ノード表示
void InitPerson(List *list);
27デフォルトの名無しさん:2006/03/15(水) 17:05:24
Person *AllocNode(void)
{
    return ((Person *)calloc(1,sizeof(Person)));
}
void AppendPerson(List *list)
{
    Person *ptr = list->tail;
    list->tail = AllocNode();
    printf("名前は?");scanf("%s",ptr->name);
    ptr->next = list->tail;
}
void InitPerson(List *list)//制御ブロック作成
{
    list->head = list->tail = AllocNode();
}
void PrintPerson(List *list)
{
    Person *ptr = list->head;

    while(ptr != list->tail){
        printf("%s",ptr->name);
        ptr = ptr->next;
    }
}
28デフォルトの名無しさん:2006/03/15(水) 17:06:33
void main(void){

    List list;
    int flag = 1;

    InitPerson(&list);//初期化

    do{
        AppendPerson(&list);
        printf("追加しますか?1→YES、2→NO\n");
        scanf("%d",&flag);

    }while(flag != 0);

    PrintPerson(&list);
    free(&list);
}
29デフォルトの名無しさん:2006/03/15(水) 17:21:47
>>28
&list固定されてね?
30デフォルトの名無しさん:2006/03/15(水) 17:23:42
あー、微妙に勘違い

でもmain内のlistって初期化されてないよな?それ
31デフォルトの名無しさん:2006/03/15(水) 17:24:52
うわあ、List型はポインタじゃねえからやっぱ>>29であってるのかあqwせdrftgyふじこlp
32デフォルトの名無しさん:2006/03/15(水) 17:25:08
>>29
気付きませんでした・・・ポインタでは無いと言う事ですよね?
ポインタにして実行してみます。
33デフォルトの名無しさん:2006/03/15(水) 17:25:25
一番最後のfree(&list);
34デフォルトの名無しさん:2006/03/15(水) 17:26:35
freeするのはListそのものじゃなくてListが指してるヤツだからな
芋づる式にケツからfreeせんとだめだから結構面倒だぞ
35デフォルトの名無しさん:2006/03/15(水) 17:29:24
>>31
ご指摘されたlistをポインタに変え、アドレス演算子のついた場所を取り除いてみましたが
やはり、エラーの報告と言うのが出て、エラーを送信しますか?というのが出てしまいす。

>>33
freeの関数のアドレス演算子も取ってみましたが変わらずエラーになってしまいます。
36デフォルトの名無しさん:2006/03/15(水) 17:31:56
>>34
確保した領域は全てfreeしなければいけないという事なんですね・・・。
このプログラムの場合ですとfreeしていく関数が必要なんですねorz
ではまず、その関数を考えます。ありがとうございます!!
37デフォルトの名無しさん:2006/03/15(水) 17:32:14
>>26-28のままで基本的にはいい。
エラーは一番最後のfree(&list);のせい。
listはcallocで割り当てられてないのでfreeしちゃだめ。
AllocNodeで割り当てた分についてはPrintPersonみたいに一つづつfreeしないとだめ。
38デフォルトの名無しさん:2006/03/15(水) 17:32:40
List   ←こいつはmallocで確保したわけじゃないからfreeできない

head   ←こいつはmallocで確保してるからfreeできる、けど・・・

head   ←こいつからfreeしないとダメ(上からやるとこいつを参照する手段無くなる)


だからListをポインタにして、こいつを動的に確保しただけだと結局意味ねえ
39デフォルトの名無しさん:2006/03/15(水) 17:39:28
>>37
そういう間違いをしていたのですか。では領域を開放するのをPrintPersonの関数と
似た感じで作ればよろしいのですね。理解できてきました!ありがとうございます

>>38
結局意味無いのですかorz。でも作ってしまったので一応やってみます。
書いてあるのをみると、tailからfreeしていけばよろしいですね。
とても参考になります!ありがとうございます。
40デフォルトの名無しさん:2006/03/15(水) 17:39:29
2つ目のheadはnextの間違い
41デフォルトの名無しさん:2006/03/15(水) 17:42:16
>>39
一応、Listをポインタで宣言して、動的に確保した場合、エラーは発生せずに終了する(と思う)
でもゴミ(free出来ていない枝)がメモリ上に残ることになるので非常によろしくない

この場合誤ったfreeの直後に終了しているからトラブルは何も無いがこのあといろんな処理をする際
トラブルの温床になるのでこの機会に気をつけるようにしておくといいかな
42デフォルトの名無しさん:2006/03/15(水) 17:50:09
>>41
はい。これからメモリの扱いには注意深く気をつけてみます。
皆さん親切に解答して頂きありがとうございます。
これからメモリ開放できるように考えてみます。長いプログラムで面倒でしょうに
答えて頂き本当にありがとうございました。
43デフォルトの名無しさん:2006/03/15(水) 18:43:27
>>42
表示でグルグルまわしてるじゃねーか。
freeも同じようにやればいい。

でも途中の1要素だけ消すとか、そういうのも今後追加するんだろうから
それやってからでも遅くは無いか
44デフォルトの名無しさん:2006/03/15(水) 19:36:56
これ、VB6にならどういうコードになるの?

// Declare local identifiers:
HRESULT hr = S_OK;
CComPtr<ISpPhoneConverter> cpPhoneConv;
CComPtr<ISpLexicon> cpLexicon;
LANGID langidUS;
SPPHONEID wszId[SP_MAX_PRON_LENGTH];

hr = cpLexicon.CoCreateInstance(CLSID_SpLexicon);

// 0x409 for English.
langidUS = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);

if(SUCCEEDED(hr))
{
hr = SpCreatePhoneConverter(langidUS, NULL, NULL, &cpPhoneConv);
}

if(SUCCEEDED(hr))
{
hr = cpPhoneConv->PhoneToId(L"r eh d", wszId);
}
if(SUCCEEDED(hr))
{
hr = cpLexicon->AddPronunciation(L"red", langidUS, SPPS_Noun, wszId);
}

if (SUCCEEDED(hr))
{
// Do stuff here.
}
45デフォルトの名無しさん:2006/03/15(水) 19:39:54
>>44
スレ違い
46デフォルトの名無しさん:2006/03/15(水) 20:38:55
1行前に戻りたい場合ってどうすればいいですか?
1文字前なら\bで戻れるんだけど行を超えて戻れない
47デフォルトの名無しさん:2006/03/15(水) 20:44:01
>>46
標準Cではそんなことできないから、適当なスレへ行きなさい。
わからなければここへOSなどを書き添えて。
http://pc8.2ch.net/test/read.cgi/tech/1140963340/l50
48デフォルトの名無しさん:2006/03/15(水) 21:51:00
キーボードを操作する関数ってあるんすか?
例えば、プログラムを実行すると勝手に
「windowsキー」→「U」→「U」
って押したことになるようなの
49デフォルトの名無しさん:2006/03/15(水) 21:52:24
ありません
50デフォルトの名無しさん:2006/03/15(水) 21:57:53
51デフォルトの名無しさん:2006/03/15(水) 22:03:18
じゃあ、DOS窓でコマンド実行することはできる?
例えば、プログラムを実行すると、
C:\>ipconfig
みたいになるヤシ
52デフォルトの名無しさん:2006/03/15(水) 22:05:14
知ってるがお前の態度が気に入らない
53デフォルトの名無しさん:2006/03/15(水) 22:06:05
そんなんsystemでも使ってればいいじゃん・・・・
54デフォルトの名無しさん:2006/03/15(水) 22:08:17
>>52さん
こんな性格ですみません。
態度を改めますので、ぜひ教えていただけないでしょうか?
55デフォルトの名無しさん:2006/03/15(水) 22:09:37
今度は無視かよ
56デフォルトの名無しさん:2006/03/15(水) 22:13:34
>>55さん
いえ、無視してたわけではありませんよ。
system関数使っていろいろやってみたんですけど、
system("hogehoge");
引数をどうしたらいいかわかりませんw

57デフォルトの名無しさん:2006/03/15(水) 22:15:22
先生!重度の怪我人が居ますがスルーでいいのですね。
58デフォルトの名無しさん:2006/03/15(水) 22:18:07
>>56
お前は何を言ってるんだ?
ipconfig実行したなら

#include<stdio.h>
#include<stdlib>
int main(void){
system("ipconfig");
return 0;
}}
59デフォルトの名無しさん:2006/03/15(水) 22:18:44
したなら⇒したいなら

最後の括弧イラネ
60デフォルトの名無しさん:2006/03/15(水) 22:19:39
ipconfigの場合はそのまんまでできたんですけど、
カレントディレクトリを変更するのって無理なんでしょうか?
61デフォルトの名無しさん:2006/03/15(水) 22:22:17
62デフォルトの名無しさん:2006/03/15(水) 22:23:39
あの、return 0 と return -1とかの違いって何ですか?
main()の最後でどっちにしても変わらないんですが
6360:2006/03/15(水) 22:25:23
親切に教えていただきましてありがとうございました。
64デフォルトの名無しさん:2006/03/15(水) 22:26:23
>>62
mainに0返すか-1返すか
65デフォルトの名無しさん:2006/03/15(水) 22:28:07
>>64
0か-1を返すのでは何か違いでもあるのでしょうか?
66デフォルトの名無しさん:2006/03/15(水) 22:29:26
0と-1だから違うんじゃね?
てか気にしなくてOKだと思うが
67デフォルトの名無しさん:2006/03/15(水) 22:32:40
なんかエラー処理のときによく-1が返されるのを見るのですが、
あれは、単に明示的なものなんでしょうか?
わかりました。気にしないようにします。
ありがとうございました。
68デフォルトの名無しさん:2006/03/15(水) 22:33:20
普通は0はEXIT_SUCCESSと同じで関数が無事終了したっていう意味
-1は知らん
69デフォルトの名無しさん:2006/03/15(水) 23:23:07
>>67
おまいさんが UNIX/Linux 使ってるなら、
こういう風にエラーで分岐できる。

#!/bin/sh

if a.out; then  # a.out は実行ファイル
 echo success  # return 0; の時
else
 echo fail  # それ以外のとき
fi

Windows のバッチファイルでも何か方法あったはず。
70デフォルトの名無しさん:2006/03/16(木) 01:10:49
cmd.exe だと errorlevel で判別できるんじゃないかな。
でも -1 はどうかな? 普通OKだったら0返してダメだったら1とか、
あるいは sysexits.h にある EX_なんとか を返すよな。
stdlib.h の場合は EXIT_SUCCESS とか。
71デフォルトの名無しさん:2006/03/16(木) 02:35:45
ディレクトリのファイルの名前調べる方法あります?
72デフォルトの名無しさん:2006/03/16(木) 02:37:11
ありません
73デフォルトの名無しさん:2006/03/16(木) 02:59:13
マジで?
74デフォルトの名無しさん:2006/03/16(木) 02:59:44
んじゃあファイル名一覧とかあれはAPI限定?
75デフォルトの名無しさん:2006/03/16(木) 03:26:21
環境依存です
76デフォルトの名無しさん:2006/03/16(木) 03:33:45
なんで?
77デフォルトの名無しさん:2006/03/16(木) 03:36:21
なんで?
78デフォルトの名無しさん:2006/03/16(木) 03:58:04
Cの標準ライブラリにそんな関数なかろう
79デフォルトの名無しさん:2006/03/16(木) 04:10:46
他の言語ならできるの?
80デフォルトの名無しさん:2006/03/16(木) 04:18:39
C言語って何にも出来ないね
81デフォルトの名無しさん:2006/03/16(木) 04:27:40
何もできないから、やめた方がいいよ
82デフォルトの名無しさん:2006/03/16(木) 04:31:31
そういうときこそVBですよ
83デフォルトの名無しさん:2006/03/16(木) 08:36:17
VBに不可能は無いよな
84デフォルトの名無しさん:2006/03/16(木) 12:43:36
>>76-77
ファイルの概念自体がない環境もあり得るから。
85デフォルトの名無しさん:2006/03/16(木) 12:49:58
>>84
それを言うなら「ディレクトリの概念がない」だろう。
86デフォルトの名無しさん:2006/03/16(木) 12:58:13
>>85
なにを言ってるんだお前は
87デフォルトの名無しさん:2006/03/16(木) 13:01:07
昔のDOSはディレクトリ無かったみたいだけどな

組み込み系とかはファイル無いシステムもあるんじゃないかね
88デフォルトの名無しさん:2006/03/16(木) 13:27:06
例えばBTRONはファイルの概念があるけどディレクトリの概念がない。
fopen()は名前をストリームとして開く関数だから、これをファイルの概念と言ってもいいと思うが。
89デフォルトの名無しさん:2006/03/16(木) 13:45:29
FILE構造体が存在する時点でファイルの概念が存在している。
ディレクトリ操作関係はPOSIXで定義されているがC標準では無い。
90デフォルトの名無しさん:2006/03/16(木) 14:00:42
ファイルシステムが存在するかどうかはC言語とは関係無いけどね。
91デフォルトの名無しさん:2006/03/16(木) 15:02:56
標準じゃないけどディレクトリ操作関数はだいたいあると思うが
92デフォルトの名無しさん:2006/03/16(木) 15:05:18
組み込みな用途じゃ使えないけどな
93デフォルトの名無しさん:2006/03/16(木) 15:18:25
ぬるぽって何?
94デフォルトの名無しさん:2006/03/16(木) 15:19:46
>>93
ガッ
95デフォルトの名無しさん:2006/03/16(木) 15:20:32
>>93
私を叩いてくださいというお願い
96デフォルトの名無しさん:2006/03/16(木) 15:29:49
結局のところ、動的に確保したメモリは解放しなければいけないのでしょうか?
しないでもいいと書いてあるサイトもありますが・・。

プログラム終了時に解放されることは保証されているのでしょうか?
97デフォルトの名無しさん:2006/03/16(木) 15:33:56
別に終了すれば解放されるよ
ただ自分で解放したほうがいいよ
98デフォルトの名無しさん:2006/03/16(木) 15:41:02
取り壊し予定の家の部屋掃除する奴は教条主義者の馬鹿
物事を柔軟に考えられない硬直した思考の持ち主
99デフォルトの名無しさん:2006/03/16(木) 15:41:59
>>96
普通のOSはメモリについてはプロセスが完全に終わった時に開放する
ので普通のOS上で動くプログラムの場合はなくても多分大丈夫。しかし
マイコン基板のROMなどに焼かれて動くプログラムでそれをやると多分
まともに動かない機械ができあがる。
100デフォルトの名無しさん:2006/03/16(木) 15:43:00
>>98
それは取り壊す人が別に居る場合に言えることだ。
101デフォルトの名無しさん:2006/03/16(木) 16:38:10
終了するプログラムだけを書いてるならあまり考えなくてもいいかもしれんが・・
102デフォルトの名無しさん:2006/03/16(木) 16:56:28
終了しないプログラムなど存在しない
マシンは物理的に存在し、何時かは寿命を迎えるのだから

・メモリを確保する理由が無くなったら解放する必要がある。
・(特に理由がなければ)プログラム終了時にメモリを解放する必要などない
103デフォルトの名無しさん:2006/03/16(木) 17:03:36
>>96
解放しなくてもいい場合もあるがそうでない場合もある。
この違いに自信がなければ解放しといたほうが無難。
104デフォルトの名無しさん:2006/03/16(木) 17:11:47
年に一度はあるやりとりだな
105デフォルトの名無しさん:2006/03/16(木) 17:14:56
>>96
ファイルもクローズしないでいいよ
106デフォルトの名無しさん:2006/03/16(木) 17:21:17
ちょっと待てよ。C言語としてはプログラム終了時に
メモリが開放されることは保証してないよな?
OS が保証していることはあると思うが。
107デフォルトの名無しさん:2006/03/16(木) 17:22:16
数行増えるだけなんだから解放すりゃいいじゃんって感じなんだが
まぁ忘れやすいんだけどね解放
108デフォルトの名無しさん:2006/03/16(木) 17:30:46
ガベコレがいない気持ちよさを味わうためにも自分で開放しなくちゃ
109デフォルトの名無しさん:2006/03/16(木) 17:33:01
必要ないと判断されたら勝手に解放しますは気持ち悪いしな
110デフォルトの名無しさん:2006/03/16(木) 17:48:20
ちょっと待てよ。C言語としてはfree時に
メモリが開放されることは保証してないよな?
111デフォルトの名無しさん:2006/03/16(木) 18:01:01
OSに返されるということは保証して無いが
それがなに
112デフォルトの名無しさん:2006/03/16(木) 18:09:06
変なポインタをfreeしたときの動作は保証されてないが、
alloc系でメモリ確保したポインタをfreeしたときは解放することが保証されてる
113デフォルトの名無しさん:2006/03/16(木) 18:16:27
>>110
( ゚Д゚)ハァ?
114デフォルトの名無しさん:2006/03/16(木) 18:20:03
保証はされてない
115デフォルトの名無しさん:2006/03/16(木) 18:32:45
じゃあ free() がこんな風に書かれていても誰も文句言えないんだ。

void free(void *p)
{
 malloc(1024 * 1024 * 1024);
}
116デフォルトの名無しさん:2006/03/16(木) 18:34:01
なめんな
117デフォルトの名無しさん:2006/03/16(木) 18:34:45
>>115
お前、頭おかしいだろ
118デフォルトの名無しさん:2006/03/16(木) 18:37:13
詭弁のガイドラインでも読め
119デフォルトの名無しさん:2006/03/16(木) 18:41:32
なにを議論してんのかまとめてくれ
120デフォルトの名無しさん:2006/03/16(木) 18:45:22
ただの "free on exit" じゃないのか?
121デフォルトの名無しさん:2006/03/16(木) 18:55:24
処理系定義に決まってるだろ
122デフォルトの名無しさん:2006/03/16(木) 19:06:38
main()
{
void *p = malloc(1);
free(p); /* #1 */
}

というパターンと、

main()
{
void *p = f();
unf(p);
}
void* f() { return malloc(1); }
void unf(void *p) { free(p); } /* #2 */

というパターンを同列に論じるからおかしくなるんだよ

「プログラム終了前」は #1 だけであり、
プログラム全体の中でただ1カ所の特殊な位置での議論から
#2 まで含めて「free 不要」に聞こえる主張をされても
ライブラリの意義からして賛同できるはずがない

main は実行環境とのインターフェイスなので本質的に処理系依存だ
free の実装だの返却値の解釈だのを処理系を特定せずに強弁するから
どんどんおかしな方向へ話がそれていく
# 規格の中にまでこの歪みが入り込んでしまっている
123デフォルトの名無しさん:2006/03/16(木) 19:16:53
手の込んだ釣りだ
124デフォルトの名無しさん:2006/03/16(木) 19:18:28
何言いたいのかワカンネ
125デフォルトの名無しさん:2006/03/16(木) 19:40:49
mallocで割付けされた領域をfreeで解放してなかったとき
その領域はどうなるか? って話だろ?
>>122がなにをいいたいのかよくわからん
126デフォルトの名無しさん:2006/03/16(木) 19:58:42
>>122
「プログラム終了前のfreeは不要」まで読んだ
127デフォルトの名無しさん:2006/03/16(木) 20:02:39
>>122
何その房コードは
128デフォルトの名無しさん:2006/03/16(木) 20:06:28
>>122
詳しく説明してくれないか
129デフォルトの名無しさん:2006/03/16(木) 20:26:53
aが0〜4なら0を代入、5〜9なら5、10〜(ry
という感じにできませんか?
130デフォルトの名無しさん:2006/03/16(木) 20:31:22
ESPをつかってみる
>>129
ret = (a/5)*5;
これでいいだろ?
131デフォルトの名無しさん:2006/03/16(木) 20:32:17
エラーがでました
132デフォルトの名無しさん:2006/03/16(木) 20:51:54
専門性が高くついていけんよ
133デフォルトの名無しさん:2006/03/16(木) 21:12:06
>>130
ありがとうございます。
何で気づかなかったんだろ・・・
134デフォルトの名無しさん:2006/03/16(木) 23:26:38
『猫でもわかるC言語プログラミング』という本についていたCD−ROMを使おうとして、まず一番初めにそのCDに入っていた説明を読もうと、開いてみたところ、
「このCD-ROMには、本書で扱ったサンプルコードを収録しています。
ファイルをハードディスクにコピーし、「unlock.bat」を実行して
全ファイルの読み取り専用属性をはずしてから、ご利用ください。」

と表示され、意味が全くわかりませんでした。
特に、「読み取り専用属性をはずす」って、どうやればよいのでしょう?
それから、「unlock.bat」がみつかりません。
「unlock」というのがあり、押してみたのですが、黒い背景に、ただただ「アクセスは拒否されました」といったメッセージが並び、
また、サンプルどおりにCでプログラムを書き、その「unlock」に重ねて(これを実行するというのでしょうか?)みたのですが、黒い背景に「隠しファイルは再設定できません」とだあーーっとでてきてしまいます。
(「隠しファイルは再設定できません インベーダーゲーム…」とか「ピクチャー…」などでてきたので、私のコンピュータ全てを何かしているようです…)

どうしたらプログラムを書いて実行できるようになるのでしょうか?
本には、このCD−ROMがコンパイラだと書いてあるのですが、それ以上は何も書いてありません。

すみませんがよろしくお願いします。
135デフォルトの名無しさん:2006/03/16(木) 23:27:39
>>134
自分で調べられないなら止めといた方が無難
136デフォルトの名無しさん:2006/03/16(木) 23:28:39
134ですが言い忘れました、
あの、私すごく初心者なので、「ここまでは言わなくてもいいだろ」ということろまで詳しくお願いします。。
137デフォルトの名無しさん:2006/03/16(木) 23:29:05
コンパイラは入ってたかあれ?
読み取り専用は書き換えができないファイルのこと

入ってたらそのままそれ使えばいいけど無いなら
BCCかVC++でもDLしてきてコンパイルせよ
138デフォルトの名無しさん:2006/03/16(木) 23:29:15
>>134
猫スレがあるだろ
隅から隅まですれ違いだ
139デフォルトの名無しさん:2006/03/16(木) 23:29:49
その本持ってないから分かんないけど
unlock.batとunlockは同じ物。
拡張子を表示する設定にしてないだけ。

アクセス拒否はCDのファイルの属性を変えようとしたから失敗しただけ。
ハードディスクにコピーしてからやれ。
140デフォルトの名無しさん:2006/03/16(木) 23:30:41
>>134
ここはC言語の話題の場
特定の本にかいてあるC言語以前の使い方ならよそでやってくれ
141デフォルトの名無しさん:2006/03/16(木) 23:32:53
136 名前:デフォルトの名無しさん[] 投稿日:2006/03/16(木) 23:28:39
134ですが言い忘れました、
あの、私すごく初心者なので、「ここまでは言わなくてもいいだろ」ということろまで詳しくお願いします。。

これは酷いw
なんで赤の他人がお前の勉強を全力でサポートしてくれるんだw
釣りにしてもヘタクソだ
142デフォルトの名無しさん:2006/03/16(木) 23:40:27
スレをよく調べもせずすみませんでした。。
次に質問するときは「猫スレ」にいってきます。すみません。。。

レス返しだけごめんなさい
>>137
コンパイラ付属、だそうで入っていました。ですが説明がほとんどなく。。
>>139
なるほど、ハードディスクにコピー・・ まずはそれからですね。やってみます。
ありがとうございました。
143134(142もです):2006/03/16(木) 23:44:12
>>141
釣りではありません、ほんとです。。困っています。。
質問スレだったので、言いました。
面倒だと感じた人は、スルーしてください。。
144デフォルトの名無しさん:2006/03/17(金) 00:02:31
>>142
コンパイラは何が入ってたんだよ
145デフォルトの名無しさん:2006/03/17(金) 00:05:37
>>144
お前、責任もって最後まで面倒見ろよ。
146デフォルトの名無しさん:2006/03/17(金) 00:05:50
>>145
エッ(゚Д゚≡゚Д゚)マジ?
147デフォルトの名無しさん:2006/03/17(金) 00:07:25
>>144
Borland C++ Compiler その他開発ユーティリティ
と、書いてあります。

あと、とりあえず改めて「猫スレ」に質問してきたので、よかったらそこにレスしてもらえると嬉しいです
148デフォルトの名無しさん:2006/03/17(金) 00:14:21
書いた
149デフォルトの名無しさん:2006/03/17(金) 03:09:55
関数ポインタって有効な使い方あるんですか?
150デフォルトの名無しさん:2006/03/17(金) 03:24:02
>>149
ある。
151デフォルトの名無しさん:2006/03/17(金) 03:36:56
具体的に教えてください
152デフォルトの名無しさん:2006/03/17(金) 03:43:32
qsortの第4引数とか。
153デフォルトの名無しさん:2006/03/17(金) 03:49:54
どうゆうことですか?
可変長引数みたいなもんですか?
154デフォルトの名無しさん:2006/03/17(金) 03:53:30
155デフォルトの名無しさん:2006/03/17(金) 09:53:09
qsortの第4引数は関数ポインタだけど意識する必要ねぇし
156デフォルトの名無しさん:2006/03/17(金) 10:08:24
スレッドキャンセルセーフについて教えてください
具体的にどういう作りにすればいいんでしょうか?
157デフォルトの名無しさん:2006/03/17(金) 10:59:01
>>155
だから、qsort みたいな関数を作りたい時に必要だろ?
158デフォルトの名無しさん:2006/03/17(金) 11:05:45
qsort() のようなコールバック関数のセット以外でも、
C言語でオブジェクト指向風なことをしたい場合に使う
こともできる。構造体の中にその構造体へのポインタを
第一引数に取ってその内容に従って動く関数へのポインタを
入れておく。すると何が出来るかというと、処理する
関数を変えられるのでオブジェクト指向の言語のオーバー
ライドができて多態性を実現できる。
159デフォルトの名無しさん:2006/03/17(金) 11:07:59
関数ポインタ構造体に入れるのと
配列にするのは使い方としてはお約束だよな
160デフォルトの名無しさん:2006/03/17(金) 11:08:07
vtable を自前で実装してる例はよく見かけるな
161デフォルトの名無しさん:2006/03/17(金) 11:09:10
>>158
正にCから見たCOMインターフェイスがそうなっている。
162デフォルトの名無しさん:2006/03/17(金) 11:10:05
>>156
あなたが作ろうとしている「スレッド」の内容による
開始処理と終了処理の対が破れたときに何が起きるかを明らかにし、
そのうちのマズいことへの対策を考える
163デフォルトの名無しさん:2006/03/17(金) 11:32:55
>>149
こんなのとか
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/atexit.3.html

あとは
log("hello, world")
という関数を実行した時、stderrに表示する関数を登録したり、ファイルに追加して行ったり
画面のダイアログに表示したりという処理をアプリ側が決められるようになる。
164デフォルトの名無しさん:2006/03/17(金) 12:15:47
>>156
環境依存なので各OSのプログラミングスレもしくは
スレッドプログラミング一般のスレでどうぞ
165デフォルトの名無しさん:2006/03/17(金) 13:23:22
質問です、細かいところは省いて書いてしまいましたが
これはリスト構造になっていますでしょうか?
typedef struct _date{
int number;
int score;
struct _date *next;
}date;
date *add(int number,int score,date *d)
{
date *p;
p=(date*)malloc(sizeof(date));
p->number=number;
p->score=score;
p->next=d;
d=p;
return d;
}
int main()
{
date *d;
d=NULL;
int number,score,i=4;
while(--i){
scanf("%d",&number);
scanf("%d",&score);
d=add(number,score,d);
}
return 0;
}
166デフォルトの名無しさん:2006/03/17(金) 14:21:34
構造体ってやっぱWinの仕様にならって大文字にするべきなの?
typedef struct UHOIOTOKO
より
typedef struct UhoIotoko
の方が個人的には好みなんだけど
167デフォルトの名無しさん:2006/03/17(金) 14:25:15
これはまたヒドス('A`)
168167:2006/03/17(金) 14:25:56
>>166の事じゃないからね。間違わないで。
169デフォルトの名無しさん:2006/03/17(金) 14:27:58
>>166
大文字は定数だろ?
Winは糞だから従う必要はない。
170デフォルトの名無しさん:2006/03/17(金) 14:29:50
大文字は型名だろ
171デフォルトの名無しさん:2006/03/17(金) 14:32:24
規約次第。好きにしろ。いじょ
172デフォルトの名無しさん:2006/03/17(金) 14:32:43
ハンガリアン記法の一種
173166:2006/03/17(金) 15:03:31
良くわかんないけど、じゃあとりあえず好き勝手することにする
ありがと
174デフォルトの名無しさん:2006/03/17(金) 18:26:59
mallocの仕組みを教えて
175デフォルトの名無しさん:2006/03/17(金) 18:31:57
動作が見たいんなら規格嫁
実装が知りたいんなら、gccのソース嫁
176デフォルトの名無しさん:2006/03/17(金) 18:34:20
gcc?、libcの間違いじゃねーの?
177デフォルトの名無しさん:2006/03/17(金) 18:39:37
つまりあなた方の知識ではわからないと
178デフォルトの名無しさん:2006/03/17(金) 18:42:13
そうです
ごめんなさい
179デフォルトの名無しさん:2006/03/17(金) 18:43:16
>>174
ふつーの UNIX や Linux なら sbrk() とか使ってプロセスのメモリ領域
広げてそこ使ってるんじゃないのかな。
180デフォルトの名無しさん:2006/03/17(金) 18:44:18
>>174
ISO/IEC9899 は malloc の実装を定義していないので
この話題はスレ違いになりやすいので注意されたい

まずは gcc か VC のソースを読んでみてはいかがかな?

gcc のソース
ftp://ftp.gnu.org/gnu/gcc/

VC のソース(CDドライブのドライブ文字を X: と仮定)
X:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src
X:\VC98\CRT\SRC
181デフォルトの名無しさん:2006/03/17(金) 18:59:23
gccやVCのソース読めばわかるの?
182デフォルトの名無しさん:2006/03/17(金) 19:00:55
でっかい配列作っておいて、alloc呼ばれたらすこしずつ切り出して貸す、
みたいなのを練習で作ってみるとか。貸し出しテーブル作ってもいいし
貸し出すときにヘッダつけてもいいし。
183デフォルトの名無しさん:2006/03/17(金) 19:22:44
K&Rに載ってるけどな > mallocの実装
184デフォルトの名無しさん:2006/03/17(金) 20:01:11
static char memory[65535];
static char *head;

void *malloc(size_t size)
{
 void *p = (void*)head;
 head += size;
 return p;
}

void free(*p){}
185デフォルトの名無しさん:2006/03/17(金) 20:03:26
おーい境界要求どうすんの?
186デフォルトの名無しさん:2006/03/17(金) 20:04:18
つーか、それ以前のアフォだなこいつわ
187デフォルトの名無しさん:2006/03/17(金) 22:06:27
データA1
 データC1(データB1、データB2…)|データC2(データB1…)|データC…
データA2
 データC1(…)…
データA…

というテキストを読み込んでA、Cに属するBを格納するプログラムですが
三次元配列になってしまいました。
仕方ないことでしょうか?
教えてください。お願いします。
188デフォルトの名無しさん:2006/03/17(金) 22:31:11
三次元配列になることの何が「仕方ない」のか? 避けたかったことは何か?
189187:2006/03/17(金) 22:54:52
すみません。
多次元配列となると処理が遅くなるようなイメージがあったので
もっと効率的に処理できる方法が、他に何かなかったか
分からなかったのでこちらで尋ねました。
190デフォルトの名無しさん:2006/03/17(金) 22:56:34
すいません。以下のサンプルで構造体の領域を確保して、
その領域を初期化する方法は正しいでしょうか。
誤りがあればご指摘いただけると助かります。

#include <stdio.h>
int main() {
struct A {
int a;
long b;
int c;
long d;
char *e;
};
int z;
struct A *AA;
AA = (struct A *) malloc(sizeof(struct A));
memset(AA,'\0',sizeof(struct A));
return 0;
}
191デフォルトの名無しさん:2006/03/17(金) 22:57:41
あってるけどcalloc使っとけ
192デフォルトの名無しさん:2006/03/17(金) 23:05:09
>>189
処理が遅くなるかどうかは、まず実測してから
その観測事実に対して考察を行うべし

10万回から1億回くらいの実行時間なら
ストップウォッチや時計の秒針でも確認できるだろう

base[index].displacement みたいなアドレッシングの速度は、
昔言われていた計算時間の考え方と今とではかなり違ってきている
193デフォルトの名無しさん:2006/03/17(金) 23:06:16
いいけどわざわざ '\0' じゃなくて 0 でよくね
194デフォルトの名無しさん:2006/03/17(金) 23:15:10
> 191、193 ありがとうございます。参考にします。

195デフォルトの名無しさん:2006/03/17(金) 23:37:03
>>180-181
ここだけの話、mallocに関してはVC++のソースを読んでも役に立たないと思う。
196デフォルトの名無しさん:2006/03/17(金) 23:39:35
HeapAlloc を使っているということがわかれば十分だと思うが
197デフォルトの名無しさん:2006/03/18(土) 00:06:21
>>196
ハァ?
198魚チョコ:2006/03/18(土) 03:04:50
>>190
 それで動くけど struct A が char *e を含んでることが問題なのかな?
 memset(AA, 0, sizeof(struct A)); で AA が納まる領域はすべて 0 (全ビット
0 )で埋まるけど、C の仕様上、

・ポインター型の 0 は、全ビット 0 とは限らない。論理が反転していて(負論理)、
111...111b かもしれない。十進コードかもしれない。

・ NULL は「ポインター型の 0 」とも限らない。負論理の 0 なら、111...111b のは
ずだが、NULL は 011...111b かもしれない。

 これらはデータとポインター(アドレス)とを厳密に区別していた(CPU 内部の
演算器も別になっていた)時代の名残で、現代の CPU のアーキテクチャーから
見ると迷惑な配慮でしかない。
  処理系ごとの NULL 値の違いには、コンパイラーが全部自動的に対応してく
れるので、ソースコード中、ポインター値が必要なところに 0 と書けばそれはその
処理系における NULL 値に翻訳される。ヘダーファイルの中に、NULL はどうせ
((void*)0) と定義されている。これを ((void*)777) 等に直すとたぶん動かなくな
る。
 NULL を int にキャストすれば 0 が得られる。もし上記がほんとなら、ポインター
変数を int にキャストするようなコードでは、実行時に NULL に出会うと変な値が
得られそうなものだが、そういう処理系ではその変な NULL 値を検出して 0 に直
すコードが追加されるんでしょね(遅くなる)。私はそんな処理系を見たことないの
でどんなコードが吐かれるか知らないが。
 コンパイラーがすべて自動的にやってくれるはずだが、ポインターのポインター
を強引に別の型のポインターにキャストして参照するようなコードでは、内部表現
の違いが露見してしまう。
 こういう問題があるので、口うるさい香具師は、メンバーにポインター変数を含
む構造体の初期化には memset()、calloc() を使ってはいけないと言いやがる。各
メンバーを個別に初期化せよ、と。その際は次のように問うてみよう。「NULL の内
部表現が全ビット 0 でないような機種・ OS ・コンパイラーが何て名で何処にある
のか?」 私は memset() も calloc() も使いますけど。どうせ食品ですから。
199デフォルトの名無しさん:2006/03/18(土) 04:36:36
食品?
200デフォルトの名無しさん:2006/03/18(土) 04:44:26
arry[10] = {0,1,2,3,4,5,6,7,8,9};
みたいな配列の中身をランダムに格好良く書き換える方法教えてください
201デフォルトの名無しさん:2006/03/18(土) 04:50:12
書き換えるというか
配列の中身をランダムに入れかえるですね
arry[10] ⇒{1,0,6,2,7,3,8,5,4,9} みたいに
202デフォルトの名無しさん:2006/03/18(土) 04:52:21
>>198
おれ、NULLの内部表現のこととかまだ曖昧なんだけど
内部表現が0じゃない場合
int *p;
memset(&p, 0, sizeof(int*)/sizeof(char));
としたら
if( p != NULL )
は真になってまうんですか?
203デフォルトの名無しさん:2006/03/18(土) 04:52:48
for (int i=0; i<10; ++i) {
 int j, tmp;
 j = rand() % 10;
 tmp = arry[i];
 arry[i] = arry[j];
 arry[j] = tmp;
}
204デフォルトの名無しさん:2006/03/18(土) 04:54:39
ありがとう v( ̄ー ̄)v
205デフォルトの名無しさん:2006/03/18(土) 04:56:00
>>202
やってみれば?
真にならないと思うよ
206デフォルトの名無しさん:2006/03/18(土) 04:59:01
正確には「NULLの内部表現」じゃなくて「ヌルポインタの内部表現」な
207デフォルトの名無しさん:2006/03/18(土) 05:02:41
>>201
std::randam_shuffleの実装をコピー
208デフォルトの名無しさん:2006/03/18(土) 07:32:40
>>206
「空ポインタの表現」な
209デフォルトの名無しさん:2006/03/18(土) 07:40:41
>>202
真になるんじゃね?
210デフォルトの名無しさん:2006/03/18(土) 08:00:41
>>202
なる。
211デフォルトの名無しさん:2006/03/18(土) 08:01:17
>>203
rand() % 10 か・・・。
212デフォルトの名無しさん:2006/03/18(土) 08:46:15
213デフォルトの名無しさん:2006/03/18(土) 10:37:07
>>198
> 「NULL の内部表現が全ビット 0 でないような機種
Lisp マシンはおおむね NULL の内部表現は全ビット 0 ではないな.
C の処理系が実装されているものがあるかどうかは知らないが...
214デフォルトの名無しさん:2006/03/18(土) 10:45:43
>>203
分布に偏りがあるあたりが格好悪い
215デフォルトの名無しさん:2006/03/18(土) 10:46:18
最近の実装なら偏らないだろ
216デフォルトの名無しさん:2006/03/18(土) 11:09:47
>>215
お前、おもろ過ぎ
217デフォルトの名無しさん:2006/03/18(土) 11:12:28
>>216
発言の意図がわからないので解説か正しいコードよろ
218デフォルトの名無しさん:2006/03/18(土) 11:30:43
>>217
要素数nのとき可能な並び順はn!
>>203のコードによって生成される並び順はn^n
n^n/n!は整数になるかな? ならないかな?
You see?
219デフォルトの名無しさん:2006/03/18(土) 11:32:22
Cスレだった。n^nはnのn乗な。
220デフォルトの名無しさん:2006/03/18(土) 12:27:42
>>218
お前は何を言っているんだ
221デフォルトの名無しさん:2006/03/18(土) 12:31:45
>>220
こんな単純なことも分かんねぇんだ
プログラミングやめたほうがいいよ
222デフォルトの名無しさん:2006/03/18(土) 13:49:05
j = rand() % (10 - i) + i;
が正解。
223デフォルトの名無しさん:2006/03/18(土) 14:34:40
>>222
おーなるほどー
224デフォルトの名無しさん:2006/03/18(土) 15:49:38
下記の問題をといてくれませんか?
キーボード整数a,b,cを読み、最大値を表示するプログラムを作る」

/* 題名・・ */
#include<stdio.h>
void main (void)
{
----------------

----------------
}

---から---までの間を回答してもらえると助かります。
多分if文を使うと思います。
宜しくお願いします。

225デフォルトの名無しさん:2006/03/18(土) 15:59:50
何で>>1読まないの?
226デフォルトの名無しさん:2006/03/18(土) 16:03:22
int a, b, c;
printf("1個目の数字を入力\n");scanf("%d", &a);
printf("2個目の数字を入力\n");scanf("%d", &b);
printf("それらを超える数字を入力\n");scanf("%d", &c);
printf("最大値は%dです\n", c);
227デフォルトの名無しさん:2006/03/18(土) 16:14:41
できた!
#include <stdio.h>
int main(void){
unsigned int i;
char temp[] = {0x82, 0xD8, 0x82, 0xF1, 0x8E, 0x81, 0x82, 0xF1, 0x82,
0xBE, 0x82, 0xE7, 0x82, 0xA2, 0x82, 0xA2, 0x82, 0xE6, 0x00};
for(i=0; i<=0xFFFFFFFF ; i++ ){
printf("%d%s\n",i,temp);
if( i == 0xFFFFFFFF ) i=0;
}
return 0;
}
228デフォルトの名無しさん:2006/03/18(土) 16:19:16
つまりvoid func(int hoge[3][2]);
はvoid func(int (*hoge)[2]);
のシンタックスシュガーである。
229デフォルトの名無しさん:2006/03/18(土) 16:21:10
>>227
ぺん氏んだらいいよ
230デフォルトの名無しさん:2006/03/18(土) 16:22:23
>>227
ワロw
231デフォルトの名無しさん:2006/03/18(土) 16:26:05
>>227
このように無限ループするプログラムで
Pauseキーを押すと、ループを止めることが出来ます。
232http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 18:21:59
名ソフト TextSS の64bit化キボンヌってできない?
233デフォルトの名無しさん:2006/03/18(土) 19:10:39
>>232
自 分 で や れ
234デフォルトの名無しさん:2006/03/18(土) 19:11:13
>>232
通常マルチポスト自体を責めはしないが
おまえは本当に鬱陶しい

特注ソフトウェアが必要なら対価を払え乞食め
235デフォルトの名無しさん:2006/03/18(土) 19:12:21
嵐に話しかけるなおw
236デフォルトの名無しさん:2006/03/18(土) 21:49:11
質問させて下さい
bool型の変数に格納できる値の上限は32bitまでなのでしょうか?
よく分かりません、助けてください
237デフォルトの名無しさん:2006/03/18(土) 21:54:49
あ、すいません勘違いしてました
すいませんした屑共
238デフォルトの名無しさん:2006/03/18(土) 22:01:41
#include <stdio.h>

main(){
int player,i,r;

for (i=0;i<5;i++){
r = scanf("%d",&player);
while(getchar()!='\n'){}
printf("%d回目",i+1);
if(r){printf("%d\n",player);} //入力が正常の場合
else {printf("入力エラー\n");} //入力が不正な場合
}
return 0;
}

これのr = scanf("%d",&player);とは何を意味してますか?rが何かよく分かりません
239デフォルトの名無しさん:2006/03/18(土) 22:03:25
>>238
リファレンス嫁
240デフォルトの名無しさん:2006/03/18(土) 22:03:52
>>238
その場は難を逃れても先が思いやられるな
そのサンプル作ったセンセイ・・・
241デフォルトの名無しさん:2006/03/18(土) 22:05:36
>>238
0以外なら正常 0だとおかしい、つーかんじ
詳しくはscanf 戻り値 でググレカス
242デフォルトの名無しさん:2006/03/18(土) 22:06:45
質問
hoge{for (i=0;i<3;i++){printf("%d",aray[i]);}printf("\n");}
を実行すると毎回、上書きになるのですが、続きから書き出すにはどうすればいいですか
MSDOSで 実行.exe > ホゲ.txt のように書き出してます
243デフォルトの名無しさん:2006/03/18(土) 22:07:58
>>
244デフォルトの名無しさん:2006/03/18(土) 22:09:52
実行.exe >> ハゲ.txt
245242:2006/03/18(土) 22:17:01
hogeを呼び出すたびに、追加出力する場合、どうなりますか
246デフォルトの名無しさん:2006/03/18(土) 22:19:11
まずは試せhage
247デフォルトの名無しさん:2006/03/18(土) 22:20:07
C++ スレでやれ、ここでは hige だ
248242:2006/03/18(土) 22:35:40
>>で解決したのですが、コード上で実現するにはどうしたらいいものかと。
前の書き出し位置を覚えておかないとだめですよね。どうするんだろ
249デフォルトの名無しさん:2006/03/18(土) 22:43:39
>>238ですが、rの値は0か1になるんですか?
文字が入力されたとき(scanfが停止したとき?)は0,数字が入力されたときは1になるんでしょうか?
250デフォルトの名無しさん:2006/03/18(土) 22:52:59
>>249
この例ではね
251デフォルトの名無しさん:2006/03/18(土) 22:53:16
>>249
あ、0 か 1 の他に -1 もある
252デフォルトの名無しさん:2006/03/18(土) 22:53:27
fopenで"w"ではなくて、"a"で開けば終わりだろ?
253デフォルトの名無しさん:2006/03/18(土) 22:54:18
いいかげん目覚めなさい
こんなとこで聞いても答えは返ってきません。
自分で調べることを覚えなさい!!
254デフォルトの名無しさん:2006/03/18(土) 22:56:29
>>252
a = アナル
アナルを開けぇ(゚∀゚ )
255デフォルトの名無しさん:2006/03/18(土) 22:57:07
>>249
scanfなんて使うのやめましょう
256デフォルトの名無しさん:2006/03/18(土) 23:02:50
>>249
おまえ本当に師に恵まれないな・・・ (255 とか

規格票くらい買えって命令してくれる人を探す方が修行に先立って必要っぽいぞ
257デフォルトの名無しさん:2006/03/18(土) 23:03:22
rand() % (10 - i) + i
258デフォルトの名無しさん:2006/03/18(土) 23:05:37
うあ、みすった・・・

rand() % (10 - i) + i
にしなくても、純粋にバラバラにしたいんだったら
rand() * 10
でもいいんじゃないの?
259デフォルトの名無しさん:2006/03/18(土) 23:07:35
>>258
それを言うなら arry[i] = rand(); だろ
260255:2006/03/18(土) 23:09:09
>>249
仕方ない教えようscanfの戻り値は代入に成功した個数
失敗の場合は0等を返す
261デフォルトの名無しさん:2006/03/18(土) 23:10:23
再掲

>>249
おまえ本当に師に恵まれないな・・・ (255 とか

規格票くらい買えって命令してくれる人を探す方が修行に先立って必要っぽいぞ
262デフォルトの名無しさん:2006/03/18(土) 23:11:33
>>258
いや、バラバラに「並べ替えたい」んだってさ
263デフォルトの名無しさん:2006/03/18(土) 23:20:22
規格票テラタカス
264デフォルトの名無しさん:2006/03/18(土) 23:22:46
1000 倍くらいにハネるギャンブル
265デフォルトの名無しさん:2006/03/18(土) 23:25:27
>>240
どういうことですか?
 1a 
とか
(スペース)1
とかって入力しても
入力エラーにならないからダメなんですか?
266デフォルトの名無しさん:2006/03/18(土) 23:28:04
>>265

if(r)

これ
問題点は複数あり、どこから突っ込むか迷うほど
少なくとも、そのうちの1つに、あなたは気づいているわけだが
267デフォルトの名無しさん:2006/03/18(土) 23:28:15
少なくともwhile (getchar() != '\n') {}はscanf("%*[^\n]%*c");で置き換えられる。
268デフォルトの名無しさん:2006/03/18(土) 23:37:40
>>267
%*c って必要?
269デフォルトの名無しさん:2006/03/18(土) 23:39:45
>>258
だからよぉ>>218でいった通りそれじゃあ均等にはなんないんだってばさ。
(rand()が均等であることは前提な。)
要素数3でくらいで全パターン書き出してみろや。
要素数nとして常にrand()%nで交換すると、n回交換するとnのn乗のパターンが等確率で出るのは分かるか?
しかし全パターン数はn!しかない。
そもそもnのn乗/n!は整数にならん。
ということは、いずれかのパターンがほかのパターンよりも多く出現するってこった。
整数になるからって均等とは限らんが、少なくとも均等であるためには整数であることが必要条件。
270デフォルトの名無しさん:2006/03/18(土) 23:52:24
問題は>>224

if文で、
if(a>b)
printf("最大値=%d\n",a);
if else(a>c)
printf("最大値=%d\n",a);
if else(b>a)
printf("最大値=%d\n",b);
if else(b>c)
printf("最大値=%d\n",b);
if else(c>a)
printf("最大値=%d\n",c);
else printf("最大値=%d\n",c);

と入力しました.
a=6 b=5 c=4と入力したはずなのに「最大値=5」表示されてしまいます。
ifを使って解けるといっていますが、これを使って解けないでしょうか。
ifガ使えない場合は、なるべく簡単な方法にてご教授下さい。
271デフォルトの名無しさん:2006/03/19(日) 00:01:40
>>270
if else →else if
272デフォルトの名無しさん:2006/03/19(日) 00:03:44
>>270
マルチの上に嘘つきとは、救いようがないな。
273デフォルトの名無しさん:2006/03/19(日) 00:03:56
これコンパイル通るのか?
274デフォルトの名無しさん:2006/03/19(日) 01:03:25
疑問文とは痛い奴
275238:2006/03/19(日) 01:16:35
rの値は何となく分かりました
また分からないところが出てきたんですが、
while(getchar()!='\n'){}
の意味は、文字が入力されたときscanfが止まるからバッファを空にするため?ですか?
276デフォルトの名無しさん:2006/03/19(日) 01:39:46
>>275
そのように見えますね。(stdinを空にしているのかな。
でもfflushを使わない事や、getcharのチェックでEOFを使わないのはなぜだか良くわからない。
277デフォルトの名無しさん:2006/03/19(日) 01:42:41
fflush()は入力バッファのフラッシュは未定義できる場合とできない場合がある
278デフォルトの名無しさん:2006/03/19(日) 01:43:43
なるほど。
279デフォルトの名無しさん:2006/03/19(日) 06:25:06
unsigned long以上のbitを確保することはできますか?
280デフォルトの名無しさん:2006/03/19(日) 06:35:17
long long int型などを使えばできます
281279:2006/03/19(日) 08:54:12
は?ワレが
馬鹿にしよってからに
282デフォルトの名無しさん:2006/03/19(日) 09:29:02
>>281
280 はどう見てもマジレス
283279:2006/03/19(日) 09:32:42
悪かった…
284デフォルトの名無しさん:2006/03/19(日) 09:37:24
long long は C99 で新設された型なんで未対応のコンパイラはざらにあって
例えば __int64 などとなっていたりする
285デフォルトの名無しさん:2006/03/19(日) 09:52:12
でも、たとえばVC++なんかも最近のバージョンではlong longがあるね。
286デフォルトの名無しさん:2006/03/19(日) 09:57:56
struct { unsigned int low. high; };
287デフォルトの名無しさん:2006/03/19(日) 10:08:51
確実じゃないけど

struct word {
int b0:1;
...
int b511:1;
};
288287:2006/03/19(日) 10:09:57
>>286
それで十分だよねorz
289279:2006/03/19(日) 10:28:54
どうもありがとう
290デフォルトの名無しさん:2006/03/19(日) 11:02:25
long longといえば、My penis
291デフォルトの名無しさん:2006/03/19(日) 11:27:56
こういうの↑が出てくるようになったんで春も近いな…
292デフォルトの名無しさん:2006/03/19(日) 11:30:58
>>288
え? '.' なんてC言語にあったっけ?
293デフォルトの名無しさん:2006/03/19(日) 18:35:52
どうでもいいけど標準I/O関数から偽が返ってくる状況で生きてるシステムなんてあるのか?
294デフォルトの名無しさん:2006/03/19(日) 18:41:33
>>293
何が言いたいのか判らないので詳しく。
#例えばストリーム系なんていとも容易くエラーを返すわけだが。
295デフォルトの名無しさん:2006/03/19(日) 19:02:10
>>293
いくらでもある
296デフォルトの名無しさん:2006/03/19(日) 21:07:55
標準I/O関数?
偽?
297デフォルトの名無しさん:2006/03/19(日) 21:18:03
今の若い人はアセンブラ→Cみたいな覚え方はやっぱり
していないんですかごほごほ。
298デフォルトの名無しさん:2006/03/19(日) 22:20:22
DEBUGコマンドからCに入るなんて普通しないぞ・・・
299デフォルトの名無しさん:2006/03/19(日) 22:50:01
stdioとかstdlibとかstrは何の略(?)とか分かるサイトありませんか?
intはinteger=整数、charはcharacter=文字という感じで
300デフォルトの名無しさん:2006/03/19(日) 23:18:04
>>299
サイトは知らないけど
std=standard
io=input/output
lib=library
str=string
301デフォルトの名無しさん:2006/03/19(日) 23:21:19
302デフォルトの名無しさん:2006/03/19(日) 23:25:43
>>297
俺くらいオサーンになると
機械語→アセンブリ→PL/M→C
303デフォルトの名無しさん:2006/03/19(日) 23:30:37
昔話はやめてくれ
304デフォルトの名無しさん:2006/03/19(日) 23:42:43
>>297
HP逆ポーランド→4K BASIC→機械語→自作ASM→大型機ASM→大型機C→組み込みC
いまハード屋
305デフォルトの名無しさん:2006/03/20(月) 00:27:11
>>297
BASIC→機械語→FORTH→C→Ruby→C++
元は趣味で今プログラマ
306デフォルトの名無しさん:2006/03/20(月) 00:27:53
char str[]="abc";で、printf("%c",str[1]);ならbが出ますが、
char str[]="あいう";で「い」を出力するためにはどうすればいいですか?
307デフォルトの名無しさん:2006/03/20(月) 00:31:53
>>302
> 機械語→アセンブリ→PL/M→C
PL/M 使った奴は負け組み
308デフォルトの名無しさん:2006/03/20(月) 00:34:06
>>306
一般的な方法は無い
309デフォルトの名無しさん:2006/03/20(月) 00:37:47
VC++2005で、とりあえずウィンドウ表示させたいんですが
どう記述すればいいですか
310デフォルトの名無しさん:2006/03/20(月) 00:40:36
>>309
スレ違い
311310:2006/03/20(月) 00:41:38
>>309
ググれば簡単に出てくるので
少しは検索してみましょう
312デフォルトの名無しさん:2006/03/20(月) 00:48:13
>>308
d
313デフォルトの名無しさん:2006/03/20(月) 01:01:27
314デフォルトの名無しさん:2006/03/20(月) 01:10:45
>>306
まぁ
printf("%c%c",str[2],str[3]);
とでもしておけ
315デフォルトの名無しさん:2006/03/20(月) 01:12:15
>>314
するな
316デフォルトの名無しさん:2006/03/20(月) 01:22:37
>>306
まぁ
char *str[] = { "あ", "い", "う" };
printf("%s", str[1]);
とでもしておけ
317デフォルトの名無しさん:2006/03/20(月) 01:23:31
>>315
え?これマズい?
318デフォルトの名無しさん:2006/03/20(月) 01:27:10
>>317
おいおい、ネタじゃなかったのかよ
319デフォルトの名無しさん:2006/03/20(月) 01:29:01
俺から見てもネタだと思ったぜ
騙されたようだ
320デフォルトの名無しさん:2006/03/20(月) 01:31:05
>>318
いやぁやってみたら問題なかったからOKなのかと思ったぜ( 'A`)
321デフォルトの名無しさん:2006/03/20(月) 01:33:05
お前の環境でたまたま問題無かったからといって、あんな書き方をするもんじゃない。
322デフォルトの名無しさん:2006/03/20(月) 01:36:27
じゃあどうすればいいんだ
strをコピーして先頭アドレスを任意のところまで移動して出力したい文字の後ろに\0入れて
%sで出力とか?
てか・・・・・・素直にwchar_t使った方がいい希ガス
323デフォルトの名無しさん:2006/03/20(月) 01:47:36
もともと日本語文字なんて環境依存なんだから、その環境でうまく動けばそれでいいじゃないか。
324デフォルトの名無しさん:2006/03/20(月) 01:52:34
ソースに全角つかうヴォケは死刑
325デフォルトの名無しさん:2006/03/20(月) 01:56:12
ってかホントに表示されるんだな…
知らんかった
326デフォルトの名無しさん:2006/03/20(月) 01:57:01
日本語を表示させたい場合はすべて外部のファイルから取り込めと?
327デフォルトの名無しさん:2006/03/20(月) 01:57:15
相手の環境もわからないのにその環境も糞もないよな
328デフォルトの名無しさん:2006/03/20(月) 01:59:41
>>325
俺の脳みそでは常識になってた
俺ダメぽorz
329デフォルトの名無しさん:2006/03/20(月) 02:03:02
シフトJISなら「全角文字は2バイトだ」
という風に考えて問題ないかもしれんが
EUCとかだとそうもいかんからな
330デフォルトの名無しさん:2006/03/20(月) 02:22:28
メリケンの文字に依存する必要なんてない!
こちとら日本じゃ
いまこそ「ひまわり」「なでしこ」の出番ですよ!
331デフォルトの名無しさん:2006/03/20(月) 02:32:52
モバイルギア2(WINDOWS CE2系統)でc言語のコンパイルってできますか?
調べてみたらeMVC3++というのがmicrosoftのフリーであるらしいんですが、
そもそも可能なのかどうかわかりません・・・
332デフォルトの名無しさん:2006/03/20(月) 04:24:10
(******printf)("hello,world\n");
333デフォルトの名無しさん:2006/03/20(月) 04:32:20
何そのふざけた関数ポインタ
334デフォルトの名無しさん:2006/03/20(月) 05:17:19
それがC言語クオリティ
335デフォルトの名無しさん:2006/03/20(月) 08:10:42
>>331
少なくともここではスレ違い。
どこかほか行ってちょうだい。
336デフォルトの名無しさん:2006/03/20(月) 11:52:24
1文字ずつ連結して文字列リテラルにすることはできるのかな?('s'+'a' = "sa")
grepのように検索して、当たった行を表示するのを作ってるのだけど、
c = getc(fp)で一文字ずつ取り出した文字を配列にいれていったのだと
要素数が大きくなるからどうしようかなと....
337デフォルトの名無しさん:2006/03/20(月) 11:55:46
reallocで倍々に領域増やして池
リテラルを実行時に動的に作るとかありえない
338デフォルトの名無しさん:2006/03/20(月) 12:07:53
半角の「Q」または「q」を入力した場合、処理を終了するようにしたいのですが、これでいいのでしょうか?
scanf("%d", &num);

if(num == Q or q)
{
    exit();
}

339デフォルトの名無しさん:2006/03/20(月) 12:11:16
char c;
while(scanf("%c", &c) != 1 || (c !='q' && c != 'Q'))
 ;
340デフォルトの名無しさん:2006/03/20(月) 12:16:52
度忘れしたんですが、C言語って大文字小文字って別物で捉えてるんでしたっけ?
341デフォルトの名無しさん:2006/03/20(月) 12:24:20
お前は子供か
342デフォルトの名無しさん:2006/03/20(月) 12:33:54
そんくらい答えてやれ。

>>340
ああ、そうだよ、この糞ガキがっ!
343デフォルトの名無しさん:2006/03/20(月) 12:35:38
お前も子供か
344デフォルトの名無しさん:2006/03/20(月) 14:46:18
もしかしてここはネバーランドなんじゃね?
345デフォルトの名無しさん:2006/03/20(月) 15:43:58
だな
346デフォルトの名無しさん:2006/03/20(月) 15:48:49
>>332
エキスパートCプログラミングだったか何かでそんなのも可能だというのを見たが
なんかよくわからんかったんで、よかったら説明キボンヌ
347デフォルトの名無しさん:2006/03/20(月) 15:55:51
>>346
式の中で関数名など関数型のオブジェクトは関数へのポインタへ変換される。
ポインタだから*演算子で参照はがしができる。
関数へのポインタを参照はがしすると、関数型になる。
関数型は関数へのポインタへ変換される。
・・・
この繰り返し。
そして関数呼び出し演算子は関数へのポインタに対して作用するようになっている。
348デフォルトの名無しさん:2006/03/20(月) 22:34:03
>>347
あぁそういうことか
確かにそうなるわなw
349デフォルトの名無しさん:2006/03/20(月) 22:42:54
どうでもいいけど逆参照も参照剥がしも意味不明なことにかわりがないので
デリファレンスと呼びたいです。
350デフォルトの名無しさん:2006/03/20(月) 23:37:42
>>349
アセンブラ使いにはインダイレクトが通じやすいけどな
351デフォルトの名無しさん:2006/03/20(月) 23:39:51
今市
352デフォルトの名無しさん:2006/03/21(火) 01:05:38
どうやったらRPG作れますか?
353デフォルトの名無しさん:2006/03/21(火) 01:07:23
>>352
三菱重工とかでつくってたっけ?
354デフォルトの名無しさん:2006/03/21(火) 04:02:39
FILE *fp;

if((fp=fopen("test.txt","r"))==NULL){
以下略

で、ifの条件式が正しくないときでもfpとtest.txtは関連付けされているんですか?
355デフォルトの名無しさん:2006/03/21(火) 04:08:15
>>354
条件式が正しくないときって、たとえばどんなことを言っているんだ?
356デフォルトの名無しさん:2006/03/21(火) 04:10:45
>>354
fopenはファイルを開けなければNULLを返す
その場合もちろんfcloseなどでファイルを閉じようとする必要はない
357デフォルトの名無しさん:2006/03/21(火) 04:17:36
>>356
え? なに? 元の質問ってそういう意味なの? だとしたら日本語ヘタだなあ。
358デフォルトの名無しさん:2006/03/21(火) 04:46:15
C言語理解するんだからつたない日本語くらい理解してやろうぜぃ
359デフォルトの名無しさん:2006/03/21(火) 04:47:50
ただ単に質問者を屁理屈でいじめようとしてるだけじゃないのかw
360デフォルトの名無しさん:2006/03/21(火) 04:52:04
基本的にプログラマーは何故かできない人をこけおろす傾向がある希ガス
361デフォルトの名無しさん:2006/03/21(火) 04:53:56
2chだからだろ
362デフォルトの名無しさん:2006/03/21(火) 05:02:29
>>355
ファイルがオープン出来なかった場合などです
>>356
ちょっと違うような…
>>354の続きは
printf("ファイルオープンエラー");
exit(1);
}

while((c=fgetc(fp))!=EOF){
printf("%c",c);
}

fclose(fp);
return 0;
}
です。ただし char c;です。
ifの中の条件式が正しくないのにifの中のfpどtest.txtは関連付けられてるのは変な気がしたので…
363デフォルトの名無しさん:2006/03/21(火) 05:13:38
>>362
ああ、if文の真偽を間違えて考えてるのか
(fp=fopen("test.txt","r"))==NULL
これはfopenが失敗すると、fpにNULLが代入されて、真と判定される
そんでエラー文の出力してexitというわけ

if文が偽と判定されるのは、fopenが成功してるときだ
364とか言いつつ俺も初心者:2006/03/21(火) 05:32:38
余計なことかもしれんけど、初心者向きな説明

ifで評価されるのは「条件式」であって、その式の中にはいわゆる判定文以外の「演算」も含めることが出来る
例) i=3の場合

if(i==3) printf("%d", i);
3 が出力
if((i+1)==4) printf("%d", i);
3 が出力
if((++i)==4) printf("%d", i);
4 が出力
※ ++iの結果は4となり、条件が正しいので、printfによって i=4 が出力。

同様に、
fp=fopen("text.txt","r")
が成功すれば、textは正しく開かれる → NULLを返さないのでif文は偽 → exit(1) は実行されず、while((c= ・・・以下の処理に移る
365デフォルトの名無しさん:2006/03/21(火) 05:36:26
fopenが成功→if文の処理が実行されない→fpとtest.txtが関連付けられてwhile文に移る、ということですか?
366デフォルトの名無しさん:2006/03/21(火) 05:39:12
そういうことになる
367デフォルトの名無しさん:2006/03/21(火) 05:43:11
なるほど、理解できました
ご丁寧な回答ありがとうございましたm(_ _)m
368デフォルトの名無しさん:2006/03/21(火) 09:06:11
>>353
兵器と火力プラントとエアコンしか作ってません。

>>354
今度から↓で訊くように。
 はきだめC/C++下級者の質問箱
 http://pc8.2ch.net/test/read.cgi/tech/1124256027/l50
369デフォルトの名無しさん:2006/03/21(火) 17:18:06
C言語でプログラム作れるぜ!って言えるようになるには最低限何が作れればいいと思いますか?
DOSでHELLO!!でOK?
マルバツゲームができたらOK?
それ以上?
370デフォルトの名無しさん:2006/03/21(火) 17:22:07
簡単な処理プログラムが作れれば
一応作れるぜぇいって言えると思うよ
文書をビット演算や文字置き換え使って暗号化してみたり簡単なDosゲームを作ってみたり
エロ画像生成プログラム作ってみたり
371デフォルトの名無しさん:2006/03/21(火) 17:23:12
>>370
> エロ画像生成プログラム作ってみたり

うpうp!
372デフォルトの名無しさん:2006/03/21(火) 17:23:30
そうですか、どうもです。
つまりまだ全然できてないですね・・
373デフォルトの名無しさん:2006/03/21(火) 18:01:41
エロ画像を生成するアルゴリズムを激しく知りたいわけだが
374デフォルトの名無しさん:2006/03/21(火) 18:01:52
言うだけなら誰でも言えますよ?
375デフォルトの名無しさん:2006/03/21(火) 18:02:45
>>373
printf("(。人。)");
376デフォルトの名無しさん:2006/03/21(火) 18:05:25
特許取ってくる
377デフォルトの名無しさん:2006/03/21(火) 18:07:22
エロ画像じゃなくてエロAAやん
378デフォルトの名無しさん:2006/03/21(火) 18:12:36
擬似パイと擬似まんはもうヤダ
379デフォルトの名無しさん:2006/03/21(火) 22:28:40
エロ画像生成はあれだけどさ、よくある連番のエロ画像DLするようなやつ作れればいいんじゃない?
なんかサイトによっては上手くいかないんで、そういう場所でもOKなやつ作ってけろ。
(IEのヘッダとか偽装するといいのかなぁ…。)
380デフォルトの名無しさん:2006/03/21(火) 22:30:36
なに言ってんだこいつ
氏ねばいいのに
381デフォルトの名無しさん:2006/03/21(火) 22:37:27
ファイル名からどうエロいと判断するのか教えてほしいもんだな
382デフォルトの名無しさん:2006/03/21(火) 23:00:06
>>373
エロ画像の生成ならこれでできます。

#include <stdio.h>

int main()
{
 printf("エロ画像\n");
 return 0;
}
383デフォルトの名無しさん:2006/03/21(火) 23:03:10
Javaなら確か1.5くらいからエロ画像生成があったはず
384デフォルトの名無しさん:2006/03/21(火) 23:13:52
リアルマンコ生成プログラム担当

void PrintOmanko(void)   //豆付きおマンコ生成関数
{
puts("(i)");
puts("挿入しますか?");
}
385デフォルトの名無しさん:2006/03/22(水) 00:32:59
先生!
Apache1.3のmain(){}はどこにあるとですか!?
みつかりません!
386デフォルトの名無しさん:2006/03/22(水) 01:50:31
↑スレ違い↑
387デフォルトの名無しさん:2006/03/22(水) 02:38:56
>>385
grep で探せばいい。
388デフォルトの名無しさん:2006/03/22(水) 04:01:54
CodeCenter面白そうだから試してみたいけど
たけえよww
389デフォルトの名無しさん:2006/03/23(木) 07:03:51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(){
FILE *fp; //入力ファイルのファイルポインタ
char filename[256]; //入力ファイル名
FILE *outfp; //出力ファイルのファイルポインタ
char outfilename[256]; //出力ファイル名
char c;

//ファイル名取得
printf("ファイル名を入力してください > ");
scanf("%s",filename);

//入力ファイルオープン
if((fp = fopen(filename,"r")) == NULL){
printf("ファイルオープンエラー\n");
exit(1);
}

//出力ファイルオープン
strcpy(outfilename,filename);
strcat(outfilename,"_");
if((outfp = fopen(outfilename,"w")) == NULL){
printf("ファイルオープンエラー\n");
exit(1);
}
390デフォルトの名無しさん:2006/03/23(木) 07:04:40
↑の続きです

//ファイルの内容をコピー
while((c = fgetc(fp)) != EOF){
fputc(c,outfp);
}

fclose(fp);
fclose(outfp);
return 0;
}

これを実行して
ファイル名を入力してください > P162.c として、同じフォルダにP162.c_が作成されたのですが、P162.c_が開けません
ちゃんと中身が一緒になってることを確認したいんですが、どうやったらP162.c_は見れますか?
スレ違いなら、適したスレを教えてください
よろしくお願いします
391デフォルトの名無しさん:2006/03/23(木) 07:11:40
んなもんメモ帳でもつかって見ればよか
392デフォルトの名無しさん:2006/03/23(木) 07:23:03
簡単ですねorz
バカな質問ですみませんでした
393デフォルトの名無しさん:2006/03/23(木) 07:44:09
ヘッダを作り、Cファイルで読込んで、外部シンボル未解決エラーになるのですが
どんな原因が考えられますか
394デフォルトの名無しさん:2006/03/23(木) 07:47:46
ライブラリが足りない
395デフォルトの名無しさん:2006/03/23(木) 07:57:30
""じゃなくて<>で囲ってるからとかオチと見た
396デフォルトの名無しさん:2006/03/23(木) 08:02:11
コンパイルしただけで最後バイナリ作る時にリンクし忘れている。
397デフォルトの名無しさん:2006/03/23(木) 08:09:51
この前、本屋で「はじめてのC」を買うと思って
レジに出したら隣に居たバカっぽい女子高生に
小声でこの人童貞?とかって言われました

対処法を教えてください
398デフォルトの名無しさん:2006/03/23(木) 08:55:55
金髪にしてスキンヘッドにしろ
399デフォルトの名無しさん:2006/03/23(木) 09:21:52
そのネタ10数年前から脈々と受け継がれているな。
400デフォルトの名無しさん:2006/03/23(木) 09:25:55
>>395
393はどうみてもリンカエラーだろ。
401デフォルトの名無しさん:2006/03/23(木) 10:12:39
>>399
>397はどう見てもネタだろ。
402デフォルトの名無しさん:2006/03/23(木) 10:12:47
>>393
拡張子が cpp だったらボールギャグに蝋燭責めだぞ
403デフォルトの名無しさん:2006/03/23(木) 10:39:08
>>397
ばかだなあ、それ逆ナンだよ
せっかく誘ってきてるのにもったいねえ・・・
404デフォルトの名無しさん:2006/03/23(木) 12:33:12
c言語の保存で
.cじゃなく.cppで実行しても
なにか不都合とかありますか?(C言語で書いてるけどって意味です
405デフォルトの名無しさん:2006/03/23(木) 12:39:53
コンパイラに、これはC++じゃなくてCだと指示するオプションがいるかもね
406デフォルトの名無しさん:2006/03/23(木) 14:30:52
スタイルの質問です。
ヘッダにassert書いても良いもんなの?
定数を使うところ全部にassert書いておくの嫌じゃないですか。
どこにもassert書かずにコメントに逆らったら知らん、ていう態度でおk?

/* some header file */
const int SOME_VALUE = 1; /* assert(SOME_VALUE >= -100 && SOME_VALUE <= 100); */
407デフォルトの名無しさん:2006/03/23(木) 14:34:00
そういうのはコメント・ドキュメント・UnitTestに書くんでないの
408デフォルトの名無しさん:2006/03/23(木) 14:40:57
BOOST_STATIC_ASSERTもどきを自分で作ればいいだろ。
409デフォルトの名無しさん:2006/03/23(木) 14:48:09
コールバックを呼ぶような仕組みを組んだのですが、コールバック関数の実体にて
引数の型を間違えたり、引数が少なかったりしても警告すら出ません。

書き方間違っていませんか?


typedef int (CALLBACK * callback_proc)(int, int);

int
callback(
int a
// ☆ここを間違えていても、コンパイルが通ってしまう
)
{

}

void
hogehoge(callback_proc callback)
{
callback(10, 10);
}

main()
{
hogehoge(callback);
}
410デフォルトの名無しさん:2006/03/23(木) 15:37:39
>>409
警告周りのコンパイルオプション見直してみたら
411デフォルトの名無しさん:2006/03/23(木) 15:59:12
>>409
C++にしたら
412デフォルトの名無しさん:2006/03/23(木) 16:18:06
fread関数の戻値は「読み込んだ回数」ってあるのですが、
どういうことですか?
freadが実行された回数ですか?
413デフォルトの名無しさん:2006/03/23(木) 16:21:44
ヒント:引数の内容を100回嫁
414412:2006/03/23(木) 16:25:05
わかりました。自分でもバカらしくなってきました。ありがとうございます。
415デフォルトの名無しさん:2006/03/23(木) 16:36:26
C言語の構造体について質問です

#include<stdio.h>
struct k{

int a=0;

}A,B;

int main(){

B.a=900;
A=B;

printf("%d",A.a);

B.a=77;

printf("%d",A.a);

}

とした場合
2回目のprintfは77?
それとも構造体の代入文はJavaのクラスと違ってアドレス渡しではなくコピーそのもの?
416デフォルトの名無しさん:2006/03/23(木) 16:38:25
deep copy
417デフォルトの名無しさん:2006/03/23(木) 16:40:33
ポインタのコピーはそういう書きかたがあるでしょ。
418デフォルトの名無しさん:2006/03/23(木) 17:22:33
↑の回答ありがとうございます。
構造体のアドレスについての質問なのですが

#include<stdio.h>
struct k{

int a=0;
char *c;
int b=0;
}A;

int main(){

int adder1=(int)&(A.b);
int adder2=0;
struct k *p;

A.c=(char *)malloc(40000);

adder2=(int)&(A.b);

if(adder2==adder1){
printf("hoge");
}

(*p)=A; /**この文はOK?事前にmalloc必要?**/

}
hogeは出力されますか?
また構造体のポインタを宣言した後にmallocする必要はありますか?↓
419デフォルトの名無しさん:2006/03/23(木) 17:27:03
何が聞きたいのかよくわからんが、*p という未初期化のポインタの指す構造体に
Aを丸ごとコピーしてる。
420419:2006/03/23(木) 17:30:53
hogeは出力される、つかなんで変わると思うの。

昔は構造体はコピーしてくれなかったが
いつの日かできるようになった。実態はmemcpyが動いてるようなもん。
421デフォルトの名無しさん:2006/03/23(木) 17:37:55
>>420
なるほど、ありがとうございます。
もう一つ確認で聞きたいのですが
構造体の中に構造体がある場合でも、それらもDeepコピーされるのでしょうか?
422393:2006/03/23(木) 17:38:38
・a.h
extern void ww();
・a.c
#include "a.h"
void ww(){}

・・実行.c
#include "a.h"
ww(){}

としています。リンカというのはどこをどうしたらいいですか
423デフォルトの名無しさん:2006/03/23(木) 17:39:27
>>420
いつの日か、というか、昔々の K&R の頃には既に出来ていたのだが、
PC用コンパイラには中々実装されなかった、ということだ。
424デフォルトの名無しさん:2006/03/23(木) 17:41:53
>>421
構造体の代入はC言語の場合はなにも考えずにmemcpy()してるのと同じだ。つまり
a と b の型が同じだとして a = b; は memcpy(&a, &b, sizeof(a)); と同じと
いうことだ。

あとは自分で考えろ。
425デフォルトの名無しさん:2006/03/23(木) 17:46:23
C言語にはシャローだとかディープなんて区別ない
ポインタ型の変数だって、ポインタ型の値にすぎないのだから
426409:2006/03/23(木) 17:48:05
>>410
STRICT定義で検出されないかと思いましたが、効果ありませんでした。

>>411
_


何とか方法ありませんでしょうか?
427デフォルトの名無しさん:2006/03/23(木) 17:49:57
>>426
STRICTとはなんだ?
428デフォルトの名無しさん:2006/03/23(木) 17:56:51
>>418
(*p)=A;
多分エラーで落ちる
malloc必要
429409:2006/03/23(木) 17:57:09
430デフォルトの名無しさん:2006/03/23(木) 18:36:08
Main.obj : error LNK2019: unresolved external symbol __imp__PostMessageA@16 referenced in function _WinMain@16
431デフォルトの名無しさん:2006/03/23(木) 18:42:57
>>426
STRICTはWindowsプログラミングのお話で、
C言語そのものとはじぇんじぇん関係ありません。
432デフォルトの名無しさん:2006/03/23(木) 18:50:59
>>430
kernel32.lib user32.lib gdi32.lib
この辺、リンクしてるか?
433393:2006/03/23(木) 18:53:22
・a.h に extern void ww();
・a.c に #include "a.h" void ww(){}
・・実行.c に#include "a.h" int main(void){ww(){}}
a.cはどこで取込むのだろ。。extern使用例を見ると
取込みかたは間違ってないと思うのですが、未解決エラーになります
434デフォルトの名無しさん:2006/03/23(木) 18:57:09
>>432
Thx
動いた、そういう基本的なDLLは自動でくみこんでくれないんだね・・・><
435デフォルトの名無しさん:2006/03/23(木) 19:04:57
>>434
コンパイラ何よ。
436デフォルトの名無しさん:2006/03/23(木) 19:06:10
どーせVC2005Expressだろ。
437デフォルトの名無しさん:2006/03/23(木) 19:06:39
>>433
君もコンパイラ何だ
438デフォルトの名無しさん:2006/03/23(木) 19:10:36
YES

20005です。
まぁ無料だし我慢我慢。
439393:2006/03/23(木) 19:13:34
フリーBCCです。>>432のようなリンクの設定は通常、どこで行うのですか
440デフォルトの名無しさん:2006/03/23(木) 19:14:24
2005入れてないからわからんが、 /nodefaultlib とか
つけない限りリンクするんじゃないのかなあ・・・
441デフォルトの名無しさん:2006/03/23(木) 19:16:14
>>433
とりあえず、個々にコンパイルしてできたオブジェクトをリンカで全部指定して実行ファイルを作るか
コンパイラとリンカを呼び出すコマンドに全ソースファイルを指定してやればいい
442デフォルトの名無しさん:2006/03/23(木) 19:17:46
>>439
bcc なら、
bcc 実行.c a.c
でいけるんじゃ?

つかコンパイラやリンカの話はスレ違いだなあ・・・
443393:2006/03/23(木) 20:02:47
bcc a.c 実行.c
としました。
・a.h に extern ww(int);
・a.c に ww(n){}
・・実行.c にww(5){}
a.c の n が未定義エラーとなりましたので
a.h に、int n;を加えたのですが、やはり未定義エラーになります
444デフォルトの名無しさん:2006/03/23(木) 20:07:18
>>443
n???
どこでn使いたいの?

ファイル間で同じ変数使えるようにしたいんなら
ヘッダファイルでextern宣言しろ
定義はどこかの.cファイルでする
445デフォルトの名無しさん:2006/03/23(木) 20:08:18
最近は釣りのレベルが低(ry
446393:2006/03/23(木) 20:24:44
a.cで作ったww(n)を、実行.cで呼び出して、5を入れたいです
a.cはint n;ww(n){}
実行.cはmain(void){ww(5)}
となってますが、nが未定義エラーになります
447デフォルトの名無しさん:2006/03/23(木) 21:00:12
BccDevとか入れれば
448デフォルトの名無しさん:2006/03/23(木) 22:01:03
windows2000、VC++6で開発しています。
socketを使ったプログラムで、サーバー側の実験をしてます。
接続されるのを待って、接続されるとスレッドを起動して、その中で受信しています。
ただ、ケーブルが抜かれる等、相手側がcloseせずに接続が切断されると、それをうまく検出できません。
どのようにするべきでしょうか?
449デフォルトの名無しさん:2006/03/23(木) 22:02:19
450デフォルトの名無しさん:2006/03/23(木) 23:36:09
>>448
スレ違い
451デフォルトの名無しさん:2006/03/23(木) 23:50:16
>>450
スレ違いでしたか、すいません。socketってANSI Cじゃなかったっけ?
452デフォルトの名無しさん:2006/03/23(木) 23:59:01
>>451
バカじゃねえの?
453デフォルトの名無しさん:2006/03/24(金) 00:06:34
>>451
winsockじゃねえの?
454デフォルトの名無しさん:2006/03/24(金) 00:12:50
>>451
ここはposixすら許さない万年春厨が仕切ってるから
おとなしくネットワークスレ逝っとけ。
455デフォルトの名無しさん:2006/03/24(金) 00:36:13
g_Material

g_
ってなんなのさ!
456デフォルトの名無しさん:2006/03/24(金) 00:37:36
うんこ記法
457デフォルトの名無しさん:2006/03/24(金) 00:39:06
グローバル変数
458デフォルトの名無しさん:2006/03/24(金) 00:48:48
MFCとかでM$がよく使ってた記法じゃなかったか?
459デフォルトの名無しさん:2006/03/24(金) 00:51:12
グローバル変数を使う気を無くしてくれる程度には役に立つ。
460デフォルトの名無しさん:2006/03/24(金) 00:51:24
さっさと答えろ役立たず!
461デフォルトの名無しさん:2006/03/24(金) 01:01:38
I love YOU!!
462448:2006/03/24(金) 01:09:20
普通にANSI Cじゃないッスね。posixですね

>>453
まぁ〜、確かにwinsockなんですけど、socket、bind、send、recvあたりはある程度互換があるから、
駄目な部分は自分で調べりゃいいかなと思ってました。

>>454
ありがと。ネットワークスレ逝ってくる
463デフォルトの名無しさん:2006/03/24(金) 17:15:18
C言語について質問です。

問題: A君55点 B君77点 C君65点 だったとします。
    まずこれらを入力させ、次に並び替えをし、再度出力するというプログラムです。
    
    入力させる際はfor文で回し、並び替えの際はバブルソートを使い、表示
    させる際はfor文で回して出力させるというものです。

   よろしくお願いします。
464デフォルトの名無しさん:2006/03/24(金) 17:18:29
ことわる
465デフォルトの名無しさん:2006/03/24(金) 17:19:11
>>463
ちょwwwそれ質問じゃねえwww

C/C++の宿題を片付けます 62代目
http://pc8.2ch.net/test/read.cgi/tech/1141363718/
466デフォルトの名無しさん:2006/03/24(金) 17:39:11
おもっくそ「問題:」とか入ってるしw
467デフォルトの名無しさん:2006/03/24(金) 17:49:23
丸投げは身に付かんぞ・・・
468デフォルトの名無しさん:2006/03/24(金) 19:09:53
俺なら面倒だから qsort() 使う。
要素数が1個だろうが100個だろうが面倒くさいからそのまま qsort() に渡す。
469デフォルトの名無しさん:2006/03/24(金) 23:07:38
助けてください
文字列と文字列の間にある文字列の抽出方法を教えてください
お願いしますね
470デフォルトの名無しさん:2006/03/24(金) 23:09:01
>>469
日本語で
471デフォルトの名無しさん:2006/03/24(金) 23:14:16
>>470
意味が分かりませんか?
AAA○○○BBB
という文字列があったとして○○○の文字列を取り出したいのです。
○○○は決まった文字列、文字数ではありません。
472デフォルトの名無しさん:2006/03/24(金) 23:18:20
>>471
まずAAAを検索して、それを元にAAAの直後の文字へのポインタ(p)を記憶する。
次にBBBを検索して、それを元にBBBの直前の文字へのポインタ(q)を記憶する。
pからp - q文字分を取り出せば出来上がり。
元の文字列を破壊してよければ、BBBを検索して見つかるBBBの先頭部分に'\0'を代入してしまうという方法もある。
473デフォルトの名無しさん:2006/03/24(金) 23:18:22
>>471
取り出したいとは?
474デフォルトの名無しさん:2006/03/24(金) 23:20:12
取り出さなくても答えは○○○だな
475デフォルトの名無しさん:2006/03/24(金) 23:22:21
ボイヤータソハァハァ
476デフォルトの名無しさん:2006/03/24(金) 23:24:16
struct AB {
 int a;
 int b;
} ab;

struct AB *pab;
int *a, *b;

pab = &ab;
a = &(ab.a);
b = &(ab.b);

printf("%d %d %d", (int)a - (int)pab, (int)b - (int)pab - sizeof(int), (int)b - (int)a - sizeof(int));

この時出力が0 0 0になることは保障された動作ですか?
つまり構造体のアドレスとメンバのアドレスの関係を知りたい
(構造体のアドレスから上のメンバから順に詰められてるのは絶対かということ)
477デフォルトの名無しさん:2006/03/24(金) 23:25:55
>>472
素晴らしい
478デフォルトの名無しさん:2006/03/24(金) 23:27:12
>>476
保障されていません。
各メンバの間にパディングで隙間が開いている場合があります。
ANSI Cにはoffsetofマクロがあるのでこれを使うといいでしょう。
479476:2006/03/24(金) 23:30:27
>>478
ありがとうございます
offsetofマクロというのを調べてみます
480デフォルトの名無しさん:2006/03/24(金) 23:52:04
>>476
(int)a - (int)pab
が0になるのは絶対ですか?
481デフォルトの名無しさん:2006/03/25(土) 00:16:45
ウインドウズアプリを作ってみたいのですが、お勧めのHPを教えてください
言語は何でも良く、とりあえず電卓的なものを作ってみようかと
482デフォルトの名無しさん:2006/03/25(土) 00:19:54
Delphi6Personalやっとけ。
Cなんてウンコ
483デフォルトの名無しさん:2006/03/25(土) 01:05:48
VisualC#ExpressとかVisualBasicExpressとかHSPとかもおすすめ
484デフォルトの名無しさん:2006/03/25(土) 01:36:24
このパートスレが初めて立てられたのはいつの事でしたか?
485デフォルトの名無しさん:2006/03/25(土) 01:38:07
B言語が誕生した頃
486デフォルトの名無しさん:2006/03/25(土) 01:51:58
60年代ですか?
487デフォルトの名無しさん:2006/03/25(土) 02:42:41
>>482-483
どもです。VisualC#ExpressとDelphi落としました。
色々いじって見ます
488デフォルトの名無しさん:2006/03/25(土) 05:03:30
イチオシはJava
489デフォルトの名無しさん:2006/03/25(土) 09:45:43
Javaは今すぐ滅びろ
490デフォルトの名無しさん:2006/03/25(土) 13:17:36
質問ですが
int c;
・・・
if(!c){
・・・
}
!cっていうのは !(0<c)でしょうか?
それとも !(0!=c)でしょうか?
491デフォルトの名無しさん:2006/03/25(土) 13:23:08
どっちかといえば!(0!=c)
492デフォルトの名無しさん:2006/03/25(土) 13:33:46
c==0
493デフォルトの名無しさん:2006/03/25(土) 13:59:10
c===0
494デフォルトの名無しさん:2006/03/25(土) 14:17:56
c=0
495デフォルトの名無しさん:2006/03/25(土) 14:21:36
>>492が正解
Cが0だと!で反転するから1 = True
それ以外は1以上は1として!で反転するから0 = False
496デフォルトの名無しさん:2006/03/25(土) 14:21:54
c(^-^)c
497デフォルトの名無しさん:2006/03/25(土) 14:41:04
Verilog臭がする
498デフォルトの名無しさん:2006/03/25(土) 17:00:15
ライブラリ関数の質問です.

スレッドが費やした CPU 時間を得るにはどうすればよいですか?
sys/times.h の times() だとプロセス時間になるので困ってます.
499デフォルトの名無しさん:2006/03/25(土) 17:14:27
>>498
>>1によれば
>標準Cではできない事の質問(中略)は専門の別スレッドがあるのでそこへ
↓だと思うけど
UNIXプログラミング質問すれ Part7
http://pc8.2ch.net/test/read.cgi/tech/1127373405/
500デフォルトの名無しさん:2006/03/25(土) 17:20:07
500
501498:2006/03/25(土) 17:23:51
>>499

ありがとう.さっそく行ってきます.
502デフォルトの名無しさん:2006/03/25(土) 17:24:40
time.hにはclock()関数があった希ガス
503デフォルトの名無しさん:2006/03/25(土) 17:28:37
問題はCLOCK_PER_SECONDが適当だってことだ。
504デフォルトの名無しさん:2006/03/25(土) 17:38:11
クロックが動的にかわるCPUもあるんだから適当でもしかたあるまい
そもそも(ry
505デフォルトの名無しさん:2006/03/25(土) 18:20:49
>>503
適当ならいいんじゃないか?
いい加減だと困るが。
506デフォルトの名無しさん:2006/03/25(土) 19:21:37
今の日本は「適当」の意味が2通りあるから困る
しかも意味がほぼ正反対だからなお困る
507デフォルトの名無しさん:2006/03/25(土) 20:54:33
文脈で分かるから問題ない。
508393:2006/03/25(土) 20:59:00
Cソースにint n;ww(n){} ・・・他にも関数がたくさんある
のとき、未定義エラーになる原因は何が考えられますか
条件が後出しだが。ごめ
509デフォルトの名無しさん:2006/03/25(土) 21:04:02
原因:関数の定義方法が分かっていない
510デフォルトの名無しさん:2006/03/25(土) 21:05:23
それを C++ から使ってる・・・とかじゃないよな?
511デフォルトの名無しさん:2006/03/26(日) 09:09:57
ある文字列の中からある文字列を区切ることは可能でしょうか?
strtokだと完全一致しないので困っています。
512デフォルトの名無しさん:2006/03/26(日) 09:10:40
>>511
strstr
513デフォルトの名無しさん:2006/03/26(日) 09:11:36
>>512
超速レスきめぇwwwwwwwwwwwww
514デフォルトの名無しさん:2006/03/26(日) 09:15:00
>>511
いや…だから区切りたいんですが?
515デフォルトの名無しさん:2006/03/26(日) 09:16:12
間違えた>>512
516デフォルトの名無しさん:2006/03/26(日) 09:19:47
>>514
strstr
517デフォルトの名無しさん:2006/03/26(日) 09:22:27
・・・
518デフォルトの名無しさん:2006/03/26(日) 09:31:27

519511:2006/03/26(日) 09:37:04
やっぱり自分で考えますね
このスレの人達のレベルの低さを垣間見た気がして、何かやるせないです。
ではでは
520デフォルトの名無しさん:2006/03/26(日) 09:41:29
>>511
他人に自分がやりたいことを伝えることもできないのに、
コンピュータに伝えることができるのだろうか。
「区切る=strtok()みたいに元の文字列をぶった切る」ならこれでいいだろ。
char * src = "abcdefg";
char * key = "cde";
char * p = strstr(src, key);
p[strlen(key)] = '\0';
521デフォルトの名無しさん:2006/03/26(日) 09:41:48
なにこいつ。
お前のレベルの低さにみんな飽きれてるんだが?
もしかしてそれすら分からなかったのか^^
522520:2006/03/26(日) 09:43:15
>>521
漏れか? 漏れのレベルが低いのか?
523デフォルトの名無しさん:2006/03/26(日) 09:45:24
\0って何でしたっけ?
524デフォルトの名無しさん:2006/03/26(日) 09:45:45
>>523
ロハ
525デフォルトの名無しさん:2006/03/26(日) 09:47:53
俺も文字列の中からある文字列を区切れって言われたら>>520みたいなコード書くと思うが
526511:2006/03/26(日) 09:48:09
はぁ…マジでレベル低いなw
実のところお前らを試したんだよ。

〜答え合わせ〜
>>511,513,514,515,517,518,519=俺

これがC厨共のレベルかぁ…ここまでレベルが低いとホント、笑いすらこみ上げてくるね!
まぁC厨なんて時代遅れの勘違い野郎共が使う言語だし、しょうがないよね!
Javaスレ行ってきま〜す^^
527デフォルトの名無しさん:2006/03/26(日) 09:50:09
>>526
スレ違い
528511:2006/03/26(日) 09:51:18
>>527
キメェよC厨w
529512:2006/03/26(日) 09:53:22
日曜の朝から釣りたぁ平和だねえ
530511:2006/03/26(日) 09:54:15
>>529
釣られるお前らが低脳なだけだけどなw
531デフォルトの名無しさん:2006/03/26(日) 09:55:21
VIPにお帰りください
532511:2006/03/26(日) 10:01:46
10時になったから荒らすの止めるわ
533521:2006/03/26(日) 10:03:56
10時過ぎてんのに荒らすなカス。
534デフォルトの名無しさん:2006/03/26(日) 12:18:36
基本情報技術者試験が近いのにC言語の問題がまったくといっていいほど
解けない…
問題解くコツとかあったらだれかおしえれ
535デフォルトの名無しさん:2006/03/26(日) 12:19:41
変数になにが入っているか余白に書く
536デフォルトの名無しさん:2006/03/26(日) 12:20:08
とにかく人のコードを解読する
537デフォルトの名無しさん:2006/03/26(日) 12:22:43
>>534
出題者は意外に身近にいる ・・・「コツ」なんてそのくらい
実力以上の試験に通ってしまうとその後に地獄が待ってるぞ
538デフォルトの名無しさん:2006/03/26(日) 12:26:41
>>534
Cの問題って大体ポインタ絡みじゃなかったっけ?
まあ、なんだ、ポインタがんばれ
539デフォルトの名無しさん:2006/03/26(日) 12:27:48
>>535
それはよく学校の先生にいわれてるww
実行してみます

>>536
とりあえずプログラムを浴びればいいんですか?

>>537
大学の推薦がもらえるらしいので早めにとっておきたくて(ry

とりあえずみんなマジレスサンクスwww
540デフォルトの名無しさん:2006/03/26(日) 12:50:21
大学推薦って東海大や京都産業大学だろ?
現実逃避してないでマジメに受験勉強しろよ(´・ω・`)
541デフォルトの名無しさん:2006/03/26(日) 13:39:45
>>540
進学校じゃないんじゃね?
542デフォルトの名無しさん:2006/03/26(日) 13:40:10
ウゼー
543デフォルトの名無しさん:2006/03/26(日) 13:43:04
東大京大が推薦なんてすげぇ
544デフォルトの名無しさん:2006/03/26(日) 14:12:41
つまんね
545デフォルトの名無しさん:2006/03/26(日) 16:08:21
c言語初心者が勉強するために参考になるサイトってないですか?
本は持ってるんですが、本に説明がないところがたまにあって・・・
一応ぐぐって理解してるつもりではありますが
546デフォルトの名無しさん:2006/03/26(日) 16:29:59
よほどマニアックなことでない限り、本当に説明が無いのであれば、
本がわるいのでもっと良い本を買いましょう。

「初心者向け」と謳うWebサイトのほとんどすべてはクソです。
547デフォルトの名無しさん:2006/03/26(日) 16:33:20
いいかどうかはまったくしらないが、苦しんで覚えるC
548デフォルトの名無しさん:2006/03/26(日) 16:35:26
詳解c
549デフォルトの名無しさん:2006/03/26(日) 16:39:12
明解C
550デフォルトの名無しさん:2006/03/26(日) 16:40:58
聴解C
551デフォルトの名無しさん:2006/03/26(日) 17:00:51
A〜Jの10個のアルファベットに0〜9までの数字が
それぞれひとつずつ対応しています。
Aは1で割り切れ、AB(2ケタの数)は2で割り切れ、
ABCは3で、ABCDは4で、・・・・・と続いていき最後に
ABCDEFGHIJは10で割り切れます。
A〜Jがどの数と対応しているかを求めなさい
というのをプログラムでやりたいんですけど、
数値を代入するところがうまく表現できません。どうすればいいですか。
552デフォルトの名無しさん:2006/03/26(日) 17:02:39
本1冊とかサイト1ヶ所で覚えようとかすんな
553デフォルトの名無しさん:2006/03/26(日) 17:08:16
include sadio<h> {
static main (void) {
int A B C;
A=68 B=55
C=A+B
system.out.println(C) return 0;}
}
これで足し算できるはずなんですがエラーがでます。何が、問題ですか。
554デフォルトの名無しさん:2006/03/26(日) 17:08:20
>>551
int A = i;
int B = j;
int AB = A*10 + B;
 :
どううまく表現できんか知らんが、こんなもんだろ。
intが32bit以下の環境では10桁の数値は表現できんがそれは環境依存。longとか多倍長とかあされ。
つーか、Jは0だろ。
555デフォルトの名無しさん:2006/03/26(日) 17:08:24
覚えるくらいは1冊でいいと思うけどな。
556デフォルトの名無しさん:2006/03/26(日) 17:10:06
>>553
C言語でおk
557デフォルトの名無しさん:2006/03/26(日) 17:10:13
>>553
おまっ…それのどこがCなんだよ!
558デフォルトの名無しさん:2006/03/26(日) 17:11:37
>>551
宿題スレにあったら喜んでやるんだけどな
559デフォルトの名無しさん:2006/03/26(日) 17:17:30
>>553
傑作ですね
見てておもしろいと思います
560551:2006/03/26(日) 17:21:06
未知数に数値を代入する反復処理のところはどう表現すればいいでしょうか。
未知数1つのケースなら容易に分かるのですがこれだけ未知数があると・・・
561551:2006/03/26(日) 17:23:01
>>558
宿題スレでしたか。何分宿題ではなかったもので・・・
でも今からそっちに書くとマルチとかいわr
562デフォルトの名無しさん:2006/03/26(日) 17:26:23
>>560-561
自分で「反復処理」って書いてるんだから分かると思うけどなぁ。
マルチと言われかねないなら先に断っときゃええんとちゃう? 追い出されたって。
宿題スレに行け。
563デフォルトの名無しさん:2006/03/26(日) 17:29:28
>>551
もう戻ってくんな
564デフォルトの名無しさん:2006/03/26(日) 17:37:35
>>551
適当に書いて調べてみた。
結果......解なし 以上
565564:2006/03/26(日) 17:46:17
あ、オーバーフローしてただけだった。解はあった。
#include<stdio.h>
long long f(long long n,int i,int j,long mask){
    long long ret;
    if(j==10)return n;
    else if(i==10)return -1;
    else if( (mask&1<<i) || (n*10+i)%(j+1)!=0 || (ret = f(n*10+i,0,j+1,mask|1<<i) ) < 0 ) return f(n,i+1,j,mask);
    else return ret;
}
int main(void){
    long long n = f(0,0,0,0);
    if(n == -1) printf("解なし");
    else printf("ABCDEFGHIJ = %010lld\n",n);
    return 0;
}
566デフォルトの名無しさん:2006/03/26(日) 17:55:22
答えは3816547290、ただひとつ で合ってるかな?算数的に求めたんだけどw
567デフォルトの名無しさん:2006/03/26(日) 17:57:23
>>523
お前の財布の中身
568デフォルトの名無しさん:2006/03/26(日) 17:58:16
>>565-566
ここは10重ループを回すのがセオリーってもんだろ
569デフォルトの名無しさん:2006/03/26(日) 17:59:17
#include <stdio.h>
#include <stdlib.h>

main(){
FILE *fp;
int r; //freadの戻り値
char buff[16]; //読み込んだものを格納するバッファ

//バイナリモードでオープン
fp = fopen("test2.c","rb");
if(!fp){
printf("ファイルオープンエラー\n");
exit(1);
}

//ファイル読み込み
while ((r = fread(buff,sizeof(char),8,fp)) != 0){
buff[r]='\0';
printf("%s",buff);
}

fclose(fp);
return 0;
}

これの、while以下がどうもピンときません
whileのところはコンピュータはどういう動作をしてるのでしょうか?
570デフォルトの名無しさん:2006/03/26(日) 18:03:18
8文字ずつ読んで8文字ずつ表示してるかんじ
571デフォルトの名無しさん:2006/03/26(日) 18:05:28
ループに詰め込みすぎてわけわからんということなら
for(;;){
 r = fread(buff,sizeof(char),8,fp));
 if(r == 0) break;
 buff[r]='\0';
 printf("%s",buff);
}
572デフォルトの名無しさん:2006/03/26(日) 18:07:48
くだらないことかも知れないけど、教えてください。
strcmpって関数を自作して使おうと思ったら動作が不可解なものになりました。
調べてみたら、strcmpという名前の関数が標準ライブラリにあるんですね。
俺も、なんとなく聞いたことがあるから、そういう名前にしたんですが。
名前を変えたら、問題なしで動きました。
でも、なんだか気になる。
もし、誰かのライブラリにある関数と同じプロトタイプの関数を書いてしまったら、
どっちかを無効にする方法はあるのでしょうか。
それとも、救いようはないのでしょうか。
573デフォルトの名無しさん:2006/03/26(日) 18:13:41
>>545
根本的な問題として C はプロ用なんで
「初心者」という免罪符を捨ててからでないと
とりつく島もないのが実情だ

誰かに先に言われてしまったが
何か勘違いしてるサイトや本はたくさんあるが
そういうところに入門しても年単位で見ると結局
徒労散財に終わるだけだ

どうせ「初心者向け」と称するところに入門するなら
C じゃなくアセンブラや組み込みをやっているところをすすめたい
574デフォルトの名無しさん:2006/03/26(日) 18:13:52
includeやめりゃいいんじゃね('A`)
575デフォルトの名無しさん:2006/03/26(日) 18:14:33
>>568
今書いてるぜ
576デフォルトの名無しさん:2006/03/26(日) 18:17:58
>>570>>571
レスありがとうございます
>>571読んで理解してみます
577デフォルトの名無しさん:2006/03/26(日) 18:21:46
>>572
名前がかち合ってしまったらどうしようもない。
# C++とかではnamespaceというのを修飾して
# mylib.stdcmpといった感じで区別できるようになる。
現実にはxxStrcmpとかイニシャル・会社名、ライブラリ名を頭にくっつけて
ぶつからないようにする。

また、関数をstaticにすればそのファイル内では好き勝手に名前をつけても
他のファイルには影響を及ぼさないように出来る。
578デフォルトの名無しさん:2006/03/26(日) 18:38:48
579デフォルトの名無しさん:2006/03/26(日) 18:39:13
># mylib.stdcmpといった感じで区別できるようになる。
  mylib::strcmp か std::strcmp ならわかるが・・・
580デフォルトの名無しさん:2006/03/26(日) 18:40:01
C#に毒されてるんだろ
俺もだけど
581デフォルトの名無しさん:2006/03/26(日) 18:57:44
>>553
ワロスwww
出直せwww




もしかして釣られた?
582デフォルトの名無しさん:2006/03/26(日) 19:07:17
>>578
漢を見たw。
そして意外に早く答えが求まることにびっくり。
計算機も速くなったもんだ。
583デフォルトの名無しさん:2006/03/26(日) 19:14:05
これは無意味に凄いwwww
584デフォルトの名無しさん:2006/03/26(日) 19:15:37
>>578
想像以上に早いwwww
585デフォルトの名無しさん:2006/03/26(日) 19:16:07
>>578
テラワロス
586デフォルトの名無しさん:2006/03/26(日) 19:18:51
>>553って何のプログラムだと思う?
587デフォルトの名無しさん:2006/03/26(日) 19:21:56
一番奥1379224回しかループしないのな。
588デフォルトの名無しさん:2006/03/26(日) 19:27:09
発見時はそうだがループ自体は10!回してるぞ。
589デフォルトの名無しさん:2006/03/26(日) 19:28:02
いや、10^10だろ。
590デフォルトの名無しさん:2006/03/26(日) 19:59:00
>>589に対する気の効いたツッコミをどうぞ↓
591デフォルトの名無しさん:2006/03/26(日) 20:09:39
なんでやねん
592デフォルトの名無しさん:2006/03/26(日) 22:24:13
ああ、はやく春休み
593デフォルトの名無しさん:2006/03/26(日) 23:39:10
free_list(struct list *listp)
{
while (listp != NULL) {
struct list *nextp;

nextp = listp->next;
free(listp);
listp = nextp;
}
}

list構造ならfreeはこんな感じですればいいと思いますが

tree構造
struct tree{
int val;
struct tree *left;
struct tree *right;
};
みたいな時には再起を使わずにかけますか?
594デフォルトの名無しさん:2006/03/26(日) 23:49:18
書けねー奴の再帰は他人のサル真似
再帰が使えない言語でそういう処理を考えたこともない

あ、再起だったか
こりゃ失礼
595デフォルトの名無しさん:2006/03/26(日) 23:56:16
>>593
辿った順を自分で記憶しておけば書ける。
596デフォルトの名無しさん:2006/03/27(月) 00:12:34
近頃の若いのはプログラム構造図からコード起こしたりしねえもんだから
こんな初歩的なことでストールしやがる

只で面倒見てやるほど甘かねえが1つだけ: 再帰の最深レベルを限定しろ
別に再帰に限ったことじゃなくスタックは有限だが
597デフォルトの名無しさん:2006/03/27(月) 00:13:42
最近目的に沿ったコードがパッと浮かぶようになった
これも毎日見ているエロ画像のおかげ
598デフォルトの名無しさん:2006/03/27(月) 00:19:57
うp汁
599デフォルトの名無しさん:2006/03/27(月) 00:23:34
600デフォルトの名無しさん:2006/03/27(月) 00:26:08
>>599
ある意味精神的ブラクラ
601デフォルトの名無しさん:2006/03/27(月) 00:30:44
上部に栗を挟んどいてもらえるとオチャメでいいね
602デフォルトの名無しさん:2006/03/27(月) 01:37:57
>>593
void free_tree(struct tree*p){
    struct tree*x;
    while(p){
        while(p->left){
            x = p;
            p = p->left;
            x->left = p->right;
            p->right = x;
        }
        x = p;
        p = p->right;
        free(x);
    }
}
603デフォルトの名無しさん:2006/03/28(火) 00:07:51



char 256までが限界です。256以上足し算するとどなるでしゅぁ?><?
int も65366超えたら どるんあですか><? やっぱ限界とぱしちゃうかな^^;


604デフォルトの名無しさん:2006/03/28(火) 00:08:51
256になるわけないだろバカ
605デフォルトの名無しさん:2006/03/28(火) 00:32:51
int って65535じゃないのかよ変態が。charも-128〜127までじゃないのかよ変態どもが。
606デフォルトの名無しさん:2006/03/28(火) 01:00:30
>>605
charが符号付きであるか否かは処理系定義
であるからcharの範囲が-2^〜2^7-1であるか、0〜2^8-1であるかはlimits.hでも見ないと分からない
607デフォルトの名無しさん:2006/03/28(火) 01:02:51
はいはい
608デフォルトの名無しさん:2006/03/28(火) 02:42:11
>>605 変態は、>>603なわけだが
609デフォルトの名無しさん:2006/03/28(火) 04:00:19
65536とか言ってるのは論外として…

intが65535?どんな環境だ?
intが2バイト?しかもunsigned?
610デフォルトの名無しさん:2006/03/28(火) 04:07:05
sizeof(int) == 2 な環境は今でも全然めずらしくない
# ここしばらく俺の担当案件なんぞこればっか

まあデフォが unsigned はさすがに「少ない」が
611デフォルトの名無しさん:2006/03/28(火) 04:46:04
>>609
int == unsigned intは確かに稀としても
規格上、intのサイズとして最低限保障されてるのは2バイトなんだから
そう想定しておくのは悪い事じゃない
612デフォルトの名無しさん:2006/03/28(火) 05:18:16
sizeof(int) == 1 もふつーにあるけどね
WG も玉石混淆で技術的にすごい人と政治の天才が混じってて
ときどきおかしいことが書いてある
613デフォルトの名無しさん:2006/03/28(火) 05:29:21
JISX3010:2003によると型intは
-(2^15-1)〜2^15-1
以上の表現範囲を持つように規定されてるから
sizeof(int)==1は規格合致処理系じゃない可能性が高いだろ
1バイト=16ビットなんてトンデモ仕様なら別だが
614デフォルトの名無しさん:2006/03/28(火) 05:33:10
もとより「規格違反」は百も承知で実をとってる製品を金切り声で罵っても1円にもならん
615デフォルトの名無しさん:2006/03/28(火) 05:35:06
>>614
そんなの有るのか?
とゆうかsizeof(int)==1ならcharでいいじゃん
616デフォルトの名無しさん:2006/03/28(火) 05:40:07
ネタにマジレス(・A ・)イクナイ!
617デフォルトの名無しさん:2006/03/28(火) 07:25:29
>>603
銀行のATMが止まります(><;)
618デフォルトの名無しさん:2006/03/28(火) 11:03:05
tiny モデルならポインタもintも16ビット、コード領域+データ領域で64KBytes
619デフォルトの名無しさん:2006/03/28(火) 11:04:10
そこでGMPですよ
620デフォルトの名無しさん:2006/03/28(火) 11:36:23
>tiny モデルならポインタもintも16ビット
データポインタもコードポインタも16ビット
large, hugeモデルなら
データポインタもコードポインタも32ビット(但し、リニアではない)
621デフォルトの名無しさん:2006/03/28(火) 11:46:28
EMSメモリ?farポインタ?何のことです?
622デフォルトの名無しさん:2006/03/28(火) 12:33:32
夜神月が降臨しました
623デフォルトの名無しさん:2006/03/28(火) 12:35:20
なんだ、このスレの住人はそういうネタが好物なのか…( ..)φメモメモ
624デフォルトの名無しさん:2006/03/28(火) 12:44:35
>>605
charが8ビットとは限らないよな?
625デフォルトの名無しさん:2006/03/28(火) 12:47:19
>>611
「バイト」じゃなくて「オクテット」では?
言葉の定義の問題だが、「バイト」だと8ビット単位とは限らない。
626デフォルトの名無しさん:2006/03/28(火) 13:11:58
下らんことやってないでANSI/JIS Cの規格100回嫁
627デフォルトの名無しさん:2006/03/28(火) 13:16:25
>>626
そして>>605の俺に結論を提出。
628デフォルトの名無しさん:2006/03/28(火) 13:52:45
char 8bit以上 符号は適当
short int 16bit以上
int 16bit以上
long int 32bit以上
long long int 64bit以上

charのバイト数(sizeofの結果)は1
629デフォルトの名無しさん:2006/03/28(火) 13:57:13
結果>>605の俺に間違い無し。>>628ご報告お疲れ様。有難う御座います。
630デフォルトの名無しさん:2006/03/28(火) 14:16:47
>>629
「まで」があるのでちょっと違うな。
631デフォルトの名無しさん:2006/03/28(火) 14:22:11
>>629
規格で保証されている範囲を言ってるつもりなら
お前も >>626
632デフォルトの名無しさん:2006/03/28(火) 14:25:17
曖昧な表現はもう大嫌いだァァァァァ!!!!!256ですね。
633デフォルトの名無しさん:2006/03/28(火) 14:27:22
C言語はあいまいな言語なので日本人に向いている。
634デフォルトの名無しさん:2006/03/28(火) 14:29:13
そんなことは聞いて無い
635デフォルトの名無しさん:2006/03/28(火) 14:33:43
#include <stdio.h>
int main () {
printf("こんにちは”¥n);
}
/これって、コンパイルできますか?/
636デフォルトの名無しさん:2006/03/28(火) 14:34:15
できません
637デフォルトの名無しさん:2006/03/28(火) 14:35:38
>>635
System.out.println("試してみたらどうよ??");
638デフォルトの名無しさん:2006/03/28(火) 14:38:30
戻り値と微妙にオサレな全角文字改行位置
639デフォルトの名無しさん:2006/03/28(火) 14:42:19
\ を¥と書くのはやはり PC-9801 の罪だよなあ。
Linux だとちゃんと \ で出るが。
640デフォルトの名無しさん:2006/03/28(火) 14:45:53
フォント変えろw
OS関係ねー
641デフォルトの名無しさん:2006/03/28(火) 15:20:16
>>639
それはJIS X 0201の罪だ。
PC-9801はJIS X 0201に従っただけに過ぎない。
642デフォルトの名無しさん:2006/03/28(火) 15:26:36
>>637
ここはCのスレです。
Javaは回線切って首吊って氏ね
643デフォルトの名無しさん:2006/03/28(火) 15:30:10
stdout.writeLine("どうしてそこまでJavaを毛嫌いするのか");
644デフォルトの名無しさん:2006/03/28(火) 15:37:02
>>643
俺は完全にバイナリ化できないから手を出しづらい
645デフォルトの名無しさん:2006/03/28(火) 15:54:44
JAVAを使うメッリットは全く無い
646デフォルトの名無しさん:2006/03/28(火) 16:01:00
俺はC++のテンプレートが好きだからJavaには興味が無い。
647デフォルトの名無しさん:2006/03/28(火) 16:02:41
>>644
Javaはバイナリにはなる。ただ Java VM がないと動かないだけだ。
648デフォルトの名無しさん:2006/03/28(火) 16:04:19
これでどう?w
#include <stdio.h>
void printfunc(const char* str){printf(str);}
int main(void){
struct { struct { void (*println)(const char*); } out; } System;
System.out.println = printfunc;

System.out.println("試してみたら?");
return 0;}
649デフォルトの名無しさん:2006/03/28(火) 16:35:51
>>644
つ gcj
650デフォルトの名無しさん:2006/03/28(火) 16:38:07
>void printfunc(const char* str){printf(str);}
最低なprintf()の使い方だな。
651デフォルトの名無しさん:2006/03/28(火) 16:50:29
ホント無能ほど自己顕示欲強いのな
へんなホームページ作ったり、聞かれてもないのに
変なコード得意げに書いたり。
他人に教えるよりおとなしく勉強してればいいのに
つーかそのprintfuncは改行すらしてないな
きっとJavaも知らないんだろ
652デフォルトの名無しさん:2006/03/28(火) 16:58:55
>>651
スレタイを100回音読して巣に帰るといいよ
653デフォルトの名無しさん:2006/03/28(火) 17:08:21
>>651
改行するかしないかの問題ではないことに気が付かない君はバグメーカー。
654デフォルトの名無しさん:2006/03/28(火) 17:10:51
>>648
#define System.out.println(x) puts(x)
あ、'.' があったら駄目か?
655デフォルトの名無しさん:2006/03/28(火) 17:12:51
>改行「すら」
まぁ、こんなのいろんな入門書やらで言われてるし、
>>648も分かってて書いたんかもな
この手の関数は嫌になるねホント
安全を謳ったprintf_sってのもあるみたいだけど
656デフォルトの名無しさん:2006/03/28(火) 17:16:28
そもそも、JavaのSystem.out.printlnはCのprintfほど強力ではないからなぁ...
Tigerになってようやくprintfと同等の機能ができた。

Javaには拡張性がない。intが32bit固定って64bitOSが出てきたらどうするの?
JavaはWrite once all anywayなんて嘘。JVMが無ければガラクタだ。
Cではautomake/autoconfで達成できている。

Javaは所詮Cには永遠に敵わない。
657デフォルトの名無しさん:2006/03/28(火) 17:18:40
高級言語なんてそんなもんさ
658デフォルトの名無しさん:2006/03/28(火) 17:27:01
そのご自慢のprintfは深刻なセキュリティ問題ですがwwwww
FormatGuard: Automatic Protection From printf Format String Vulnerabilities
Libsafe 2.0: Detection of Format String Vulnerability Exploits
659デフォルトの名無しさん:2006/03/28(火) 17:38:17
>>651
これほど痛いのは久しぶりだ
660デフォルトの名無しさん:2006/03/28(火) 17:39:08
うはwwC厨敗走wwwwww
661デフォルトの名無しさん:2006/03/28(火) 17:40:31
>Javaには拡張性がない。intが32bit固定って64bitOSが出てきたらどうするの?
最近の64bit CPUのコンパイラのintは32bitなわけだが。
662デフォルトの名無しさん:2006/03/28(火) 17:41:42
うはwwC厨またしても敗走wwwwww
663デフォルトの名無しさん:2006/03/28(火) 17:48:44
setjmpを実装しようとしてるのだがなんかアドバイスない?
664デフォルトの名無しさん:2006/03/28(火) 17:56:27
GUI面倒って点意外でCは敗走してないと思う
665デフォルトの名無しさん:2006/03/28(火) 17:58:53
途中で変数宣言できないのは微妙にマンドクセ('A`)
666デフォルトの名無しさん:2006/03/28(火) 18:00:03
ローカルにブロック作って凌いでる・・・
667デフォルトの名無しさん:2006/03/28(火) 18:05:13
charは環境依存だというが、
俺の環境ではchar = 8bit でした。

・・・で、よくわからんのが、Javaだと char = 16bit なのはなぜ?
668デフォルトの名無しさん:2006/03/28(火) 18:11:11
苦しい回避手段使わずに、扱える文字の種類を256種類以上にするため。
669デフォルトの名無しさん:2006/03/28(火) 18:20:54
UTF-8では1文字で16bit以上使うこともあるけどな
670デフォルトの名無しさん:2006/03/28(火) 18:22:17
>>665
そこはC++としてコンパイルすればOK
671デフォルトの名無しさん:2006/03/28(火) 18:27:44
>>669
第一バイトで後に何バイト続くかわかるけどな・・・
672デフォルトの名無しさん:2006/03/28(火) 18:38:42
まあUTF8は3バイト使ってても16ビットの文字になおしちゃうんだし。
現行のunicodeだとね
673デフォルトの名無しさん:2006/03/28(火) 18:49:24
>>656
64bit OS が出ようが 128bit OS が出ようが Java の int は
32 ビット。long は 64 ビット。それの何がいけないんだ?

>>665
C99 は?

>>667
Java は Unicode の 1 文字を char 一つに入れようとして 16bit
になっているんだが、しかし Unicode の新しいバージョンでは
やはり16ビットでは足りないということになり32ビットのコードが
作られてしまい(サロゲート)、それだと char 2つ分ないと1文字を
表せないのであまり意味がなくなってしまった。

>>669
UTF-8 は Unicode のエンコーディングの一種なので Java の char
に入っている値とは違う。char は Unicode のコードそのまま。
UTF-8 はそれを変形して8ビット〜24ビット(サロゲートも入れたら
48ビット)に変形したものだ。
674デフォルトの名無しさん:2006/03/28(火) 18:53:52
どこに書けばいいのかわからないのでここに書かせていただきます。

私はC言語しか経験がありません。
あるソフトのログの中に、現在時刻としてJavaにおける System.currentTimeMillis() 関数の
返り血が出てくるのですが、これをCで解析するためにはどうすればいいでしょうか?

675デフォルトの名無しさん:2006/03/28(火) 18:57:54
返り血か、そりゃ大変だ。
676674:2006/03/28(火) 19:00:41
返り値ですorz

解析というか、
2006/03/28(火) 18:57:54
みたいに可読文字列に直したいのです。
677デフォルトの名無しさん:2006/03/28(火) 19:10:57
currentTimeMillisメソッドは扱いにくいからDataオブジェクト使えば?
678デフォルトの名無しさん:2006/03/28(火) 19:11:57
>>674
Javaなんて知らないから適当だが、オンラインマニュアルによると
java.lang.System.currentTimeMillis()は協定世界時からの経過時間を返すらしいから
ctimeにでも渡してtm構造体から読み出せばいいだろ
679デフォルトの名無しさん:2006/03/28(火) 19:17:35
>>667
Javaのchar ≒ C/C++のwchar_tと思えばよい。
680674:2006/03/28(火) 19:22:55
すみません、きちんと検索してませんでした。
System.currentTimeMillis() の正体が見当つかなかったので・・・
お騒がせしました。
681デフォルトの名無しさん:2006/03/28(火) 20:14:32
1bitの情報を複数保持したいんだけど、それに適した型は無いの?
682デフォルトの名無しさん:2006/03/28(火) 20:18:01
>>681
ビットフィールド
683デフォルトの名無しさん:2006/03/28(火) 20:20:01
移植性に欠ける
684デフォルトの名無しさん:2006/03/28(火) 20:21:08
>>682
おおありがとう!
危うくu-charに無理やり8個のビットを詰め込むところだったよ。
考えただけで寒気がする。
685デフォルトの名無しさん:2006/03/28(火) 20:22:24
682のでもいいしunsigned char/intに自前で詰め込んでもいい。
ただそれ以上うまいことやってくれるbitsetのような型はない。
686デフォルトの名無しさん:2006/03/28(火) 20:32:15
変数に代入される最大値、最小値を制御するのに自作の関数を使ってますが、もしかしたらビットフィールドみたいにこれも巧い事できませんか?
687デフォルトの名無しさん:2006/03/28(火) 22:25:13
#include<stdio.h>
int main(void){
FILE *fp;
fp = fopen("Sample.txt","w");
fprintf(fp,"パソコンがぶっ壊れた\n");
fclose(fp);
return 0;
}
688デフォルトの名無しさん:2006/03/28(火) 23:53:10
>>685
> うまいことやってくれるbitset
i/o 叩けないし...
689デフォルトの名無しさん:2006/03/28(火) 23:54:47
>危うくu-charに無理やり8個のビットを詰め込むところだったよ。
>考えただけで寒気がする。
お前Cは向いてないよ
690デフォルトの名無しさん:2006/03/29(水) 04:31:32
fopenの第一引数にはファイル名が、第二引数にはオープンモードが来ますが、第一引数に存在しないファイル名を書くとそのファイルが新しく作られるんでしょうか?
691デフォルトの名無しさん:2006/03/29(水) 04:54:32
>>690
オープンモードによる
wなら作成されるし、rならNULLが返る
aや+が付いたときは知らん

つーかこれぐらい数行のコード書けば分かるだろうが
692デフォルトの名無しさん:2006/03/29(水) 04:54:40
第二引数による
693デフォルトの名無しさん:2006/03/29(水) 12:04:30
うろ覚えのCからC++やって、基礎がなってないとCに戻ってきたり。

僕は駄目な奴です><
694デフォルトの名無しさん:2006/03/29(水) 12:12:14
初心者の俺から初心者のお前へ

>>690
モード
ttp://www9.plala.or.jp/sgwr-t/c/sec17.html
695デフォルトの名無しさん:2006/03/29(水) 12:26:05
>>683移植性は問題ない。
696デフォルトの名無しさん:2006/03/29(水) 12:51:13
char s[10]="123456789\0";
char *cp = s;

両者の違いってなんですか?
s++できない事くらい?
697デフォルトの名無しさん:2006/03/29(水) 12:55:42
>728 名前:C言語使い [sage] 投稿日:2006/03/29(水) 12:18:45
> StackTraceってエラーの詳細文字列ですか?(ググったんですけどよく分かりませんでした。

http://0xcc.net/blog/archives/000067.html
> こういうのよりtry catch書く分面倒な気がするのですが、そこんとこどうなんですか?
> try catchそんなに便利ならC言語からJavaに乗り換えようと思うのですが。

>730 名前:C言語使い [sage] 投稿日:2006/03/29(水) 12:31:59
> 部品ですね。正直OO理論はお腹いっぱいです。

> つっこみないみたいなので、trycatch便利じゃないんですね、残念。
698デフォルトの名無しさん:2006/03/29(水) 13:06:34
>>697
どこそれ?
699デフォルトの名無しさん:2006/03/29(水) 15:19:37
初心者な質問ですが…

input:
scanf("%d",&num);

if((snum >= 0) && (snum <= MAXnum)){syori1; プログラム終了;}
printf("error");
goto input:

といった感じで、指定範囲外の数字または文字や記号が入ったら再入力させたいのですが。
数値以外を入れると無限でエラー文が出力されてしまうのですが…なにか対処法はないのでしょうか??
700デフォルトの名無しさん:2006/03/29(水) 15:22:18
まずさ、numにscanfで数値入れているのに、
何でifの判定がsnumなんだ?
701デフォルトの名無しさん:2006/03/29(水) 15:32:57
>>699
うんざりしているscanfネタと前方に飛ぶgoto文とかなかなか良い釣りだな。
個人的にはif( 0 <= snum <= MAXnum)の方がネタとしては高評価だけどな
702デフォルトの名無しさん:2006/03/29(水) 15:59:37
>>699
scanf は %d で指定して数字が入らないとバッファを消さずに
返ってくるから、scanf()の戻り値で判定して自分でバッファクリアして
仕切りなおし。英字入れたらnumに何が入ると思うんだ?

まあプログラムを動かしてみる、という最初の段階を超えたらscanfは捨てなさい。
703デフォルトの名無しさん:2006/03/29(水) 16:15:47
質問です

可変長引数の関数(void var_arg_func(int n, ...))をつくって、
    var_arg_func(99, "call", "with", "five", "arguments");
と呼び出して、関数内で
    va_list ap;
    char *s
    va_start(ap, n)
    while( s = va_arg(ap, char*))
        puts(s);
    va_end(ap);
というふうにして引数を表示させると、動作はするんですが
最後にBus Errorが出ました。
    var_arg_func(44, "arg2", "arg3", NULL);
と呼び出せばうまくいくんですが、あんまり気持ちよくないです。
呼び出し側から、引数にそのときの引数の数を入れるのもあまり
スマートじゃない感じがします。
こういうとき、関数の中から実際に渡された引数の数を知る方法
はありますか?
それか、うまく終了判定する方法はありますか?
704デフォルトの名無しさん:2006/03/29(水) 16:24:03
>>703
C-FAQ 15.8を読め
おとなしく最後にNULLを入れておくか、移植性のない方法でもググレ
705デフォルトの名無しさん:2006/03/29(水) 16:50:13
ありがとございます。
結局、番兵をたてるのが標準的なんですかね…
とりあえず、忘れずにおとなしくNULL入れときます。
706デフォルトの名無しさん:2006/03/29(水) 17:20:12
FAQってやらしくないですか?
707690:2006/03/29(水) 17:43:18
>>691>>692>>694
ありがとうございます。
もう1つ質問なんですが、
wfp = fopen("test.c","wb");
if(!wfp){
printf("エラー\n");
exit(1);

これでエラーが出る場合ってどういうときでしょう?
708デフォルトの名無しさん:2006/03/29(水) 17:46:25
>>707
いろいろ
例えば書き込み権限が無かったりするとエラーになる。
709デフォルトの名無しさん:2006/03/29(水) 17:47:54
>>707
カレントディレクトリに書き込み許可が無い場合
710690:2006/03/29(水) 17:51:47
ああなるほど。
どうもありがとうございました
711デフォルトの名無しさん:2006/03/29(水) 18:05:45
perrorとか使えば、もう少しマシなエラー出力になるけど。
712デフォルトの名無しさん:2006/03/29(水) 18:56:55
Cでは無理かもですが、APIでハンドル等まったくわからないプログラムのハンドル取得するような関数はあるのでしょうか?
713デフォルトの名無しさん:2006/03/29(水) 19:13:36
>>712
標準Cの範囲では無理だからスレ違いになるが
Windowsに限って言えば、Win32APIのFindWindow()がそれに該当するだろ
714デフォルトの名無しさん:2006/03/29(水) 20:15:43
static int cnNum[4][256][256];
static int spcAX[256] , spcAY[256];
case WM_LBUTTONDOWN:
{
:
else {cnNum[4][0][0]=5;}
}
break;
なんかcnNumに代入しているのにspcAXに入っちゃうんですが、
考えられる原因を教えてください。お願いします。
715デフォルトの名無しさん:2006/03/29(水) 20:21:37
cnNum[4] は範囲オーバーで、偶然それが spcAX の場所と一致してる。
716デフォルトの名無しさん:2006/03/29(水) 20:23:18
>>714
cnNum[x][y][z]のxの取り得る範囲ってどこだと思う?
717714:2006/03/29(水) 20:32:58


>>715-716
ありがとうございます。ちょwww恥ずかしすぎwwww
718デフォルトの名無しさん:2006/03/29(水) 20:35:54
>>717
ヽ(゚Д゚ )気にするな
俺も最初はたまにやったミスだ
719デフォルトの名無しさん:2006/03/29(水) 20:38:12
恥ずかしいのはCの言語仕様だな。
普通インデックスはみ出たら例外投げるのが常識だろう。
720デフォルトの名無しさん:2006/03/29(水) 20:41:13
>>719
それやると遅くなる
ついでにコンパイラ実装者が面倒臭くなる
721デフォルトの名無しさん:2006/03/29(水) 20:47:57
>>719
アセンブラの上位言語として生まれた経緯を考えれw
722デフォルトの名無しさん:2006/03/29(水) 20:53:17
ふ〜ん。で、例外ってなに?
723デフォルトの名無しさん:2006/03/29(水) 20:53:45
はい?
724デフォルトの名無しさん:2006/03/29(水) 21:09:42
C言語にJavaにあるような「例外」という処理構文は無い。
725デフォルトの名無しさん:2006/03/29(水) 21:12:58
signalとsetjmp使うことでC++のtry〜catchのような例外処理っぽいのを作ることはできるけどな
726651:2006/03/29(水) 21:15:26
死ねてめーら死ね屑
727デフォルトの名無しさん:2006/03/29(水) 21:16:53
ほっといても死ぬからほっとけ
728デフォルトの名無しさん:2006/03/29(水) 21:30:29
こんな事を言うのは個人攻撃みたいで気が引けるけど
C作った奴は無能だな。
729デフォルトの名無しさん:2006/03/29(水) 21:33:07
理由すら語らないようではただの愚痴だな
730デフォルトの名無しさん:2006/03/29(水) 21:43:46
アセンブリ離れって怖いですね
731デフォルトの名無しさん:2006/03/30(木) 00:25:41
インデックスの自己管理もできない奴はプログラムやる資格ないよ
732デフォルトの名無しさん:2006/03/30(木) 01:06:56
>>719
C言語の設計思想は

できるだけ軽く、例外処理は自己責任

だろ
733デフォルトの名無しさん:2006/03/30(木) 01:47:01
JVMを自分で作ることも出来ないのにJavaプログラマを名乗る
恥ずかしい人が紛れ込んでいますね
734デフォルトの名無しさん:2006/03/30(木) 02:27:04
#include <stdio.h>

main(){
char i;
i = 4;
printf("%d",i);
return 0;
}

char型なのに%dで出力できるのはなぜですか?
735デフォルトの名無しさん:2006/03/30(木) 02:29:14
intに拡張されるから。
736デフォルトの名無しさん:2006/03/30(木) 02:32:26
>>734
それで出力できるのは偶然
変なゴミが出力されても文句は言えない
737デフォルトの名無しさん:2006/03/30(木) 02:32:54
>>734
charは8ビット整数だから
printf関数にわたるときにchar iはinteger iに符号拡張される
738737:2006/03/30(木) 02:34:53
符号拡張は自信がないorz
739デフォルトの名無しさん:2006/03/30(木) 02:40:00
printf("%d", (int)i);
と書けば確実になる
740デフォルトの名無しさん:2006/03/30(木) 02:42:44
引数が不定なんだから、関数呼び出し時に符合拡張なんてされませんよ
741デフォルトの名無しさん:2006/03/30(木) 03:00:22
C89(と多分C99)では可変長引数の引数は、intより小さい整数型はintに
floatはdoubleに変換されて渡されるんじゃなかったっけ?
742デフォルトの名無しさん:2006/03/30(木) 03:09:26
┌───────┐
│この板は今日か│
│らSPALMの板に │
│なりました。 │
│SPALM以外の話 │
│をすると仲間が│
│殺しに行きます│
└──┐ ┌──┘
│ │
└─┘
743デフォルトの名無しさん:2006/03/30(木) 03:14:44
看板腐ってるな
744デフォルトの名無しさん:2006/03/30(木) 03:27:04
>>741
unsigned char, unsigned short は unsigned int に、
signed char, signed short は signed int に、
float は double に、それぞれ拡張される。

で、ポインタは一切の変換なしに渡されるんだっけ?
745デフォルトの名無しさん:2006/03/30(木) 08:26:18
>>740
規定実引数拡張
746デフォルトの名無しさん:2006/03/30(木) 11:10:23
>>733
車を作れないレーサーとか
マイクやカメラを作れないアナウンサーとか
ピアノを作れないピアニストとか
747デフォルトの名無しさん:2006/03/30(木) 11:13:14
鉛筆なら自分で削るよ!
748デフォルトの名無しさん:2006/03/30(木) 11:23:03
ちんこなら自分でシコるよ!
749デフォルトの名無しさん:2006/03/30(木) 11:25:47
>>748
いやそれは虚しい。
750デフォルトの名無しさん:2006/03/30(木) 11:27:07
アナルなら自分で掘るよ!
751デフォルトの名無しさん:2006/03/30(木) 11:47:33
>>734,>>736
C-FAQの15.2嫁。
752デフォルトの名無しさん:2006/03/30(木) 12:00:07
糞プログラマー共死ね
俺が神だ
753デフォルトの名無しさん:2006/03/30(木) 12:54:59
malloc()とfree()ってまだあんまし使った事ないんですけど、具体的にどういうときに使うものなんでしょうか?
あるいは使ってますか??
754デフォルトの名無しさん:2006/03/30(木) 12:57:16
>>753
必要なときに使う。
755デフォルトの名無しさん:2006/03/30(木) 12:58:34
別に嫌なら使わなくてもいいよ
756デフォルトの名無しさん:2006/03/30(木) 13:10:36

んじゃGlobalAllocでいいわ
757デフォルトの名無しさん:2006/03/30(木) 13:18:48
>>753
ヒント:ネットワーク
758デフォルトの名無しさん:2006/03/30(木) 13:19:49
さよなら^^ノ フリフリ
759デフォルトの名無しさん:2006/03/30(木) 13:22:07
>>753
動的にメモリを確保したいときに使う。
mallocしてしっかりfreeしないと、メモリリークが激しいよ。うん。激しいよ。
760デフォルトの名無しさん:2006/03/30(木) 13:23:41
あ・・・っ!激し・・すぎ・・!
761デフォルトの名無しさん:2006/03/30(木) 13:48:41
オンラインじゃなきゃメモリリークなんていいよ。
762デフォルトの名無しさん:2006/03/30(木) 13:52:20
>>753
まずはどんなに入力行が長くてもまるまる一行分受け取れる
char *gets_ex(void);
を書いてみろ。
763デフォルトの名無しさん:2006/03/30(木) 14:01:28
>>762
ポインタを使った文字配列へ使っていこうと思います。
トンクス子でした。
764デフォルトの名無しさん:2006/03/30(木) 14:03:24
配列への値の受け渡しにポインタを使ったallocでいこうと思います
トンクス子でした。
765761:2006/03/30(木) 14:04:11
ダウンロードしたファイル名最後に .. のついたファイルを
ダウンロードして、ローカルで解凍するとファイルは
出来るのですが、開こうとすると”見つかりません”と出ます。

また、削除しようとすると”ファイルを削除できません。
送り側のファイルまたはディスクから読み取れません”と出ます。
コマンドプロンプトで消そうと努力もしたのですが消えません。
色々な削除ソフトも利用したのですが消えません。

どなたか知識の高い方、削除の仕方を教えてください。
766デフォルトの名無しさん:2006/03/30(木) 14:05:45
オンラインじゃなきゃゴミファイルが残ったっていいよ
767699:2006/03/30(木) 14:08:29
あ、すいません。scanfもsnumです。
768デフォルトの名無しさん:2006/03/30(木) 14:10:48
>>767
>>699

ない。
769デフォルトの名無しさん:2006/03/30(木) 14:14:57
   int n;
   char buf[256];
   for(;;)
   {
       if(scanf("%d", &n) == 1)
       {
           if(0 <= n && n < 10)
               break;
       }
       else
           gets(buf);
   }
   printf("n=%d\n", n);
   gets(buf);
770デフォルトの名無しさん:2006/03/30(木) 14:16:34
C/C++の宿題を片付けます 63代目
http://pc8.2ch.net/test/read.cgi/tech/1143405137/
771デフォルトの名無しさん:2006/03/30(木) 16:51:51
>>769
そこでgetsはないだろ。
772デフォルトの名無しさん:2006/03/30(木) 16:56:57
パイプってぶっちゃげ何ですか?
773デフォルトの名無しさん:2006/03/30(木) 16:57:01
>>769
scanfの戻り値チェックとかはちゃんとやってるのに
よりにもよってgetsかよw
774デフォルトの名無しさん:2006/03/30(木) 17:12:28
C言語で何が出来ますか?
775デフォルトの名無しさん:2006/03/30(木) 17:18:47
セックルを促す関数を作成できます
776デフォルトの名無しさん:2006/03/30(木) 19:05:32
>>772
ぶっちゃげ の検索結果のうち 日本語のページ 約 45,300 件中 1 - 20 件目 (0.20 秒)
777デフォルトの名無しさん:2006/03/30(木) 19:07:36
バイブってぶっちゃげ何ですか?
778デフォルトの名無しさん:2006/03/30(木) 19:22:44
女性用の性具。陰茎をかたどったもので、振動させて刺激を与える。
779デフォルトの名無しさん:2006/03/30(木) 20:09:05
ベイブってぶっちゃげ何ですか?
780デフォルトの名無しさん:2006/03/30(木) 20:16:50
鏡に映ってるアレ
781デフォルトの名無しさん:2006/03/30(木) 20:51:21
近藤智子と二階堂ゆかり
782デフォルトの名無しさん:2006/03/30(木) 23:33:19
>>772
パイプ=pipe
データを通す管のことだよ
783デフォルトの名無しさん:2006/03/30(木) 23:40:47
scanf関数を使い%d入力を行うと、数字以外を入力した場合大変な事になってしまうのですが
scanf関数は素人しか使わないと聞きました
玄人または一般的な開発者はscanf関数の代わりにどういったものを使ってるんでしょうか?
784デフォルトの名無しさん:2006/03/30(木) 23:43:05
785デフォルトの名無しさん:2006/03/30(木) 23:43:37
scanfを毛嫌いするのは脱初心者直後の半端者だけ。
786デフォルトの名無しさん:2006/03/30(木) 23:46:37
そうなんですか・・
fgets(buf,10,stdin);等の記述を見つけたのでこちらの方が言いのかなと思ってたんですが
このままscanf使っていきたいと思います・・
ありがとうございました。
787デフォルトの名無しさん:2006/03/30(木) 23:49:16
>>786
1を読んだのか?
788デフォルトの名無しさん:2006/03/30(木) 23:50:04
>>1のどれですか
789デフォルトの名無しさん:2006/03/30(木) 23:51:17
F&Qですね、どうも。
790デフォルトの名無しさん:2006/03/30(木) 23:51:49
はいはいゆとり教育ゆとり教育
791デフォルトの名無しさん:2006/03/30(木) 23:54:05
でも、>1を見ても
> 玄人または一般的な開発者はscanf関数の代わりにどういったものを使ってるんでしょうか?
は、分からないけどな
792デフォルトの名無しさん:2006/03/30(木) 23:55:11
ゴミレス書いて無駄にレスを増やして暇を潰してるだけですから。
793デフォルトの名無しさん:2006/03/30(木) 23:55:18
>>791
低脳はひっこんでてください。
794デフォルトの名無しさん:2006/03/31(金) 00:23:43
>>733
そらそうだろ低脳集団だもん
795デフォルトの名無しさん:2006/03/31(金) 00:49:36
fgetsしてsscanfかな
796デフォルトの名無しさん:2006/03/31(金) 00:54:38
#include <stdio.h>

main(){
printf("%d\n",'a');
return 0;
}

#include <stdio.h>

main(){
char a;
printf("%d\n",a);
return 0;
}
の違いは何でしょうか?結果が97と1になりましたが…
797デフォルトの名無しさん:2006/03/31(金) 00:57:03
>>796
定数と変数の違い

もしかして釣り?
798デフォルトの名無しさん:2006/03/31(金) 00:58:28
>>796
main(){
char a = 'a';
printf("%d\n",a);
return 0;
}

だとどうなりますか?
799デフォルトの名無しさん:2006/03/31(金) 01:46:50
無限ループしてる中で、毎回時間を確認し、
前回チェック時間(例23:59)< 0時 <現在時刻(例0:01)
の条件の時、別関数を呼ぶ
という風にしたいんですが、どうすれば良いでしょうか?

24時間足すという事も考えたのですが、時間を戻される可能性もあるため、
前回チェック時間(22:00) 今回チェック時間(19:00)
の状態になった時、関数を呼ぶようにはしたくないんですが・・。
800デフォルトの名無しさん:2006/03/31(金) 01:52:01
時間は戻りません。
801デフォルトの名無しさん:2006/03/31(金) 01:52:32
日付もチェックしたら?
802デフォルトの名無しさん:2006/03/31(金) 01:56:26
>>799
localtimeを使えば
localtimeで返されるtm構造体の年月日を、前回のものと現在のもので比較
日が変わったら「別関数をよぶ」

ただ、「時間を戻される可能性もある」がやっかい
803デフォルトの名無しさん:2006/03/31(金) 02:01:06
>>802
なにがやっかいなんですか?
804デフォルトの名無しさん:2006/03/31(金) 02:08:30
>>799の「時間が戻される」件なんだけど
コンピュータの時計が変更される可能性があると解釈したんだけど
考えすぎか!?
805デフォルトの名無しさん:2006/03/31(金) 02:11:51
>>804
変更される事の何がやっかいなんですか?
理由が思いつかないんですが
806デフォルトの名無しさん:2006/03/31(金) 02:24:54
>>805
それは、プログラムの仕様による。

たとえば、コンピュータの時計が0時05分のときに時計を10分後ろに
戻したとする。すると「別関数を呼ぶ」という処理(おそらく日替わりの処理)
が10分の間に2回発生する。それでよければ別に問題はない。
だけど、それでは困るという場合。それが厄介。
プログラムで時間経過を管理しなければならない。
807デフォルトの名無しさん:2006/03/31(金) 02:33:52
>>804
ほぼその通りの意味です。
しかも、現状だとすべて秒に直した値を比較しているので、
日にちの概念が無いんです。
>>806
2回発生させたくないので困っております。
808デフォルトの名無しさん:2006/03/31(金) 02:44:15
どんな環境でソフト作ってるかしらねーけど、
そんなにイヤなら10秒くらいごとにタイマーしかけておいて、10秒+-誤差の範囲を
はずれた場合は爆破でもすればいいんじゃね?
そもそも、同じ時間になっても2回発生はしないだろう。
0:05から2分おきに別関数呼ぶとして、
次に呼ぶのは0:07で、時計と照合するのはこの時間。
0:05直後に10分戻されるとしても関数が呼ばれるのは0:07じゃねえの?どこが2回?
酒が入ってる俺がおかしいわけ?そうですか。寝る。
809デフォルトの名無しさん:2006/03/31(金) 06:26:57
「時間を戻す」なんて相当イレギュラな操作のはずなんだから、
そんなことを考慮する暇があったらその他の部分に力を入れたほうがいいとおも。

ところで「時間を進める」ほうは考慮しなくていいの? もしそうなら
月日もあわせてチェックするだけでいいんだけど。
810デフォルトの名無しさん:2006/03/31(金) 06:46:13
案外ntpdateをcronで走らせている鯖はある。
811デフォルトの名無しさん:2006/03/31(金) 07:00:32
> 現状だとすべて秒に直した値を比較しているので、

> 日にちの概念が無いんです。
の関係が分からん。
いつからの経過時間の秒に直してるんだ? 00:00からのとは言わんよな?
812デフォルトの名無しさん:2006/03/31(金) 07:08:47
時刻変更について
2006/03/31 23:30:00 → 2006/04/01 00:30:00 のとき起動する。
2006/03/31 23:30:00 → 2006/03/31 00:30:00 のとき起動しない。
じゃあ
2006/03/31 23:30:00 → 2006/04/01 23:40:00 のときは?
2006/03/31 23:30:00 → 2006/04/10 23:40:00 のときは?

813デフォルトの名無しさん:2006/03/31(金) 07:22:08
>806
時間経過の管理ったって、最終起動時刻を記録して、それと比較して
20h以上経ってなかったら無視して起動しない、とかでいいんじゃね?
814デフォルトの名無しさん:2006/03/31(金) 10:09:04
>>810 そう、そーいう意味の無いことしてる鯖かなりいるんだよね
素直に ntpd 使えばいいのに
>>813 その20h以上経過をどうやって知るんだ?時計が変わってるのに
815デフォルトの名無しさん:2006/03/31(金) 10:41:30
日付を確認すれば済む話じゃないのか
816デフォルトの名無しさん:2006/03/31(金) 11:30:34
作ったコンソールアプリケーションを実行した時に、実行終了時に勝手に窓を閉じないようにする為にはソースというかプログラム側でそれを制御する場合どうしたらいいんでしょうか?
つまりbatでpauseなどを使わないでプログラムそのものからキー入力かなにか操作しない限り窓を閉じないようにすると言う事です。
817デフォルトの名無しさん:2006/03/31(金) 11:49:40
getchar(), getch()
818デフォルトの名無しさん:2006/03/31(金) 11:50:32
単に入力待ちにすればよいだけでは
819デフォルトの名無しさん:2006/03/31(金) 11:51:00
getcharはマクロです
820デフォルトの名無しさん:2006/03/31(金) 11:52:13
char c; gets(&c);
821デフォルトの名無しさん:2006/03/31(金) 11:53:09
>>785
実際は、学生の宿題のコードでくらいしかみないね。 scanf()
822デフォルトの名無しさん:2006/03/31(金) 11:54:27
>>816
mainの最後の行にブレークポイントをつけておくとか。
823デフォルトの名無しさん:2006/03/31(金) 11:56:13
レスありがとです
getcharは使ってませんがgetchは使ったことがありますけど・・マクロってのは何か問題があるんですか?
824デフォルトの名無しさん:2006/03/31(金) 11:56:34
Hit any key to exit...
825デフォルトの名無しさん:2006/03/31(金) 11:58:31
>>821
そうでもない。
826デフォルトの名無しさん:2006/03/31(金) 11:59:34
scanfはgets+atoiで解決
827デフォルトの名無しさん:2006/03/31(金) 12:01:22
>>816
コマンドプロンプトのショートカットのプロパティで終わらない設定をするとか。
最後に getchar() やってもいいけど。
828デフォルトの名無しさん:2006/03/31(金) 12:01:27
VC6のころは、リリースビルドだと、プログラム終了後は自動でキー入力待ちになって、
コンソールが閉じなかったんだけど。

なんでリリースビルドだけだったか、なぜ、なくなったかは謎。
829デフォルトの名無しさん:2006/03/31(金) 12:01:49
だから scanf っつったってどう使うかによるでしょ。

ユーザから生の入力受けるところに使うのは馬鹿だけど
ほかのプログラムの結果をリダイレクトで受ける部分で使うとかなら
そのほうが余程簡潔にすむ。
830デフォルトの名無しさん:2006/03/31(金) 12:03:52
>ユーザから生の入力受けるところに使うのは馬鹿だけど
scanfの使い方をわかっていないバカ。

>ほかのプログラムの結果をリダイレクトで受ける部分で使うとかなら
ユーザーの入力は不正確でリダイレクトなら正確な出力が受け取れると思っているバカ
831デフォルトの名無しさん:2006/03/31(金) 12:03:54
>>825
scanf() は使い辛いよ。ちょっと間違えただけでバッファオーバーラン
するかも知れないし。使ったとしても fgets() 後に sscanf() かなあ。
数値の連続を読むだけなら scanf() や fscanf() でもいいんだけどね。
文字列が混ざるとねえ。
832デフォルトの名無しさん:2006/03/31(金) 12:06:03
scanf()は、変なクセを覚えても、ほかに応用利くってもんでもないしね。
fgets()とかで一行入力、sscanf()で変換とかをおぼえればそれで十分。
833デフォルトの名無しさん:2006/03/31(金) 12:08:45
ほとんどのテキストに出力=printf、入力=scanfってあるから実際経験者に聞いたりソース参考に見せてもらわないと気づかない・・
834デフォルトの名無しさん:2006/03/31(金) 12:11:19
fgets + sscanf と scanf の間にそれほど大きな差はない
835デフォルトの名無しさん:2006/03/31(金) 12:21:01
>>834
scanf()は、エラーの時は、入力バッファを読み飛ばせばいいってこと?
それだと、正常のときとエラーの時の挙動が違ってしまうし、
そういう細かいことを気にしないでいい、一行入力+sscanf()のほうがいい。
836デフォルトの名無しさん:2006/03/31(金) 12:25:48
適当なツールを作るときには便利だろ > scanf
a.out < hoge
で一々fopenしてfscanfしてfcloseしなくていい

エラーチェック?perlで作れ?何のことです?
837デフォルトの名無しさん:2006/03/31(金) 12:39:34
夜神月が降臨しますた。
838デフォルトの名無しさん:2006/03/31(金) 12:41:32
マクロだと何か不都合があるんですか?(>819)
839819:2006/03/31(金) 12:44:48
>>838
putcharもマクロです
840デフォルトの名無しさん:2006/03/31(金) 12:50:01
>>836
リダイレクトの時に fopen(), fclose() が不要な
件については scanf() とは全く関係のない話だ。
841デフォルトの名無しさん:2006/03/31(金) 12:50:20
defineもマクロですよね
調べてみたら文字を置き換えるとあるんですがputchar,getcharも何かに置き換えるってことですか?
842デフォルトの名無しさん:2006/03/31(金) 13:53:53
>>841
putcharなどはマクロとして実装されている(可能性がある)ということ。
効率を問題視する場合なら兎も角、通常気にすることもない。

>>836
つ[fscanf(stdin, "%d", & val);]
843デフォルトの名無しさん:2006/03/31(金) 13:55:23
#define はプリプロセスディレクティブです。
844デフォルトの名無しさん:2006/03/31(金) 14:25:37
fgetsで万事OKとか言ってるアフォは
バッファを溢れさせた時の誤動作にほぼ100%対応していない。
845デフォルトの名無しさん:2006/03/31(金) 14:26:33
>>842
打鍵数が多すぎる。
君は一々printf(...)をfprintf(stdout, ...)と書くのかね?
846デフォルトの名無しさん:2006/03/31(金) 14:26:55
バッファ溢れはしないだろ。
847デフォルトの名無しさん:2006/03/31(金) 14:28:31
848デフォルトの名無しさん:2006/03/31(金) 14:51:20
fgets は、何も配慮しないと途中で切れる可能性はあるが
その場合でもバッファはあふれないでしょ
849デフォルトの名無しさん:2006/03/31(金) 14:54:57
>>845
見苦しい反論するくらいなら、マクロでも関数でも用意すればいいのでは?
実際、fgetc(stdin);はしばしば書きますがね。
850デフォルトの名無しさん:2006/03/31(金) 15:09:04
バッファ溢れするとか言ってるやつアホとしか思えんwwww
851デフォルトの名無しさん:2006/03/31(金) 15:09:56
>>848
溢れはしないが、行を完全に読み込んだかどうかはチェックしないと
次の読み込みで想定していない値が読み込まれる事は
容易に想像できるわけで。
それが >>844 の言う「誤動作」だろう。
「ほぼ100%」がどこの脳内統計かは知らんが。

>>849
反論ではなく、呆れているんだろう。
852デフォルトの名無しさん:2006/03/31(金) 15:14:48
fgets()の仕様を「バッファの溢れ」とは言わんわな。
853デフォルトの名無しさん:2006/03/31(金) 15:18:08
ファイル操作ぐらいC++使えよと
854デフォルトの名無しさん:2006/03/31(金) 15:22:40
何が何でも1行読み込みを保証したい場合は自作するか glibc の getline() でも使え。
855デフォルトの名無しさん:2006/03/31(金) 15:31:31
>>850
どうせなら対策してるに決まってるだろアホといってやれよ。
856デフォルトの名無しさん:2006/03/31(金) 17:04:13
安易にfgets使うコードはgetsと同じくらいバグバグということか。
857デフォルトの名無しさん:2006/03/31(金) 17:09:37
小学生の時、母親に「セックスってなに?」と聞いたところ
母親は「男の人と女の人が仲直りするおまじないよ」と答えた。
その日の夜、両親がケンカした。俺は
「ケンカやめてセックスしなよ、セックスセックス!」と止めに入ったら
父親からボコられた。
858デフォルトの名無しさん:2006/03/31(金) 17:16:16
C言語で出来ること教えてください。

・ソフト作成

他にありますか?
859819:2006/03/31(金) 17:23:18
Win32APIを始めようと、サイトを見ながら導入しようとしました。コンパイラはBorland C++ Compiler 5.5で、
サイトに書いてある通り、bcc32 -W test.c としてコンパイルしても

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 9: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 9: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)

このようなエラーが出てコンパイルができません。何か問題がある場所を指摘して頂けないでしょうか?お願いします。
860デフォルトの名無しさん:2006/03/31(金) 17:24:55
すいません。C言語ではありませんでした。申し訳ないです。
861デフォルトの名無しさん:2006/03/31(金) 17:37:43
>>856
同じくらいってことはないよ。
862デフォルトの名無しさん:2006/03/31(金) 18:05:17
で、scanf()の使用はセキュリュティ的に良くないってことでいいの?
863デフォルトの名無しさん:2006/03/31(金) 18:11:10
>>862
注意深く使えば問題は回避可能なんだが、あまりおすすめしたくない関数だ。
864デフォルトの名無しさん:2006/03/31(金) 18:12:14
>>858
C言語で動く工業用ロボットを作った場合ハードウェアの作成も可能になります。
865デフォルトの名無しさん:2006/03/31(金) 18:14:02
そこでscanf_sですよ
866デフォルトの名無しさん:2006/03/31(金) 18:24:40
ファイルサイズを調べたいのですが、
いちいちfileopenしなきゃいけないのでしょうか><?
867デフォルトの名無しさん:2006/03/31(金) 18:38:02
移植性が無い方法だとfopenしなくて良いが、
移植性がある方法だとfopenするしかないな
868デフォルトの名無しさん:2006/03/31(金) 18:39:43
>>863
つかいこなせばscanfもいいって言うヤツがいるけど、
同様のことがもっと楽にできるのに、そんなことをする
必要があるのかって感じ。
scanfの仕様に精通したって、なんか応用きくわけでもないし。
869デフォルトの名無しさん:2006/03/31(金) 18:47:02
>>867
移植性のある方法って?
870デフォルトの名無しさん:2006/03/31(金) 18:47:01
>>866
ファイルサイズという概念自体が曖昧なので、環境依存しない方法では厳密には無理。
#よくあるfseek(SEEK_END)+ftell()も必ずしもサイズが得られる保証はないし。
871デフォルトの名無しさん:2006/03/31(金) 18:48:34
"rb"モードでfopenしてEOFまでfgetcをする方法
872デフォルトの名無しさん:2006/03/31(金) 18:49:29
>>866
システムコールなりWin32API呼べ。
873デフォルトの名無しさん:2006/03/31(金) 19:03:56
>>871
じゃ、移植性のない方法を使ったほうがいいな。
874デフォルトの名無しさん:2006/03/31(金) 19:09:35
カウンターをインクリメントさせて、
その値が指定した値以上になったときに
何らかの関数を実行するプログラムの
デバックを行っているのですが、
カウンターがオーバーフローした時の
対処法がよく分かりません。
yahooやgooleで「GetTickCount オーバフロー」などと
検索したのですが、符号なしなら差をとる以外、効果的な
対処法が見つかりませんでした。
カウンターをインクリメントしている時の対処法を教えて
ほしいです

なお、関数を呼び出しているときの処理の流れは以下のとおりです
(ほかの人が書いたソースなので、ソースを載せるのはできるだけ
 避けたいです。勝手に公開すると、後でいろいろと問題になりま
 すので)
---------------------------------------
1.ヒープから最も低い値(tick)取り出す
 ただし、0xF80000以上なら最大値を取り出す。
2.tickが指定したtick以上なら関数実行する。
 そうでないならループから抜ける
3.1に戻る
875デフォルトの名無しさん:2006/03/31(金) 19:17:26
カウンター値が減ったらオーバーフローしたとみなす。
ただしそのチェック間隔が十分長いと
カウンタ値: 1999999 <- ここでチェック
カウンタ値オーバーフロー
さらに進んで: 2000000 <- ここでチェック
となって見た目オーバーフローしてないように見えてしまう。



つうか別のAPI探すなりlong longでも使っとけ
876デフォルトの名無しさん:2006/03/31(金) 19:22:27
っていうか >>874 はぜんぜん話がみえんのだけど。
877デフォルトの名無しさん:2006/03/31(金) 19:25:28
説明がそのレベルってことは元コードを理解できてないんじゃないの?
デバッグというけど、オーバーフローがバグの原因だってのも嘘くさいな
878デフォルトの名無しさん:2006/03/31(金) 19:32:03
>>866
stat() は?
879デフォルトの名無しさん:2006/03/31(金) 19:39:32
誰かPGの人で業務で創作するようなプログラムのソースコードを差し支えなければうpしてくださる方いませんか?
それ同等のレベルのプログラムのソースコードでも構いません。
880デフォルトの名無しさん:2006/03/31(金) 19:42:13
>>879
業務で使われている、オープンソースのやつじゃだめなの?
881デフォルトの名無しさん:2006/03/31(金) 19:44:15
それでも構いません。
882デフォルトの名無しさん:2006/03/31(金) 19:52:30
じゃあ探せよ
883デフォルトの名無しさん:2006/03/31(金) 19:53:29
どこにおいてあるんですか?
884デフォルトの名無しさん:2006/03/31(金) 19:56:58
>>879
そんなものはずかしくて人に見せられません。
885デフォルトの名無しさん:2006/03/31(金) 19:58:23
答えはいつも君の心の中に
886デフォルトの名無しさん:2006/03/31(金) 20:04:07
ここの会社に置いてある物ではないんですか?>業務用オープンソース
それともvectorみたいにまとめてあるんでしょうか
グーグルで検索しても見つけられませんでした。
887デフォルトの名無しさん:2006/03/31(金) 20:07:09
>>875
確かに・・・
QueryPerfomanceCounterとかを使ったほうが楽そうですね。
少なくとも通常の稼働時間内ではオーバーフローすることはなさそうですし。
できることなら、それを使いたいのですが・・・
いつかはオーバフローするわけですし、できたら、その時の対処法を教えて
いただけるとありがたいです。

>>877
ソースコードが理解できてない・・・
そんなバカな・・・
といいたいのですが、なんかうまく説明できないので、読み直してきます。
888デフォルトの名無しさん:2006/03/31(金) 20:09:06
(887の続き)
>>875
>>877
わざわざ答えてくださりありがとうございました。
なんかうまく説明できないので、もう一度読み直してきます。
889デフォルトの名無しさん:2006/03/31(金) 20:13:42
>>879
どっかのエロゲーでライセンス引っかかって
おーぷんおやつがたたはず。
890デフォルトの名無しさん:2006/03/31(金) 20:14:40
フランス語でおk
891デフォルトの名無しさん:2006/03/31(金) 20:15:27
俺葉っぱ好きだよ
892デフォルトの名無しさん:2006/03/31(金) 20:16:25
はっぱろくじゅうし
893デフォルトの名無しさん:2006/03/31(金) 20:25:05
>>879
いいよ。一部でいいよね。
////////////////////////////////////////////////////////////////
/// \summary 日時文字列変換
/// \param date 対象時刻
/// \return 変換済み文字列
/// \warning 内部静的領域を返すので取扱いに注意
//
const char * strDate(time_t date)
{
static char buf[20];
struct tm * ptm = localtime(& date);
strftime(buf, sizeof(buf), "%Y/%m/%d %H:%M:%S", ptm);
return buf;
}

894デフォルトの名無しさん:2006/03/31(金) 20:29:11
>>893
横からでスマンがそれってDoxygen用のコメントだっけ?
895デフォルトの名無しさん:2006/03/31(金) 20:41:22
>>887
制度の問題じゃないんだったら、普通に時計を使えば?
896デフォルトの名無しさん:2006/03/31(金) 20:49:45
>>895
GetSystemTime()のことですか?
ちょっと今は試せる状況にないので、改めて質問し終えたら、
試してみます。
わざわざ、答えてくださりありがとうございます。
897デフォルトの名無しさん:2006/03/31(金) 20:52:32
>>879
★Quake2のソースで勉強するぞ!!★
http://pc8.2ch.net/test/read.cgi/gamedev/1010658288/
HalfLife2のソースコードをみんなで解析するスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1065328371/
GamDevPukiWiki - ToHeart2ほかAquaPlus/LeafのGPLゲーをいじるスレ
http://gamdev.org/w/?%5B%5BToHeart2%A4%DB%A4%ABAquaPlus%2FLeaf%A4%CEGPL%A5%B2%A1%BC%A4%F2%A4%A4%A4%B8%A4%EB%A5%B9%A5%EC%5D%5D
898デフォルトの名無しさん:2006/03/31(金) 21:03:24
899デフォルトの名無しさん:2006/03/31(金) 21:23:11
ソースコードを読み直してきました。
ほかの人が書いた、一定間隔ごとに任意の関数を実行するプログラムを調べていたのですが、
49.7日毎にタイマーがうまく動作しなくなることに気づきました。
そのバグの原因はGetTickCounter()の返り値がオーバーフローすることにあるというのは分かったのですが、
下手に差をとると、ほかの部分も変更しなくていけなくなってしまいます。
Googleなどでほかの方法を探そうとしたのですが、差をとる以外の方法は見つかりませんでした。
オーバーフローを検出したら、どういう風に処理したらいいか、
知っている人がいたら教えてほしいです。

なお、処理の流れは以下のとおりです。
(勝手に載せるとまずいので載せることはちょっと難しいです)

前処理
 tickにGetTickCount()の値 + 任意の間隔。funcに任意の関数へのポインター。
 intervalに任意の間隔を代入する
メインの処理
 1.GetTickCount()の値をnowに代入する
 2.now > tickなら、任意の関数を実行し、
   そうでなかったら、sleep()で一定時間待機した後、1へ戻る
 3.now と tick の差が1000ms以上なら、
   tickにnowとintervalの和を代入する。
   その差が1000msより少ないなら、tickにintervalを足す

ごめんなさい。ソースコードを読みなしたのですが、
いくら考えてもこういう風にしか説明ができませんでした。
分かりにくくて申し訳ないです。
900デフォルトの名無しさん:2006/03/31(金) 21:38:07
>>899
精度が問題になるような処理じゃなかったら、time()を使えば、2038年までは使える。
901デフォルトの名無しさん:2006/03/31(金) 21:48:36
そもそもGetTickCounterって標準Cじゃないだろ
902デフォルトの名無しさん:2006/03/31(金) 22:06:50
APIだし大文字入ってる時点でCっぽくないもん
903デフォルトの名無しさん:2006/03/31(金) 22:18:51
まあ、必要なアルゴリズムに関しては C の範疇じゃね?
904879:2006/03/31(金) 22:19:10
すみません、質問の内容を変えさせていただきます
例えるとして、どういったプログラムが作れればPGとして業務遂行ができると思われますか?
905デフォルトの名無しさん:2006/03/31(金) 22:19:25
main()
{
DWORD executeTime=GetTickCount() + interval;
while(1){
now = GetTickCount();
if( now < executeTime ){
Sleep(100);
continue;
}
func();
if( now > executeTime + 1000 ){
executeTime = now;
}
executeTime += interval;
}
}
こんな感じ?
906デフォルトの名無しさん:2006/03/31(金) 22:21:53
>>899
WaitableTimerを使え。それとそんなクソなロジックを作ったやつは切れ。
907デフォルトの名無しさん:2006/03/31(金) 22:27:53
>>904
マ版逝け
908デフォルトの名無しさん:2006/03/31(金) 22:29:37
あるかたが、 「for文」 の添字に「 i 」を使うのは入門書レベルだと言っていて
とても衝撃を受けたのですが、それが一般的なのでしょうか?

ゲーム系のプログラマの知り合い数人に聞いたりしたのですが 「 i 」を使うという答えでした。
ビジネス系とか環境や地方によっては使わない場合などあるのでしょうか?
909デフォルトの名無しさん:2006/03/31(金) 22:32:07
>>908
そういうどうでもいい所に異常なほどのこだわりを持ってこそfj上級者になれるのだ。
910デフォルトの名無しさん:2006/03/31(金) 22:32:21
>>908
会社のルールで決まってたりする
iLoopCounterとか、キモイ名前を付けなきゃいけなくて泣きそうになるときもある。
911デフォルトの名無しさん:2006/03/31(金) 22:33:35
ただたんにループまわすときにインデックスを使いたい
というだけならあんまり変数名考えずにiとすることも多いだろう

特殊な場合とかはわかりやすい変数名考えたほうがいいけど
912デフォルトの名無しさん:2006/03/31(金) 22:34:36
それのどこがANSI Cに関係のある話題なんだ?
913デフォルトの名無しさん:2006/03/31(金) 22:34:39
そういう墓気取りの知ったかハゲには関わらないほうがいいね。
914デフォルトの名無しさん:2006/03/31(金) 22:35:11
>>908
forに i を使うのは最も一般的だから、そんなこと気にする必要は無い。
910のような理由さえなければ i を使っていて全然問題ない。
915デフォルトの名無しさん:2006/03/31(金) 22:35:54
>>899
tick = GetTickCount() + interval;

while(1) {
 int diff;
 now = GetTickCount();
 diff = now - tick;
 if(diff > 0) {
  func();
  if(diff >= 1000) {
   tick = now;
  }
  tick += interval;
 } else {
  sleep(timeSleep);
 }
}

now - tick がオーバーフローするような事態まではフォローしてないが、
それは 25 日ほど func でフリーズした事に相当する。
916デフォルトの名無しさん:2006/03/31(金) 22:41:17
>>908
LinuxとかApacheとかMySQLとか、なんでもいいけど有名なソフトのソースに
grep -w i とかしてみ。
917デフォルトの名無しさん:2006/03/31(金) 23:08:07
初めまして。
頑張ってC言語を学んでいるものです。
まだ初心者です。
参考書を読んで勉強してるのですが、
以下の問題が解けません。
どなたかご教授下さい。

--
二つの整数値を読み込んで、それらの値の差が10以下であれば、
「それらの差は10以下です。」と、
そうでなければ、「それらの差は11以上です。」
と表示するプログラムを作成せよ。

論理OR演算子を使うこと。
--

一応書いてみたコード貼ります。
918908:2006/03/31(金) 23:08:46
くだらない質問に返答してくださったかた、本当にありがとうございます。
「for文」 の添字に「 i 」を使うのは入門書レベルって自信満々で言うものだから
あまりにも気になってしまい、こんな質問してしまいました。

>>916
> LinuxとかApacheとかMySQLとか、なんでもいいけど有名なソフトのソースに
こういう手がありましたねw
919デフォルトの名無しさん:2006/03/31(金) 23:08:47
#include <stdio.h>

int main(void)
{
int a, b;

puts("二つの整数を入力してください。");
printf("整数A:");scanf("%d", &a);
printf("整数B:");scanf("%d", &b);

if((a - b) <= 10 || (a - b) >= -10)puts("それらの差は10以下です。");
elseputs("それらの差は11以上です。");

return 0;
}

こんな感じです。論理OR演算子使わなければ簡単なのですが…
920デフォルトの名無しさん:2006/03/31(金) 23:11:36
ヒント:
if((a - b) > 10 || (a - b) < -10)puts("それらの差は11以上です。"); 
else puts("それらの差は10以下です。"); 
921デフォルトの名無しさん:2006/03/31(金) 23:15:24
>>920
おお!早速書き直して実行してみたら成功しました!
ありがとうございました。

一つのことに捕らわれると他のことが見えなくなる性格って
プログラミングにはあまり向きませんね…
922デフォルトの名無しさん:2006/03/31(金) 23:18:41
PGなんてそんなもんかもしれん
923デフォルトの名無しさん:2006/03/31(金) 23:18:46
>>921
経験積めばいいだけだから努力汁

天才プログラマーにはなれんかもしれんが
924デフォルトの名無しさん:2006/03/31(金) 23:37:56
| ̄ ̄ ̄ ̄ ̄ ̄|
| 次でボケて! |
|______|
`∧∧ ‖
(゚д゚)‖
/  づΦ
925デフォルトの名無しさん:2006/03/32(土) 00:19:28
天才アマグラマーになるんだな
926デフォルトの名無しさん:2006/03/32(土) 04:19:32
03/32?
927デフォルトの名無しさん:2006/03/32(土) 04:21:01
>>926
わろた
今年はそうきたか…
928デフォルトの名無しさん:2006/03/32(土) 08:28:47
>>905
はい。そんな感じです。
実際はスリープの代わりに、executeTime-nowで待つ時間を算出し、
パケットを送受信する関数でその時間だけ待機してますが・・・
まあ、瑣末な事なので気にしない。気にしない。

>>906
WaitableTimer・・・
Windowsで言えばWaitFor何とかあたりでしょうか?
Linuxで同じようなものがあるかどうかはしりませんが・・・
探してみます。

>>915
ごめんなさい。
その方法はすでに元のソースで使われている方法はまさにそれでした。
(now > tick と now - tick > 0はほぼ等価なので、now > tickで
 書いてましたが、元のソースで使われている方法で書くべきでした。
 かき回してごめなさい)
929デフォルトの名無しさん:2006/03/32(土) 09:43:23
何を勘違いしているかはしらんが、WaitableTimerはWin32API。
930デフォルトの名無しさん:2006/03/32(土) 10:36:27
しかもWaitForじゃないしな
931デフォルトの名無しさん:2006/03/32(土) 13:43:26
>>929
あ、確かに・・・
WaitForではなく、そのものずばりWaitableTimerと名前のつくAPIがいくつかありました。
なんか恥ずかしいです・・・
932デフォルトの名無しさん:2006/03/32(土) 14:23:18
#include "procviewer.h"
#include <tlhelp32.h>

void main(){
printf("test");
}

// ------------------------------------------------ //

これをBCC使ってコンパイルしようとすると、
tlhelp32.h関連のエラーが沢山でるんですけどどうしてでしょう。
933デフォルトの名無しさん:2006/03/32(土) 14:27:24
>>1 も読めない莫迦は消えてください。
934932続き:2006/03/32(土) 14:31:39
エラー E2141 c:\Borland\Bcc55\include\tlhelp32.h 30: 宣言の構文エラー
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 64: 宣言に ; がない
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 65: 宣言に ; がない
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 66: 宣言に ; がない
エラー E2238 c:\Borland\Bcc55\include\tlhelp32.h 67: 'DWORD' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\tlhelp32.h 65: 一つ前の 'DWORD' の定義位置
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 67: 宣言に ; がない
エラー E2141 c:\Borland\Bcc55\include\tlhelp32.h 78: 宣言の構文エラー
エラー E2141 c:\Borland\Bcc55\include\tlhelp32.h 85: 宣言の構文エラー
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 93: 宣言に ; がない
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 94: 宣言に ; がない
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 95: 宣言に ; がない
エラー E2238 c:\Borland\Bcc55\include\tlhelp32.h 96: 'SIZE_T' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\tlhelp32.h 93: 一つ前の 'SIZE_T' の定義位置
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 96: 宣言に ; がない
935932続き:2006/03/32(土) 14:32:38
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 97: 宣言に ; がない
エラー E2238 c:\Borland\Bcc55\include\tlhelp32.h 98: 'DWORD' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\tlhelp32.h 97: 一つ前の 'DWORD' の定義位置
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 98: 宣言に ; がない
エラー E2238 c:\Borland\Bcc55\include\tlhelp32.h 99: 'DWORD' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\tlhelp32.h 97: 一つ前の 'DWORD' の定義位置
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 99: 宣言に ; がない
エラー E2238 c:\Borland\Bcc55\include\tlhelp32.h 100: 'DWORD' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\tlhelp32.h 97: 一つ前の 'DWORD' の定義位置
エラー E2139 c:\Borland\Bcc55\include\tlhelp32.h 100: 宣言に ; がない
エラー E2228 c:\Borland\Bcc55\include\tlhelp32.h 100: エラーあるいは警告が多すぎる
936デフォルトの名無しさん:2006/03/32(土) 14:41:44
>>932今すぐ氏ね
937デフォルトの名無しさん:2006/03/32(土) 14:47:59
>>936
氏ねというからにはそれなりの理由があると思うんだけど何故?
938デフォルトの名無しさん:2006/03/32(土) 14:49:00
C言語で作られたソースで、別タスクにて何度も変更がかかるような変数をexternして
別なタスクで普通に参照するのっていいんでしょうか?
i=1;
とかでもPCは複数の機械語処理をしていると聞いたから
なんだかマズイ気がするんだけど。
OSとかに依存するんですかね?

初心者ですんまそ
939デフォルトの名無しさん:2006/03/32(土) 14:49:45
GNU ncursesで日本語表示をするやり方を教えてください。
環境はWindowsXPのcygwinです。
configure --enable-widecの後makeしたncursesを使っています。
コンパイルはgcc test.c -lncurseswです。
"ハロー"と表示させたいのですが~Cn~C~M~A[と文字化けしてしまいします。
ただのprintf("ハロー");プログラムは正常に表示されています。
ソースは以下です。
#include <ncurses.h>
#include <string.h>
main(){
initscr();
wchar_t wc1[100];
strcpy((char *)wc1,"ハロー");
/*
addwstr(wc1);
*/
printw("%s",wc1);
refresh();
while(1){

}
}
940デフォルトの名無しさん:2006/03/32(土) 14:58:56
>>938
基本的にはタスクとかスレッドとかそういう概念が環境依存だから
言語として絶対に大丈夫と保証されてる方法はない.

ある程度過般性のあるやり方は volatile 指定すること.

ISO/IEC 9899 6.7.3:
An object that has volatile-qualified type may be modified in ways unknown to the implementation or have other unknown side effects.
941デフォルトの名無しさん:2006/03/32(土) 15:04:30
>>939
スレ違い
942デフォルトの名無しさん:2006/03/32(土) 15:12:12
なんでロケール設定した上で、mbstowcs使わないのさ。
wchar_tとcharは全然別の型だろ。
943939(ncursesの質問):2006/03/32(土) 15:34:20
>>942
ロケール設定した上で、mbstowcs使いましたがやはり~Cn~C~M~A[と文字化けします。ソースは以下の通り。
#include <ncurses.h>
#include <locale.h>
#include <stdlib.h>
main(){
setlocale(LC_ALL, "");
initscr();
wchar_t wc1[100];
mbstowcs(wc1, "ハロー", 10);
addwstr(wc1);
refresh();
while(1){
}
}
944デフォルトの名無しさん:2006/03/32(土) 16:33:22
>>904
PGに必要なものはコミュニケーション能力だけです。
以上。







と、人間関係嫌いな俺が言ってみるテスト。
945デフォルトの名無しさん:2006/03/32(土) 16:43:51
946デフォルトの名無しさん:2006/03/32(土) 17:05:06
(931の続き)

MSDNでCreateWaitableTimerとかSetWaitableTimerの使い方を調べてみたのですが、
まさに実行したいこと、そのものという感じがしてきました。
差をとる以外にオーバーフローの対処法があるのかないのかということも気になるのですが、
とりあえずこの方法を試してみることにします。
非常に分かりにくい説明な上、重要なことが書いてなかったという最悪の質問の仕方にも
かかわらず、わざわざ答えてくださりありがとうございました。
947デフォルトの名無しさん:2006/03/32(土) 18:55:52
>>943
ちなみにその例ならワイド文字列リテラル(L"ハロー"のように)が使える。
948デフォルトの名無しさん:2006/03/32(土) 21:58:54
unsign intと
unsigned intの違いって何ですか?
949デフォルトの名無しさん:2006/03/32(土) 22:00:20
標準で定義されているキーワードかどうか、っていう違いです
950デフォルトの名無しさん:2006/03/32(土) 22:27:16
951デフォルトの名無しさん:2006/03/32(土) 23:07:44
C言語なら俺に聞け! Part 125
http://pc8.2ch.net/test/read.cgi/tech/1143900407/
952デフォルトの名無しさん:2006/04/02(日) 02:26:33
皆さん、エディタやコンパイラは何を使用してますか?
自分は
・Tera Pad
・BCC
です。
953デフォルトの名無しさん:2006/04/02(日) 03:45:13
vim
gcc
954デフォルトの名無しさん:2006/04/02(日) 04:09:30
gvim
BCB6
955デフォルトの名無しさん:2006/04/02(日) 04:27:15
Meadow
gcc
956デフォルトの名無しさん:2006/04/02(日) 04:33:21
エディタはemacs(meadow)しか使ってない
コンパイラは基本はgccで、日本語周りで問題出たら
iccやvc2k5のコマンドライン使ってる
957デフォルトの名無しさん:2006/04/02(日) 08:32:29
エディタ
vi
vim
emacs
meadow
xyzzy
peggy
桜エディタ
VisualStudio
コンパイラ
cc
gcc
vc
958デフォルトの名無しさん:2006/04/02(日) 09:47:13
エディタ
xyzzy
コンパイラ
SHC
959デフォルトの名無しさん:2006/04/02(日) 12:27:19
エディタ&インタプリタ
C Machine
960デフォルトの名無しさん:2006/04/02(日) 13:28:41
C言語に特化したエディタ・コンパイラってあるんですか?
961デフォルトの名無しさん:2006/04/02(日) 13:40:54
メモ帳
962デフォルトの名無しさん:2006/04/02(日) 14:53:04
Visual Studio + XKeyemacs
gcc + Emacs
963デフォルトの名無しさん:2006/04/02(日) 15:03:21
ttp://yuukiremix.s33.xrea.com/chirashi/
俺はいつもこれで書いてる
軽くてお勧め
964デフォルトの名無しさん:2006/04/02(日) 20:23:38
C言語はC++/C#のどちらに近いですか?
965デフォルトの名無しさん:2006/04/02(日) 20:51:15
C++
966デフォルトの名無しさん:2006/04/02(日) 20:55:14
d
967デフォルトの名無しさん:2006/04/02(日) 21:00:16
d
968デフォルトの名無しさん:2006/04/02(日) 21:03:22
d
969デフォルトの名無しさん:2006/04/02(日) 21:04:23
d
970デフォルトの名無しさん:2006/04/02(日) 21:06:42
まだ早い
971デフォルトの名無しさん:2006/04/02(日) 21:06:57
d
972デフォルトの名無しさん:2006/04/02(日) 21:10:29
d
973デフォルトの名無しさん:2006/04/03(月) 03:44:14
int buf[200];

int kan(){
if( hoge&&hogehoge) {
   return buf[0];
//省略
}

: error C2018: 文字 '0x81' は認識できません。
return buf[0];の部分でエラーが出るのですが、助けて下さい。
グローバル配列の値を関数が返すことはできるのでしょうか?
974デフォルトの名無しさん:2006/04/03(月) 03:47:35
>>973
エラー名でぐぐれ
975デフォルトの名無しさん:2006/04/03(月) 03:53:29
下に直してみたのですが、やっぱり 「文字 '0x81'」 のエラーが出ます。

int buf[200];

int kan(){
int z ;

if( hoge&&hogehoge) {
    z = buf[0];
    return z;
//省略
}
976デフォルトの名無しさん:2006/04/03(月) 03:55:14
全角スペースが混じってる
977デフォルトの名無しさん:2006/04/03(月) 03:55:19
>>975
エラー名でぐぐれ
978デフォルトの名無しさん:2006/04/03(月) 03:56:32
979939(ncursesで日本語表示):2006/04/03(月) 10:38:08
Windows Service for Unix3.5 使うと日本語表示できました
980デフォルトの名無しさん:2006/04/03(月) 14:18:37
main()からsub()にとぶときに、
main()で表示させていたprintf文を消したいのですが、
画面を移動するときに、画面を初期化する方法を教えてください。
環境はANSI Cです。

main()
--------------------------------
あいうえお
--------------------------------
 ↓
sub()
--------------------------------
あいうえお ←これを消したい。
かきくけこ
--------------------------------

よろしくお願いします。
981デフォルトの名無しさん:2006/04/03(月) 14:24:00
>>980 マルチ
982デフォルトの名無しさん:2006/04/03(月) 15:40:53
fflush(stdout)ではできませんよ。
983デフォルトの名無しさん:2006/04/03(月) 20:17:38
>>980
環境によって違うが、\r で何とかなる端末は多いかも知れない。

984初心者:2006/04/03(月) 23:00:32
ぐぐって初めてでも出来たったお

>>980
system("cls");
985デフォルトの名無しさん:2006/04/03(月) 23:02:42
>>984
UNIX系だったらどうするんだ
986初心者:2006/04/03(月) 23:22:46
こたえたのむ
987デフォルトの名無しさん:2006/04/04(火) 00:03:58
fflush(stdout)でできるお
988デフォルトの名無しさん:2006/04/04(火) 00:09:04
>>987
このスレ的には、無理。
環境に依存する方法しかない。
無難なところで、printf("\r%79s\r", "");とでもするとか。
989988:2006/04/04(火) 00:10:21
レスアンカー間違えた。
>>986だった。

>>987
それも無理。
990デフォルトの名無しさん:2006/04/04(火) 01:39:32
次のスレタイは

「環境依存しないC言語なら俺に聞け! Part 125」

にしてくれ。
このスレタイじゃ、質問者と回答者で食い違いが出るのも当たり前だろ。
環境依存しようがしまいがC言語はC言語だから
ここで質問しても桶になってしまう。
991デフォルトの名無しさん:2006/04/04(火) 02:07:15
1に書いてるじゃないか。
何も問題が無い。
992デフォルトの名無しさん:2006/04/04(火) 02:57:11
アホか。
お前みたいなのがいるから
質問者と回答者の最初のやりとりが必ず
「標準Cじゃできない、環境依存スレ逝け」になるんだよ。
993デフォルトの名無しさん:2006/04/04(火) 03:07:39
読まない馬鹿が悪い。
994デフォルトの名無しさん:2006/04/04(火) 03:14:14
環境依存しないC言語って言い回しもわかりづらいね
995デフォルトの名無しさん:2006/04/04(火) 03:25:30
990と992は華麗にスルーでよろしく。
996デフォルトの名無しさん:2006/04/04(火) 04:01:13
じゃ、標準C言語なら俺に聞け!で
997デフォルトの名無しさん:2006/04/04(火) 04:06:22
とっくに次スレ立ってるのになにをバカなことを
998デフォルトの名無しさん:2006/04/04(火) 06:38:53
>>985
clearにすればいいだけ
999デフォルトの名無しさん:2006/04/04(火) 06:44:54
景気は十分回復していますよ
てゆーか、近隣諸国見てみろよ
十分裕福な国だぜ
日本人ならそろそろ立ち上がれ
いつまでもニートと呼ばれてもしかたがないだろ
1000デフォルトの名無しさん:2006/04/04(火) 06:49:29
早朝1000げっと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。