5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け! Part 〈57〉

1 :土曜の朝も名無しさん:03/05/24 06:25
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

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

2 :デフォルトの名無しさん:03/05/24 06:26
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

3 :デフォルトの名無しさん:03/05/24 06:26
前スレ
http://pc2.2ch.net/test/read.cgi/tech/1052542761/


4 :1日で何も見ずにここまで書けるようになったんだけど凄い?:03/05/24 07:13
#include <stdio.h>
main()
{
int x;
printf("あなたは2チャンネラーですか?yesなら1を、Noなら2を、");

scanf("%d",&x);
switch(x){
case 1:
printf("あなたは2チャンネラーなんですね。");
break;
case 2:
printf("あなたは2ちゃんねらーではないのですね。");
}}





#include <stdio.h>
main()
{
int sn;
printf("弊社製品をお買い上げありがとうございます。CDケースの裏に記載されたシリアルナンバーをご入力ください。");
scanf("%d",&sn);
if(sn==93410507){
printf("登録完了!");
}
if(sn!=93410507){
printf("通報しました。")
}
}

5 :デフォルトの名無しさん:03/05/24 07:22
>>1
おつかれ。

6 :デフォルトの名無しさん:03/05/24 10:35
>>1


7 :デフォルトの名無しさん:03/05/24 11:17
>>4
>yesなら1を、Noなら2を
Yes,Noか
yes,noの組み合わせなら凄い(ってプログラミングに関係無いじゃんw)
return 0;が書かれていないのでだめ。
>}}
重ねるのはどうかな?
>printf("弊社製品をお買い上げありがとうございます。CDケースの裏に記載されたシリアルナンバーをご入力ください。");
途中に'\n'が入っていないので減点。

8 :デフォルトの名無しさん:03/05/24 11:19
>printf("通報しました。")
文末のセミコロン抜けてるじゃん

9 :デフォルトの名無しさん:03/05/24 11:21
シリアルナンバーって通し番号でしょ?たったひとつでシリアルナンバーというのかな・・・

10 :デフォルトの名無しさん:03/05/24 11:27
そこの部署に送られて来るものは一種類しかないと言う事でいいんじゃない?
ってちがうな。固有記号だもんな、変と言えヴァへんw

11 :デフォルトの名無しさん:03/05/24 11:45
if(sn==93410507){
 printf("登録完了!\n");
} else {
 printf("通報しました。\n");
}


12 :デフォルトの名無しさん:03/05/24 12:30
製品一個梱包するために、そこを書き換えてコンパイルしなおすんだよ。

13 :デフォルトの名無しさん:03/05/24 13:19
分割コンパイルの真価が発揮されるね!

14 :13:03/05/24 13:20
つーかソースファイルはひとつだ。。。

15 :デフォルトの名無しさん:03/05/24 15:48
>>11
通報してねえじゃんw

16 :デフォルトの名無しさん:03/05/24 15:55
あのー今日Cの入門書買ってきたんですけど、いきなりコンパイルするところで
躓いちゃったんです。

コンパイルしようとすると

KKUFUNCが組み込まれました。

準備ができていません。

って表示されるんですけど、これは何ですか?
入門書にはこういう場合のことは書いてなかったんでもうどうしたらいいか

17 :デフォルトの名無しさん:03/05/24 16:26
>>16
無視してもかまわんぞ。あ、でも操作できないのかな? よくわかんないや。

そのメッセージが出るってことはDOSのコードを走らせたっぽいな。LSI-C86か?

18 :デフォルトの名無しさん:03/05/24 16:39
だからLSI-C86は使うなとあれほど・・・

19 :デフォルトの名無しさん:03/05/24 16:47
下のプログラムはcos(x)をマクローリン展開で求めるものですがこれのsinバージョンを教えて下さい
double cosine(double x){
inti,n=10;   /*nは項数*/
double ans=-1.0,term=1.0,mx=-x*x;
for(i=1;i<n;i++){
term*=mx2/(2*i*(2*i-1));
ans+=term;
}
return(ans);
}


20 :デフォルトの名無しさん:03/05/24 16:57
Auron : We called it Sin...

21 :デフォルトの名無しさん:03/05/24 17:01
>>17
そうですLSI−C86です。

http://erasea.hp.infoseek.co.jp/cgi-bin/img-box/img20030524170034.jpg

こう表示されるんですが、どうすればいいんでしょうか?

22 :デフォルトの名無しさん:03/05/24 17:03
>>19
ans = x, term = x
term *= mx / ((2 * i + 1) * 2 * i);
これでいいのかな

23 :デフォルトの名無しさん:03/05/24 17:08
Microsoft .NET Framework 1.0 SDK
こういったフリーのコンパイラって使いやすいですか?
使ってる人、使ったことのあるひとの感想お待ちしてます。

24 :デフォルトの名無しさん:03/05/24 17:13
>>23
使いやすい。

25 :デフォルトの名無しさん:03/05/24 17:15
>>23
つうか C 言語ではない。

26 :デフォルトの名無しさん:03/05/24 17:15
>>21
http://www.lsi-j.web.sh.cwidc.net/freesoft/index_2.html
Q.
“LSI C-86 Ver.3.30c試食版”をWindows 95のMS-DOSプロンプト上で動作させたいのですが、
lcc test.cを起動すると

準備ができていません. 読み取り中 ドライブ A:
中止 (A), 再試行 (R), 失敗 (F)?

と表示されます。

27 :デフォルトの名無しさん:03/05/24 17:20
Cゲンゴ入門〜発展(C++?)までお世話になれる製品ありますか?
何がお勧めですか?



28 :デフォルトの名無しさん:03/05/24 17:22
LSI-Cの"試食版"はint型が16bitらしいからやめた方がいいよ。

29 :デフォルトの名無しさん:03/05/24 17:22
>>27
gcc + g++

30 :デフォルトの名無しさん:03/05/24 17:29
>>26
そのページは見てませんでした。ありがとうございます。
でも、今度はそのページに書かれている設定の仕方がわかりません。。。

31 :デフォルトの名無しさん:03/05/24 17:37
>>30
http://www.borland.co.jp/cppbuilder/freecompiler/
をインストールして
http://www.cmagazine.jp/setbcc.html
で設定

LSI-Cよりもこっちの方がいい。

32 :デフォルトの名無しさん:03/05/24 17:41
>>30
それが判らないならLSI-C86を使うのはやめておけ。
今時intが16ビットじゃ話にならん。
おまけに、ちょっと大きなプログラムやちょっと多めのメモリ空間を
扱おうとすると途端に32KBの壁にぶつかる。

33 :デフォルトの名無しさん:03/05/24 17:59
>>32
細かいことだけど訂正。
LSI-C86の試食版はsmall modelしか作れないので、
コードとデータともに64kまで。

# 無論farポインタ使いまくればその制限を突破できるけど、
# ライブラリなんかを自分で作らねばならない。

34 :デフォルトの名無しさん:03/05/24 18:03
次の制限は8086で扱えるメモリの壁が!とか?
EMSひっぱりだすか・・・

35 :デフォルトの名無しさん:03/05/24 18:15
まあ hello world 作るなら問題ないけどね。

36 :デフォルトの名無しさん:03/05/24 18:18
>>31
どうもありがとうございます。それをインストールしました。
でも、入門書はLSI-C86を使って解説してあるみたいなんですが、LSI-C86と同じようにして大丈夫なんでしょうか?


37 :デフォルトの名無しさん:03/05/24 18:22
>>36
その入門書がMS-DOSに依存しまくった変な解説してなきゃ大丈夫。
つっても入門者がそれを見極めることは不可能なんだよな…

38 :デフォルトの名無しさん:03/05/24 18:30
>>36
使う関数も、<dos.h>に依存した_dos_XXX()やint86()ばかりじゃ
C言語の勉強というよりもMS-DOSの勉強になるから注意だ。

39 :デフォルトの名無しさん:03/05/24 18:33
先に答えておくと、
graphic.hというのは
入ってないからね。


40 :デフォルトの名無しさん:03/05/24 18:49
あのー、Borland C++ Compiler 5.5ってC++のコンパイラですよね?
Cで書かれたソースもコンパイルできるんですか?

とりあえず入門書に書いてあったとおりにソースを書いてみたんで、それをコンパイルしたいんですが
LSI C-86とBorland C++ Compiler 5.5じゃコンパイルする時に打つ文も(Lccとか?)違うんですかね?

とりあえず、書いたソースをコンパイルさえできれば先に進むことができるんですが。。。

41 :デフォルトの名無しさん:03/05/24 18:57
>>40 これ読んでみな。
http://hp.vector.co.jp/authors/VA017148/pages/install/bcc.html

42 :デフォルトの名無しさん:03/05/24 18:58
doskey lcc=bcc32 -nologo $*

43 :デフォルトの名無しさん:03/05/24 20:46
>>41
コンパイルできました。お付き合いありがとうございました。

44 :デフォルトの名無しさん:03/05/24 21:34
#include<stdio.h>

void func(char* p){
p++;
printf("%c",*p);
}

int main(void){

char* str = "hello world";

printf("%c",*str);
str++;
printf("%c",*str);

func(str);
printf("%c",*str);

return 0;
}

よろしくお願いします、funcに文字列の先頭アドレスを渡して
一文字表示すると、「l」と表示されます、ですがメインに帰ってきて
また表示してみると「e」に戻ってしまいます、向こうでインクリメント
しても、mainでは反映されないのでしょうか?funcでインクリメントが
反映されるようにするにはどうすればいいのでしょうか?

45 :デフォルトの名無しさん:03/05/24 21:55
>>44
main() の str と func() の str は別もんだよ。
func() 呼び出し時に、main() の str の値が func() の str へコピーされるだけ。
fcun() でどんな風に変えようと main() の str に関係ない。

反映させるには、main() の str のポインタ渡して、 func() 側でそのポインタの示す先 (= main() の str) を変更する。
もしくは、str をグローバルにする。(非推奨)

ちなみに、VB では呼び出され側で ByVal と ByRef キーワードを使ってコピー渡し (値渡し) とポインタ渡し (アドレス渡し) を決められる。
C には、そんなおしゃれな機能はないから、全部自分でやる。

46 :デフォルトの名無しさん:03/05/24 21:55
func()でインクリメントしているのはstrじゃなくて、
strの値を渡されたパラメータ(仮引き数)。
strの値をインクリメントしたいなら、
strの場所(strを指すポインタ)を渡し、その中身をインクリメントする必要がある。

47 :デフォルトの名無しさん:03/05/24 21:56
ごめん間違えた。

誤: func の str
正: func の p

に訂正。

48 :デフォルトの名無しさん:03/05/24 22:42
みなさん、Cを学んでいらっしゃるようですが、
Cってどんな言語なんですか?
メモ帳とか、アプリ作れるんですか?ただ、あの黒い
Dos画面に何か表示させるだけなんですか?
教えてください

49 :デフォルトの名無しさん:03/05/24 22:51
Dosアプリが作れる!

50 :デフォルトの名無しさん:03/05/24 22:53
>>48
http://pc2.2ch.net/test/read.cgi/tech/1053005739/599

51 :デフォルトの名無しさん:03/05/24 22:53
>>48
UnixやWindowsといったOSをつくれる。
そもそも Unix のために生まれた言語。

52 :デフォルトの名無しさん:03/05/24 23:04
ファイルから入力するときに、
fgets使うと改行が入ってきちゃって、
fprintで表示しても美しくできません・・・・。
なぜですか???助けて


53 :デフォルトの名無しさん:03/05/24 23:05
きれいなコードの定義って何ですか?

54 :デフォルトの名無しさん:03/05/24 23:16
#pragmaの存在って?

55 :44:03/05/24 23:44
>>45
>>46
色々調べてみて、ポインタのポインタ(?)でやってみた所
うまくいきました。親切にありがとうございました!
これでいいのか不安ですが^^;

56 :デフォルトの名無しさん:03/05/25 00:42
>>52
man fgets

57 :デフォルトの名無しさん:03/05/25 00:46
>>22
遅レスすまそ。さんくす!!!!

58 :デフォルトの名無しさん:03/05/25 01:21
>>44
>>45>>46もそう言ってるが。<ポインタのポインタ
恥ずかしいからダブルポインタなんて言うのだけはやめてくれよな。

>>52
自力で改行コードを取り除きましょう。
char *removeLastNewLineChar(char *str)
{
 if (str) {
  size_t len = strlen(str);
  if (len) {
   if (str[len - 1] == '\n') {
    str[len - 1] = '\0';
   }
  }
 }
 return str;
}

59 :デフォルトの名無しさん:03/05/25 01:23
>>58
関数名長げーよー。
chomp でいーだろー。

60 :デフォルトの名無しさん:03/05/25 01:42
関数も長げー

char *p = strchr(str, '\n');
if (p)
 *p = '\0';


61 :デフォルトの名無しさん:03/05/25 02:25
>>60
それは動作が違うだろう。
"Hello\nWorld\n" を渡したら "Hello" になるぞ。

62 :デフォルトの名無しさん:03/05/25 02:47
>>60
関数は元のままでいいと思うが...。

63 :デフォルトの名無しさん:03/05/25 03:36
>>58
ダブルポインタって言うよね・・・?
言わないの!?

64 :デフォルトの名無しさん:03/05/25 03:55
void chomp(char *s) {
for (; *s && *s != '\n'; s++);
*s = '\0';
}

65 :デフォルトの名無しさん:03/05/25 04:58
>>61
確かにもとの関数と同値ではないが、
fgetsの末尾の\nを取り除くのには60ので十分じゃないかな。

66 :デフォルトの名無しさん:03/05/25 05:08
>>65
そういう仕様なのを忘れた(知らない)まま他のところで使ってしまって
痛い目をみないための工夫が必要だな。
関数名を remFirstRet にするとか。

67 :タブー:03/05/25 05:12
getsを使えばいいじゃん

68 :タブー:03/05/25 05:18
つーかファイルからか。getsじゃどちらにしろだめだ(恥)

69 :デフォルトの名無しさん:03/05/25 06:04
gets 使う香具師は馘。

70 :デフォルトの名無しさん:03/05/25 06:12
char *p = strrchr(str, '\n');
if (p) *p = '\0';

71 :デフォルトの名無しさん:03/05/25 06:16
"Good-by\n2ch"が"Good-by"になってしまうぞ。

72 :デフォルトの名無しさん:03/05/25 06:56
char *p = strrchr(str, '\n');
if (p && !p[1]) *p = '\0';

73 :デフォルトの名無しさん:03/05/25 07:38
char *p = str + strlen(str) - 1;
if (*p == '\n') *p = '\0';

74 :デフォルトの名無しさん:03/05/25 09:16
で、エラーチェックっていうか、使用ミス対策をすると
元の>>58になる罠。

75 :デフォルトの名無しさん:03/05/25 09:27
if(!*str) return;

76 :デフォルトの名無しさん:03/05/25 09:48
処理を1秒おきにしたいときって
どういう風に書けばいいんですか?

77 :デフォルトの名無しさん:03/05/25 09:53
if (str && *str && *(str += strlen(str)-1) == '\n') *str = '\0';

78 :615:03/05/25 10:03
#include <stdio.h>
main()
{
int a,b,c;
a = 50,b = 30,c =20;
a =a + b;
printf("\d",a + c);
}

79 :45:03/05/25 10:09
>>58
はぁ ? 誰が「ポインタのポインタ」なんて言ってんだよ。
ダブルポインタ知ってますっていう知ったか厨房君か ?

>>77
>>58 を一行にまとめただけやん。

まあ、fget() なら、改行コードは高々1つだし、改行コードがあるときは文字列の最後なんだし、バッファは自分が確保してるなら NULL かのチェックもサボれるだろうから >>60 で十分だよ。

80 :デフォルトの名無しさん:03/05/25 10:15
>>615
コンパイルエラー。俺にもわからん

81 :デフォルトの名無しさん:03/05/25 10:19
>まあ、fget() ・・・(一行が長すぎ。改行くらい入れろよ)・・・・>>60 で十分だよ。

あたりまえすぎることをえらそうに。

82 :デフォルトの名無しさん:03/05/25 10:23
そういえば、読み直して思いだした。
>>45を最初読んだとき、なんか違和感があった。
このスレの場合、「VBでは」じゃなく「C++では」という人の方が多いから。

83 :デフォルトの名無しさん:03/05/25 10:25
http://jbbs.shitaraba.com/computer/6552/


84 :デフォルトの名無しさん:03/05/25 10:29
>>78
何が書け\d

85 :デフォルトの名無しさん:03/05/25 11:19
#include <stdio.h>

int main()
{
int x;
for(x=2;x<11;x++)
{
printf("繰り返し9回\n");
}
}

86 :デフォルトの名無しさん:03/05/25 11:35
なんか馬鹿が増えたなぁ。

87 :デフォルトの名無しさん:03/05/25 11:37
#include <stdio.h>
main()
{
int a,b,c,d;
a=20,b=30;
printf("a=%d\tb=%d\n",a,b);
c=a+b,d=a-b;
printf("和は%d\t差は%d\n",c,d);
}

88 :デフォルトの名無しさん:03/05/25 11:38
次のようなプログラムがあるのですが、2回目の test() の呼び出しの時には、
i は 50 で初期化されないのですか?
というか、 static はそもそもそういうものなのですか?


int main(void)
{
        test();
        test();

        return 0;
}

void test(void)
{
        static int  i = 50;
        i += 10;
        printf("i = %d\n", i);
}

89 :デフォルトの名無しさん:03/05/25 11:38
>>81
当たり前って言うか >>65 で既出。
でも、>>71 とかアフォなこと言う奴いるから書いただけ。
偉そうな発言に見えた ?
なんかコンプレックスでもあるのか ?

>>82
C++ 知ってる奴なら、>>44 みたいな質問は普通しないだろ。
まあ、>>44 は VB 知ってるという保証はないけど、可能性としては一番高そうに思ったから。

90 :デフォルトの名無しさん:03/05/25 11:39
そういうもの

91 :デフォルトの名無しさん:03/05/25 11:45
>>88
だってstaticつけたり関数外で定義したものは一度しか生成されないもん。
なら当然初期化は一度だけ。

92 :デフォルトの名無しさん:03/05/25 11:49
つーか呼ぶたびに初期化されてしまったらstaticの意味がなくなっちまう。

93 :デフォルトの名無しさん:03/05/25 11:54
調べる対象がはっきりしてるのに、
なんで本やウェブで調べようとしないのかがわからん。

94 :デフォルトの名無しさん:03/05/25 12:13
#include <stdio.h>
main()
[
int tensu;
tensu=96;
if(tensu>=80){
printf("%d点です。80点以上なので合格",tensu);
}
]
検索してここがでてきたのですが、このコードの悪いところって何ですか?
コンパイルしたらintが間違っていると表示が出ます。
お願いします。教えてください

95 :デフォルトの名無しさん:03/05/25 12:16
>>94
[を{に、]を}に書き換える。   とマジレスしてみる。

96 :デフォルトの名無しさん:03/05/25 12:19
なんで[]で関数本体をくくるのかわからん。

97 :デフォルトの名無しさん:03/05/25 12:19
かぶった。鬱。

98 :デフォルトの名無しさん:03/05/25 12:47
Cでテトリス作りたいんですけど何か特別な環境じゃないと
できないとかありますか?
コンパイラはボーランドのフリーのやつです。

99 :デフォルトの名無しさん:03/05/25 12:51
がんばってリソースを定義してウィンドウ作って、
APIとかで描画すれば、何の問題もありません。


100 :デフォルトの名無しさん:03/05/25 12:59
CでWinアプリ作るのと、Dos画面にコード打って作るのって
基本は一緒なんですか?自分はCを勉強してるんですが、自分は
何を作りたいのか、何を作るためにCを学んでるのかが分からなくなりました。
お騒がせしてすみまそん


101 :デフォルトの名無しさん:03/05/25 13:04
基本は一緒。
ただし、C言語を半分理解したあたりでWindowアプリを作り始めるくらいが
ちょうどいいと思う。あんまりDOSに慣れると離れにくくなるし。
こことか参考に>http://www.kumei.ne.jp/c_lang/

102 :98:03/05/25 13:20
>>99
分かりました。やってみます。
本来「推薦図書・必読書スレ」に行くべきなのですが、ここで
質問させてください。
お勧めのAPI入門書は無いでしょうか?
プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! Microsoft Programming Series
と長いタイトルの本がありましたが、どうでしょうか?


103 :デフォルトの名無しさん:03/05/25 13:27
>>101
了解です。とても分かりやすいサイトですね。
もっと勉強します。
ありがとうございました。

104 :デフォルトの名無しさん:03/05/25 14:31
#include <stdio.h>

int main()
{
int x;
for(x=0;x=1;x++){
printf("繰り返し\n");
}
}


なんでこれは無限に繰り返されるのでしょうか?


x=1のとき 処理=printf("繰り返し\n"); をするんですよね?
変数の更新は処理が1度行われるごとに実行されるんですよね?

なら、
初期x=0のとき→x=1ではないのでなにもしない
なにもしない処理を行った(こんなのありですか?)ので、変数の更新が実行され、
xに1が足され、x=1になるのでprintfが実行される。
printfが実行されたので、変数の更新が実行され、
xに1が足され、x=2になるので、x=1の条件に当てはまらないので、
printfは実行されない。

よって「繰り返し」は1個だけ表示されるはずだと思いました。

というか処理条件が=のときだけ矛盾しまくります。
例えばfor(x=0;x=0;x++)でやってみると、何も起こりません。
0以外にすると、無限に繰り返されます。
>や>=のときは考えたとおりの結果になるんですが・・・
もしかして処理条件に=(のみ)を使ってはいけないんでしょうか?

105 :デフォルトの名無しさん:03/05/25 14:39
==

106 :デフォルトの名無しさん:03/05/25 14:40
>>104
x = 1 の実行結果が常に 1 (=真) だから。

int a;
int b = -1;
a = (b = 1);

で、a も b も 1 になるのは知ってるか ?

107 :高橋麻奈 12才:03/05/25 14:50
>>104
とりあえず入門書の一冊でも読んでから質問すれや。

108 :デフォルトの名無しさん:03/05/25 15:10
>>107
sageるなヴォケ

109 :デフォルトの名無しさん:03/05/25 15:20
>>98
参考に
http://www.geocities.co.jp/SiliconValley-Bay/4543/

110 :デフォルトの名無しさん:03/05/25 15:25
汎用を凡用などと書いてしまうサイトなど、参考にすることは出来ません。

111 :デフォルトの名無しさん:03/05/25 15:29
ま、マジで助けてください。
ボーランドのfreecommandlinetools2.exeをDLしたんですが、
後の作業が分かりません。せっかく本かってきたら、「read.meを
読んでください」だってさ。読んで分からないから本買ったのに。
どなたか教えてください。お願いします

112 :デフォルトの名無しさん:03/05/25 15:30
>>111
せめて内容確認してから買えや

113 :デフォルトの名無しさん:03/05/25 15:32
>>111
インストールすれば説明書もインストールされるからそれを読めばよい。

114 :111:03/05/25 15:32
包装してあったんです。
すみません。

115 :113:03/05/25 15:33
つーか読んだのか・・・・
その通りのことをするだけだよ。ファイルをふたつつくる。

116 :111:03/05/25 15:38
作るには作りました。
ここから・・・何を?

117 :デフォルトの名無しさん:03/05/25 15:48
( ̄o ̄;)

118 :111:03/05/25 15:51
( ´∀`){お願い はぁと

119 :デフォルトの名無しさん:03/05/25 15:53
<インストールしたディレクトリ>\binをPATHに追加する・・・

120 :111:03/05/25 16:01
やること全部書いて。おねがーい。

121 :111:03/05/25 16:12
>>119もう、それも終わったよ〜い。
次だよ、次〜

122 :98:03/05/25 16:15
>>109
ありがとうございます。参考にさせていただきます。

123 :デフォルトの名無しさん:03/05/25 16:15
>次だよ、次〜
「次」は無い

124 :111:03/05/25 16:17
何を起動させればいいの〜?
わほーい

125 :デフォルトの名無しさん:03/05/25 16:31
わほーい(^O^*)

126 :111(本物) ◆pTcVZxjbV2 :03/05/25 16:37
なんか知らない間に偽物がイパーイ・・。
マジです。本当にどれを起動させるか分からないんです。
お願いします。

127 :デフォルトの名無しさん:03/05/25 16:54
プログラムソースの先頭にそのプログラムの説明を入れたい場合はどうすればいいのですか?
例えば「プリント文の構成プログラム」というのを#include<stadio.h>の上の段に入れてコンパイルしたら
エラーになってしまうのですが。
このように実際プログラムを走らせた時には表示されないがソースを見た時一目で何のプログラムか
分かるように説明を付けたいのですが教えてください
初心者的質問ですみませんどなたかよろしくお願いします

128 :デフォルトの名無しさん:03/05/25 16:59
>>127
ttp://www.sra.co.jp/people/miyata/algorithm/inssort.txt

129 :デフォルトの名無しさん:03/05/25 17:01
なんで「挿入ソート」をコメントにしないんだろう・・・

130 :111(本物) ◆pTcVZxjbV2 :03/05/25 17:08
/*................*/

131 :デフォルトの名無しさん:03/05/25 17:55
印刷させる処理ってどうかいたらよいですか?

132 :デフォルトの名無しさん:03/05/25 17:57
>>131
OS依存・環境依存の部分が多くあるので、ここで扱うべきではないのですが・・・

133 :127:03/05/25 17:57
>>128~130
どうもありがとうございます
こういう書き方すればいいのですね
最近C勉強し始めたばっかでまったく知りませんでした^^;


134 :デフォルトの名無しさん:03/05/25 18:07
struct unko{
メンバが5個くらい。
};

void func1(const struct unko baba)
{
func2(unko.メンバ);
}

main()
{
struct unko baba;
func1(baba);
}

というようなプログラムを書く人がいるのですが、
func1のconstは意味があるのでしょうか?
メンバが5個くらいあるので、&babaをfunc1に渡した方がいいような気がするのですが(func1の宣言も変える)。
汚いプログラムですみません。

135 :デフォルトの名無しさん:03/05/25 18:12
> func1のconstは意味があるのでしょうか?
func1の定義内では意味がある。
呼び出し側では意味が無い。
ポインタ渡しに返るならconstは重要(Cでもいけたっけ?)。

136 :134:03/05/25 18:34
>>135
ありがとうございます。

もうひとつ聞きたいのですが、

void func1(const struct unko *baba)

main(){
func1(&baba);
}

私はこのようにしたほうがすきなのですが、
これに比べ>>134の利点は何かありますでしょうか?


137 :デフォルトの名無しさん:03/05/25 18:38
>>136
func1内でのbabaメンバへのアクセスが速くなる。
パラメータのコピーに比べてメンバアクセスの速度が支配的なときは有利になるかもしれん。

138 :デフォルトの名無しさん:03/05/25 18:41
>>44の正解プリーズ

139 :デフォルトの名無しさん:03/05/25 18:44
>128が何であぼ〜んされてるんだろうと思ったらmiyaか

140 :デフォルトの名無しさん:03/05/25 18:47
#include<stdio.h>

char* func(char* p){
p++;
printf("%c(from func)",*p);
return p;
}

int main(void){

char* str = "hello world";

str=func(str);
printf("%c(from main)",*str);

return 0;
}

funcの引数にする

141 :デフォルトの名無しさん:03/05/25 18:48
>>137
ありがとうございます。
勉強になりました。

142 :デフォルトの名無しさん:03/05/25 18:52
>>140
ドッペルポインタキボンヌ

143 :デフォルトの名無しさん:03/05/25 18:53
>>138
あ、ついでに... これにmallocを組み合わせるとメモリリークの可能性があるので注意(笑)
最初に確保したポインタの他に走査用ポインタを用意したほうが良い。
そうしないとmallocで確保したメモリの位置がわからなくなる(んじゃなかったっけ?)



144 :デフォルトの名無しさん:03/05/25 18:57
>>142
ダブルポインタ**かい?そんなものつかったら、初心者にゃきつくないかい?

145 :デフォルトの名無しさん:03/05/25 19:00
>>144
ドッペルって言いたかっただけですので気にしないで下さい。

146 :デフォルトの名無しさん:03/05/25 19:22
だからなんでダブルポインタなんて奇妙な言葉を作るのさ。
そんなことだから面接で「ダブルポインタなら任せてください。
トリプルポインタは苦手ですが。」なんて言う阿呆が出てくるじゃないか。
ポインタにダブルも減ったくれもあるかい。

147 :デフォルトの名無しさん:03/05/25 19:28
わりい、「変数のポインタに関するポインタ」にしとくよ。

148 :デフォルトの名無しさん:03/05/25 19:31
double pointerはたまに使われるから、それをそのままカナにしてしまったんだろうて

149 :デフォルトの名無しさん:03/05/25 19:32
>>146
アホを判別できていいじゃないすか。
ところでポインタのポインタのポインタってながいよね。

150 :デフォルトの名無しさん:03/05/25 19:39
で、その「変数のポインタに関するポインタ」を使った>>44の正解教えてください。

151 :デフォルトの名無しさん:03/05/25 19:43
>>150
ヴァリアブルのポインタに関するポインタ**かい?そんなものつかったら、初心者にゃきつくないかい?


152 :デフォルトの名無しさん:03/05/25 19:43
関するって変な感じ
ポインタのポインタでいいじゃん

153 :デフォルトの名無しさん:03/05/25 19:46
>>150
きつくてもいいので教えてください。お願いします。

154 :デフォルトの名無しさん:03/05/25 19:47
のアドレス
へのポインタ

155 :デフォルトの名無しさん:03/05/25 19:49
#include<stdio.h>

void func1(char** p){
(*p)++;
printf("(from func1) - %s\n", *p);
}

void func2(char* p){
p++;
printf("(from func2) - %s\n", p);
}

int main(void){

char* str = "hello world";

func2(str);
printf("(from main ) - %s\n",str);

func1(&str);
printf("(from main ) - %s\n",str);

return 0;
}


156 :デフォルトの名無しさん:03/05/25 19:56
どうもダブルポインタときくと(double *)を連想してしまって困る。
というか、普通(double *)じゃないの? (char **)とかじゃねえだろ。

157 :デフォルトの名無しさん:03/05/25 20:03
>>155
ありがとうございます。やっと理解できました。


#include<stdio.h>

void func(char** p){
(*p)++;
printf("%c",**p);
}

int main(void){

char* str = "hello world";

printf("%c",*str);
str++;
printf("%c",*str);

func(&str);
printf("%c",*str);

return 0;
}


ってことですよね。
func(char** p)とfunc(&str);まではいけたのですが、
printf("%c",**p)の **p に気が付かなかった。

158 :デフォルトの名無しさん:03/05/25 20:08
英語だと、こうみたいな雰囲気。
pointer to int
pointer to double
pointer to pointer
こっちのほうがずっといいなぁ...

159 :デフォルトの名無しさん:03/05/25 21:20
自分はC machine Version 2.00というコンパイラを使っているのですが、
皆さんはどんなコンパイラ使ってますか?自分の使っているコンパイラが
どんなものなのかがよく分かりません。これから、徐々にスキルが上がっても
使用できるものなのか。
オススメがあったら紹介してください。

160 :デフォルトの名無しさん:03/05/25 21:26
すれ違い

161 :159:03/05/25 21:27
Cのコンパイラの話もダメなんすか

162 :デフォルトの名無しさん:03/05/25 21:42
>>161
ダメじゃあないけど、C machineとかいうのはC処理系と似ているようで、
全く違うよくわからんものというコンセンサスがこのスレにはある。

「挙動が変なんだけど」って質問がきたときに、
「それC machine使ってるだろ」って突っ込みに大抵yesだもんで。

まあこのスレ的にはスレ違いと言っといていいんじゃないかな。
とにかくそれはC処理系じゃない。

163 :159:03/05/25 21:46
はい。すみません。
スレちがいみたいでしたね。


164 :デフォルトの名無しさん:03/05/25 21:49
while文で「enterを入力したら終了」、ていう風にするにはどうすればいいんでしょうか?

165 :デフォルトの名無しさん:03/05/25 21:53
while(!enter)

166 :デフォルトの名無しさん:03/05/25 22:09
while(enter != '\n')

167 : ◆2bmoujqRHk :03/05/25 23:18
このスレの上のほうで出てますがBorland C++ Compiler 5.5.1ってのは
Cのコンパイルできるんですか?
一般に売ってるCの本で習得した技術だけで使えるモンなのですか?



168 :高橋麻奈 12才:03/05/25 23:22
>>167
使えるよ。
インストールのやり方とかコンパイルのしかたは、検索して調べれば、
すぐわかるよ。

169 :デフォルトの名無しさん:03/05/25 23:26
http://elife.fam.cx/


170 : ◆2bmoujqRHk :03/05/25 23:30
>>168
レスありがとうございます。
ちょうどいま、高橋麻奈さんの本読んで勉強してるんですよ。


171 :デフォルトの名無しさん:03/05/26 00:53
>>164
while(!strcmp(str,"enter")){ ... }

172 :デフォルトの名無しさん:03/05/26 00:57
>>171
!はいらんのではないか?

173 :デフォルトの名無しさん:03/05/26 07:11
C言語のCって何の略?
普通にComputerのCでいいの?

174 :デフォルトの名無しさん:03/05/26 07:32
Bの次のC。よってC自体に意味はない。

175 :デフォルトの名無しさん:03/05/26 07:55

   ,,v‐v-/l_  (⌒)
  _「/ ̄  く   /
  lYノノ/_ノl_ヽ))
  <イ( l l )l>  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 <|)'|l、"(フノ|l  < えっちなのはいけないと思います!
  ,(ヨリ<>o<>リ']  \______________
  |ト‐!]-ム- i']l
  ヽ_ノv__l/ /
.  ノ[//‐─‐/_/、
 ( /E|,   (フlヨ \
 ,-| El___lヨ /
└-\`^^^^^^´/
     ̄ ̄ ̄

176 :デフォルトの名無しさん:03/05/26 07:57
>>175
'H'ではなく、'C'だっつーとんじゃい

177 :デフォルトの名無しさん:03/05/26 07:58
超ナンジャタウンって感じー

178 :デフォルトの名無しさん:03/05/26 09:29
   ,,v‐v-/l_  (⌒)プンプン
  _「/ ̄  く   /
  lYノノ/_ノl_ヽ))    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  <イ( l l )l> < Cはいけてないと思います!
 <|)'|l、"(フノ|l    \____________
  ,(ヨリ<>o<>リ、
  |ト‐!、。 ) 。).|
  ヽ_ノv    l |
.  ノ[//  , ./_/
 (  /~'、--‐ソ_)
  ,-i  ヽ/'´ヽ
 └-\.  \  )
     ヽ、__,ノ`


179 :デフォルトの名無しさん:03/05/26 10:27
>>178
わかったから服着れ

180 :デフォルトの名無しさん:03/05/26 14:58
ディスプレイに表示するにはどうしたらいいんですか。

181 :デフォルトの名無しさん:03/05/26 15:01
>>180
ディスプレイと本体の電源入れれ

182 :デフォルトの名無しさん:03/05/26 15:17
>>171
だから 0 と比較しないと分かりにくくなるだろうと...。

183 :デフォルトの名無しさん:03/05/26 15:26
ディスプレイの定義から始めようか

184 :デフォルトの名無しさん:03/05/26 15:27
はぁ?

185 :デフォルトの名無しさん:03/05/26 16:51
ひぃ?

186 :デフォルトの名無しさん:03/05/26 16:56
#include <stdio.h>
int main(void){
 int a;
 for(;;){
  scanf("%d", &a);
  if (a == 0)
   return 0;
 }
 return 0;
}

これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
mainの引数がvoidだとかいう突っ込みは無しで…

187 :デフォルトの名無しさん:03/05/26 17:09
>>186
>scanf("%d", &a);

int の領域に文字列を入力するんだから当然だろ。

188 :デフォルトの名無しさん:03/05/26 17:09
scanf()は数字以外の入力を無視するから。

189 :デフォルトの名無しさん:03/05/26 17:09
>>187
わかってないなら黙ってろ。

190 :デフォルトの名無しさん:03/05/26 17:11
scanf("%s", s);やれってこったな。

191 :デフォルトの名無しさん:03/05/26 17:13
いや、ここは素直にfgets()とsscanf()のコンビで。

192 :デフォルトの名無しさん:03/05/26 17:16
typedef struct{
struct chinko;
struct manko;
unsigned char hoge; //hogeは可変長
}tbl;
static tbl piyo;
static tbl mona;

こういった状況でpiyoのhogeを
monaのhogeにコピーしたいのですが
どのようにするのが確実で安全なのでしょうか?
構造体同士は
mona.chinko = piyo.chinko;
で、できるのですが
unsigned char同士だとどうもできません。
ご教授お願い致します。


193 :デフォルトの名無しさん:03/05/26 17:19
>>186
scanf()はバッファをフラッシュしないから。
「fflush( stdin );」をループの終わりに入れれ。

194 :デフォルトの名無しさん:03/05/26 17:19
普通に
mona.hoge = piyo.hoge;
でできると思うが。できないと言うのはどう言うことか具体的にどうぞ。

195 :デフォルトの名無しさん:03/05/26 17:20
>>193
数字が来るまでバッファをフラッシュしつづけるのか?
おめでたいな。

196 :デフォルトの名無しさん:03/05/26 17:22
> unsigned char hoge; //hogeは可変長

ここがキモなのかな。これで可変長というのは信じられないから、
実際は unsigned char hoge[0];というところなんではないか?

197 :デフォルトの名無しさん:03/05/26 17:25
>>195
>>193だと、数字が来てもだろ?
とりあえず、scanf()の戻り値を判定して、
エラーの時にフラッシュする、ってところか。

198 :デフォルトの名無しさん:03/05/26 17:26
>>196
さらに、可変長なのに有効データ長もないしな。


199 :デフォルトの名無しさん:03/05/26 17:34
>>198
NUL-terminatedなら必要ない。

まぁ、あきらかにコンパイルも通らないコードを示されても話にならんってこった。

200 :デフォルトの名無しさん:03/05/26 17:35
>>193
散々既出だが、それは未定義動作。

201 :192:03/05/26 17:35
みなさんありがとうございます。

mona.hoge = piyo.hoge;
これでできるのですか・・・
すみません知りませんでした。。。
ウツだ(ry

有効データ長さは4Kくらいっす。。。

ついでに質問なんですが
typedef struct{
struct chinko;
struct manko;
unsigned char hoge; //hogeは可変長
}tbl;
static tbl piyo;
static tbl mona;

typedefっつーのは上記のような使用方法で
いいんですよね?
型が同じ構造体を2つ記述する必要ないから
便利!みたいな?

202 :デフォルトの名無しさん:03/05/26 17:45
>>201
> 型が同じ構造体を2つ記述する必要ないから
便利というより、それはしちゃいけない。

Cでは実際の構造が一緒でも、別個に定義されていれば別々の構造体になる。
COBOLなどのように構造が一緒なら同じものと見なされるということはない。

203 :デフォルトの名無しさん:03/05/26 17:46
なんか話しがまとまってないね。

>>186

#include <stdio.h>
int main(void){
 int a;
char s[1024]; /* これは適当 */
 for(;;){
  if (scanf("%d", &a)) {
   if (a == 0)
    return 0;
  } else if (scanf("%s", s)) { // バッファをクリアな意味合い※1
   continue;
  }
}
 return 0;
}

// こういうコーディングが良いとか悪いとかは無しで…

> これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
※1

204 :デフォルトの名無しさん:03/05/26 18:15
>>201
> mona.hoge = piyo.hoge;
> これでできるのですか・・・
可変長ならできないって...。

void tbl_copy_hoge(tbl* dst, const tbl* src);
という関数を自分で作って、それを使ってコピーすれ。
コピーの方法は、俺らには hoge をどういう仕様にしてるのか分からんので、
自分でやってちょ。

205 :デフォルトの名無しさん:03/05/26 18:16
便利なHTML生成プログラムをCで作れますか?

206 :201:03/05/26 18:16
>>202サソ

ということは、構造体同士をコピーする際には
構造体を2つ用意する必要があるのでしょうか?

207 :デフォルトの名無しさん:03/05/26 18:17
>>203
もしかして、数字が入力されたらscanf("%d", &a)して
文字が入力されたらscanf("%s", s)されるコードを書いたつもり?

208 :デフォルトの名無しさん:03/05/26 18:21
>>201
あと、typedef の使い方はあってるけど、仕様目的が違う。
typedef 書かないと

static struct tbl piyo;

とかなるのを

static tbl piyo;

と書けるというのと、
tbl が構造体だということを知らなくて良いという効能がある。

もっとも、後者については tbl.chinko とか直接使う場合には
関係ないんだけどね。


あと、構造体というものがまだよく分かってないように見える。
tbl a; と int b; とを見比べて、
tbl とは何か、a とは何かを小一時間考えるべし。

209 :デフォルトの名無しさん:03/05/26 18:28
猫でコピーした丁半ゲームのソースコードをメモ張にペーストして
拡張子.cで保存し、コマンドプロンプトで開くと
「内部コマンドまたは外部コマンド、操作可能なプログラムまたは
バッチファイルとして認識されていません」と表示されます。
なぜですか?

210 :高橋麻奈 12才:03/05/26 18:34
>>209
コンパイルしねーと動かねーって。

211 :186:03/05/26 18:45
>203
実際のところこれが一番OK?

212 :デフォルトの名無しさん:03/05/26 18:49
>>186
>>191参照で。

213 :デフォルトの名無しさん:03/05/26 18:56
>>212
> >>191
実際にどうかくべきかじゃなくて、
なんで暴走するか?ってのが、テーマだよね・・・?>>186さん

214 :186:03/05/26 19:05
>213
問題はscanfで取得しなかった文字入力をどうやってフラッシュするか…?

215 :デフォルトの名無しさん:03/05/26 19:06
そもそもscanfを使うなよという心境の人が多いだろうな

216 :デフォルトの名無しさん:03/05/26 19:09
>>213
それなら>>188で。

217 :デフォルトの名無しさん:03/05/26 19:10
>>215
そそ、
取得しなかった文字を捨てる(Flush)のではなくて、
ちゃんと取得した上で取捨選択するべきだね。

218 :デフォルトの名無しさん:03/05/26 19:18
>>216

> > これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
> scanf()は数字以外の入力を無視するから。

質問と回答がまったくもってかみ合っていません。

>>214
フラッシュの方法は、scanf("%s", s)しか思いつきません。
他になにかあったら教えて。

219 :186:03/05/26 19:21
>217
ラジャァ。
こんな感じで?

#include <stdio.h>
char buf[256];

int main(void){
 int a;
 for(;;){
  fgets(buf, 256, stdin);/*エラー処理は省略*/
  sscanf(buf, "%d", &a);
  if (a == 0)
   return 0;
 }
 return 0;
}


220 :デフォルトの名無しさん:03/05/26 19:36
#include <stdio.h>
int main()
{
int a;
char buf[256];
while (fgets(buf, sizeof buf, stdin) &&
(sscanf(buf, "%d", &a) != 1 || a != 0));
return 0;
}

221 :186:03/05/26 19:39
>220
very thanks!

222 :デフォルトの名無しさん:03/05/26 19:42
char wk;
short val;
とありまして
wk に valを代入したいのですが
wk = val;では代入できないものなのでしょうか?

厨房ですみませんがよろしくお願いします。

223 :デフォルトの名無しさん:03/05/26 19:45
>>222
できないのわかってて聞いてるんでしょ。

224 :デフォルトの名無しさん:03/05/26 19:46
>>222
何ページか先に書いてある。

225 :デフォルトの名無しさん:03/05/26 19:47
>>222
処理系によっては警告が出たり、charの範囲を越える値は元に戻せなかったり
するが、代入自体はできるだろ。


226 :デフォルトの名無しさん:03/05/26 19:49
どういう意味でできないと言っているのかしらないけど、文法上ならなんの問題もない。
警告は出るかもしれないけど。

227 :222:03/05/26 19:50
スミマセンソ・・・

別に釣りしてるわけじゃないんす。。。

こういう場合はmemcpy()でやるもんなんでしょうか?

228 :186:03/05/26 19:50
>220たん>221とは言ったものの一応自分流に書き直して書いときます。

#include <stdio.h>

int main(void){
 int a;
 char buf[256];
 while( fgets(buf, sizeof(buf), stdin) != EOF && sscanf(buf, "%d", &a) != EOF ){
  if (a == 0)
   return 0;
 }
 return 0;
}


229 :デフォルトの名無しさん:03/05/26 19:51
過労死をさせる日本ロジテム株も大暴落の予感
佐川とロジテムどっちがひどい?
田中真紀子と親密な日本ロジテム(日清系 上場企業 みずほの融資先)の
子会社せいも素(みずほの融資先)で  
サービス残業させすぎの過労死者を出した上、大量の不当解雇を行った社長の辻
にまた労働基準監督署の立ち入り調査があり,またも多くの勧告が出された。
http://www.samos.co.jp
http://tmp.2ch.net/test/read.cgi/company/1046775680/l50
.      / ̄\  +.  ∧_∧アハハハ テンゴクヘイッチャウヨー  +
  イクナヨー( ´∀`)    (´∀` )  
      (つ  つ     (つ  つ■
.   +  ( ヽノ      ( ヽノ

230 :デフォルトの名無しさん:03/05/26 19:51
>>228
ネタか?

231 :デフォルトの名無しさん:03/05/26 19:54
>>227
>>225-226

232 :デフォルトの名無しさん:03/05/26 19:54
>>228
fgetsはEOFは返さないぞ。

233 :デフォルトの名無しさん:03/05/26 20:09
>>228
fgets()はNULLと比較するべき。
sscanf()は変換できた個数を返すので、0と比較するか1と比較するか。

234 :227:03/05/26 20:20
>>231サソ

ってことはぁ??
memcpy()もダメで、代入も不確か!?

じゃあどのようにすればよろしいのでしょうかぁ〜。。。

235 :デフォルトの名無しさん:03/05/26 20:24
>>227
つーか、何をやりたいのか書かないと誰も妥当な解答ができないってば。
memcpy()が駄目なんて誰も言ってないし(やめた方がいいけど)、
>>225は一般論。

236 :デフォルトの名無しさん:03/05/26 20:42
charにintを代入したいとかいうやつに限って、実は
charな値ではなく、文字列がほしいという罠

237 :227:03/05/26 20:44
>>235ソソ
スイマセンデスタ

デスティネーション側のunsigned char hoge;の
先頭2バイトにshort piyo;の内容を
写したいのです。

charとshortじゃ型が違うので
キレイに収まるのかが心配です。

それで皆様にお伺いをたてている次第であります。

238 :デフォルトの名無しさん:03/05/26 20:45
警告を黙らせたいのだったら
wk = (char)val;

だが、このようなコードを書かないようにするのが正道。

239 :デフォルトの名無しさん:03/05/26 20:46
>>237
先頭2バイト?配列か?

240 :デフォルトの名無しさん:03/05/26 20:48
>>237
そのような話題はこのスレの範疇ではないのだが…
規格外の話なんでな。先頭2バイトってことなら、
memcpy(&hoge, &piyo, 2);
なんだが、なぜそのようなことをやりたいのか…
CPUや処理系によってはやりたいこととかけ離れたコードである
可能性があることは考えておかんと。

241 :240:03/05/26 20:49
ていうか、hogeの型はunsigned charじゃないか。
そこに2バイトもコピーしたら領域を破壊するぞ。

242 :186:03/05/26 20:52
>230>232>233
寝ぼけてました。逝ってきます。


243 :227:03/05/26 20:53
みなさんありがとうございます。

このunsigned char hogeは
ほかの関数から貰う
可変長のデータの先頭アドレスでして。。。

それの先頭2バイトにshort piyoをコピーしたいのです。


244 :227:03/05/26 20:54
破壊っすか!???

ってことは・・・
>>243に書いたように
渡されるデータ長さは
最大4Kを超えるんですが
unsigned charで受けるのは
間違いっすか!?????

245 :デフォルトの名無しさん:03/05/26 20:54
なんだ、さっきの構造体を拡張したやつか。
そんなイリーガルなプログラムを
捨 て て し ま え。

246 :227:03/05/26 20:56
(´Д` )ウワァァン

247 :デフォルトの名無しさん:03/05/26 20:59
>>243
なら、
unsigned char* hoge だろ
それなら、
memcpy(hoge, &piyo, sizeof piyo);

248 :227:03/05/26 21:03
>>247サソ
(´Д` )ウワァァンアリガd!!!!

ヤッテミマスー!

249 :デフォルトの名無しさん:03/05/26 21:04
そもそも無闇に可変長構造体を使うのはどうなんだろう。
ポインタをメンバに作って malloc するんではなく、
可変長構造体にする理由っていうと、
その構造体をそのままファイルに読み書きしたいとか、
そういう特殊な事情がある場合だけっしょ?
本当にその手の事情はあるの?

250 :デフォルトの名無しさん:03/05/26 21:09
>>249
ファイルに読み書きする場合でも、必ずしも必要ない。
つーか、可変長構造体なんて危なっかしい実装するよりも
手堅く書いた方がメンテナンス性は上がる。

ということで、227にはデータ構造を見直すことを強く勧める。
或いは、そう言うデータが必要かどうか、プログラムの設計を見なおしてもいいね。

251 :247:03/05/26 21:10
>>249サソ
ファイルに書きこむとか言う事情はないです。。。

>ポインタをメンバに作って malloc するんではなく
・・・なんかより良い方法があるのでしょうか??

252 :動画直リン:03/05/26 21:13
http://homepage.mac.com/hitomi18/

253 :デフォルトの名無しさん:03/05/26 21:14
なんだか>>247は日本語の勉強も必要な気がした。

254 :デフォルトの名無しさん:03/05/26 21:18
>251
ポインタと malloc 知らずに
どうやって可変長構造体を確保してるの?
と思ったが、そういや
 static tbl piyo;
とか書いてたな。
これじゃダメ。

ポインタ、malloc、可変長構造体の何たるかをよーく勉強しよう。

255 :デフォルトの名無しさん:03/05/26 21:29
Linuxでコンパイラはgccを使ってるんですが、
IPアドレスのようなドット区切りの数字を配列に入れる方法がわかりません。
カンマや/でなら入れられるんですが・・・

256 :デフォルトの名無しさん:03/05/26 21:33
>>255
どんなコードか晒しなさい。

257 :_:03/05/26 21:33
http://homepage.mac.com/hiroyuki43/hankaku09.html

258 :デフォルトの名無しさん:03/05/26 22:11
>>255
カンマやスラッシュ、ドットかの違いだけで何故できない?
ソース上の区切り文字を ',' や '/' から '.' に変えるだけだろう。
strtok()使えば簡単だ。

※参照
<string.h>
char* strtok( char*, const char* );

259 :デフォルトの名無しさん:03/05/26 22:12
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0  
        

260 :255:03/05/26 22:13
#include <stdio.h>
#include <stdio.h>
int main(int argc,char **argv)
{
int i,j;
int x;
unsigned ad[10];
unsigned ip1=0,mask1=0xffffffff;
unsigned ip2=0,mask2=0xffffffff;
unsigned char *a1=(char*)&ip1;
unsigned char *m1=(char*)&mask1;
unsigned char *a2=(char*)&ip2;
unsigned char *m2=(char*)&mask2;
scanf("%d,%d,%d,%d/%d",&a1[0],&a1[1],&a1[2],&a1[3],&a1[4]); printf("%d.%d.%d.%d/%d\n",a1[0],a1[1],a1[2],a1[3],a1[4]);
for(i=0;i<=3;i++) ip1=(ip1<<8)+a1[i];
printf("%d.%d.%d.%d\t\t",a1[0],a1[1],a1[2],a1[3];
mask1<<=(32-a1[4]);
ip1 &=mask1;
}

構成中なのですが、IPアドレスを引数とし入力してネットワークアドレスを算出したいのですが
ドット区切りでの配列への代入がわかりません。
なのでscanfで読み込んでしまっています。

261 :デフォルトの名無しさん:03/05/26 22:23
C言語を始めようと思うんですけど、
いまはDOSで何か表示させたりってのができるようになりたいんですが、
Winアプリ作るのとどこの部分が違うんですか?
ソースコードが丸ごと違うのでしょうか?それとも、コンパイラの違い?
WinアプリをCで作るとき、ボタンのサイズとかを全部手動で指定できるのですか?
それはフリーコンパイラでも可能でしょうか?
質問攻めですみません。一応、検索しました

262 :258:03/05/26 22:26
>>260
確認事項

1.入力は32ビット整数値ですか??それとも10進文字列ですか?

2.出力は3文字表記できる4つの配列でいいんでか?
(例) 192.168.0.1 の場合、配列をstr[4][4]として
str[0]・・・"192"
str[1]・・・"168"
str[2]・・・"0"
str[3]・・・"1"
と格納されればよいのか?

263 :255:03/05/26 22:32
>>262
1.32ビット整数値です。
2.配列を数字として格納できたらいいです。

264 :デフォルトの名無しさん:03/05/26 22:35
>>263
sprintf でいいのかな。

265 :デフォルトの名無しさん:03/05/26 22:38
お邪魔します、スレッドを荒らして申し訳ありません。
このレスはカキコしたとしても1スレに1回ですのでご許しください。
現在、

Linny開発プロジェクト
ttp://pc.2ch.net/test/read.cgi/linux/1053087824/

にて、第四世代(Winnyの次)となるファイル共有ソフトを開発しています。
Winnyとの最大の違いは一人の開発者が作るのではなく、
オープンソースプロジェクトとして複数の開発者が作るところです。
プロジェクトの発端となる最初の発言者(535氏)が全く使い物にならないため
神の出現を待っております。コーディングができなくても提案などして頂くだけでも結構です。
sourceforge.jpにより開発環境は揃ってますのでだれでも参加可能です。
ちなみに自分はDQNなので全くコードは書けません。
神の出現待っています。お邪魔しました。

ttp://sourceforge.jp/projects/linny/

266 :255:03/05/26 22:41
>>264
間違えました…10進文字列です…
テンキーで実行時に./a.out 192.168.0.1
として実行してます。

出力は例の通りでできるといいです。

267 :デフォルトの名無しさん:03/05/26 22:55
#define IPADDR_SIZE 4
typedef struct ___tag_ipaddr_t { /* IP アドレス */
 unsigned char addr[IPADDR_SIZE];
 unsigned char mask;
} ipaddr_t;
typedef enum ___tag_BOOL { /* 論理型 */
 FALSE, TRUE
} BOOL;
/* buf は破壊されます */
BOOL str_to_ipaddr(char *buf, ipaddr_t *ip) {
 const char mask_sep[] = "/"; /* マスクとアドレスのセパレータ */
 const char ip_sep[] = "."; /* IP アドレスの桁のセパレータ */
 char *ipstr;
 const char *maskstr;
 const char *token;
 int i;
 /* xxx.xxx.xxx.xxx/yyy の分離 */
 if(ipstr = strtok(buf, mask_sep), ipstr == NULL)
  return false;
 if(maskstr = strtok(NULL, ""), maskstr == NULL)
  return false;
 ip->mask = atoi(maskstr);
 /* aaa.bbb.ccc.ddd の分離 */
 for(i = 0, token = strtok(ipstr, ip_sep);
   i < IPADDR_SIZE;
   ++i, token = strtok(NULL, ip_sep)) {
  if(token == NULL)
   return FALSE;
  ip->addr[i] = atoi(token);
 }
 return TRUE;
}

268 :261:03/05/26 23:01
Cmachineってコンパイラとbcpad231ってのどっちがいいと思いますか?
Cmachineのほうが使いやすいんですが、なんかCの処理には向いてないとか・・・。
どっちがいいんですか?

269 :258:03/05/26 23:11
>>266

// サンプルプログラム
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
const char sep[] = ".";
char addr[4][4];

// コマンドライン文字列からピリオドを区切り文字として切り出して
// addrへ格納する。
//
// サンプルプログラムなのでエラーチェック省略です。
// コマンドライン引数必須かつ文字数制限厳守!
strcpy( addr[0], strtok( argv[1], sep ) );
strcpy( addr[1], strtok( NULL, sep ) );
strcpy( addr[2], strtok( NULL, sep ) );
strcpy( addr[3], strtok( NULL, sep ) );

///////// 検証のためのデバッグプリント
int i;
for ( i = 0; i < 4; i++ )
printf( "addr[%d] = \"%s\"\n", i, addr[i] );
}

とりあえず机上だけで作成しました。ノーテストでスマソ。

270 :_:03/05/26 23:12
http://homepage.mac.com/hiroyuki43/hankaku09.html

271 :bloom:03/05/26 23:13
http://homepage.mac.com/ayaya16/

272 :デフォルトの名無しさん:03/05/26 23:14
環境依存だけど、inet_addr() はダメなの ?

273 :デフォルトの名無しさん:03/05/26 23:18
#include <stdio.h>
main()
{
int a;
printf("テスト何点でしたか?\n");
scanf("%d",a);
if(a==100){
printf("お疲れ様。");
}

else{
printf("しっかりしろ!まだ頑張れる。");
}
}

何がおかしいのか分からない罠。
正しく動作しないんだよな。これが

274 :デフォルトの名無しさん:03/05/26 23:19
26才人妻です。ダンナがかまってくれないので、いつも一人でオナってます。
でも、けっこうオカズに困るんですよね。そんな時見つけたのがYUIS!!
安いし、安心して買えるしなかなかいいですよ!いつもバイブ物買ってます!

http://www.dvd-yuis.com/


275 :デフォルトの名無しさん:03/05/26 23:20
>>273
scanf("%d",&a);

276 :デフォルトの名無しさん:03/05/26 23:23
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0       

277 :255:03/05/26 23:27
>>267
>>269
ありがとうございました。
これから解読して理解してみます。

また分からない事があったらよろしくおねがいします・・・

278 :デフォルトの名無しさん:03/05/26 23:31
>>255
スレ違いだと思うが、↓で「inet_addr」、「inet_ntoa」とかで検索シル!
ttp://www.linux.or.jp/JM/

279 :デフォルトの名無しさん:03/05/26 23:59
>>186
mainの引数がvoidなのは別に突っ込まれるようなことじゃないぞ
戻り値がvoidならともかく

280 :デフォルトの名無しさん:03/05/27 00:06
最近疑問に思ったんですが、質問してもよろしいでしょうか。
CではWinアプリを作ることができるといいますが、DOSで入力
するのと作成法においてどんな違いがあるのでしょうか?DOS
で扱うにはボタンなどは必要ありませんが、Winアプリにはも
ちろんフォーム、ボタンなどいろいろなものが必要になります
よね?それをCでいちいちサイズなどを指定しないとWinアプリ
は作れないんですか?VB.NETみたいにボタンをマウスを使って
設置できるといいますが、それはCなのですか?C++との作成面での違いは?
文がぐちゃぐちゃですみません。意味不明な文ですが答えれるところがあれば、答えていただきたいです。お願いします






281 :デフォルトの名無しさん:03/05/27 00:14
>>280
まずはCUIから勉強すれ!

282 :デフォルトの名無しさん:03/05/27 00:16
>>281
むしろ、OSからだろ?

283 :デフォルトの名無しさん:03/05/27 00:27
>>280
>>261 と同一人物?

284 :デフォルトの名無しさん:03/05/27 01:11

http://www.asahi-net.or.jp/~yf8k-kbys/ckadai5.html
の1. ユーザに入力してもらった数だけ、あなたが好きな言葉を繰り返すプログラムを書いてください。

/* kurikaeshi.c */
#include <stdio.h>

int main()
{
int x;
int a;
printf("好きな整数入力して。");
scanf("%d",&a);
for(x=0;x<a;x++){
printf("あいうえお\n");
}
}




で合ってますか?

285 :デフォルトの名無しさん:03/05/27 01:22
>>284
未完成のサイトで勉強するのはやめましょう

286 :デフォルトの名無しさん:03/05/27 01:39
ttp://www.asahi-net.or.jp/~yf8k-kbys/newcpp4.html
>「C++でのオブジェクト指向型プログラムとは、クラス、継承、仮想関数を(有効に)使ったプログラムである。」

はぁ?

って、これじゃスレ違いなんでこっちも。
http://www.asahi-net.or.jp/~yf8k-kbys/c3.html
>また、「%d」の間に空白をいれたので、「空白で区切った整数」の入力を待つことになるわけです。
ぽかーん

287 :デフォルトの名無しさん:03/05/27 01:46
>>280
DOS(コンソール)アプリとWinアプリではウインドウを作るだけでも大変さが全然違う。
コンソールは
#include <stdio.h>
int main(void){return 0;getchar();}
で出来るが、Winアプリは30行ぐらい必要になる。それを知りたいなら
http://www.kumei.ne.jp/c_lang/ のWindowsSDK編第一部の1~5章ぐらいを
見ると勉強できます。もし30行書くのが面倒なら、MFCという方法でも作れる。
僕はその方法はあまり知らないが、VBとSDKの間と考えると良い。
ボタンを作ると成ると、もっと大変。VBではなくCで作る利点は、基本的に作りやすい
(個人の意見)、必要なものだけ使うから速い、一度作ってしまうと(関数、クラス)
使い勝手が良い等。作るスピードでも最初はVBの方がかなり速いが、プログラム
サイズが大きくなるとVBを追い抜く。Cができるなら、VBではなくCでWinアプリを
作るのを進める。がんばれ!

288 :デフォルトの名無しさん:03/05/27 01:48
>>287
またそんなことをいって・・・

289 :デフォルトの名無しさん:03/05/27 01:50
>>287
途中からCとC++とが区別できなくなったようだ。

290 :デフォルトの名無しさん:03/05/27 05:46
C言語+SDKだけで開発してる香具師ってまだ居るの?
漏れは3.1以来やってないが…

291 :デフォルトの名無しさん:03/05/27 08:18
>>290
普通わざわざCじゃやらねぇべさ。
尤も、C++と言ってもC++らしい使い方できない香具師が多いのだが。

292 :デフォルトの名無しさん:03/05/27 08:29
>>288
間違えていたことを教えたならスマソ。
>>289
いや、書き忘れです。でも、本当に区別できてないかも。
>>290
僕がその香具師です。ボタンとかもリソース系を一切使わずに、コードのみ
で。昔、将棋もそれで作りました。
>>291
多分僕がそう。違うだろうけどCはコンソールC++はウインアプリとその違い
だけで区別しています。

293 :デフォルトの名無しさん:03/05/27 09:28
よく分かっていないのなら、こんな所で回答しない方が良いのでは :)

294 :デフォルトの名無しさん:03/05/27 10:59
>>293
あちらこちらで同じような質問がおっぱおあったので。

295 :デフォルトの名無しさん:03/05/27 11:33
>>292
オブジェクト思考ができずに使うC++はC+お仕着せのクラスだけの代物。
C++を使うと言うからには、(クラスを設計するだけが全てではないが)
データのカプセル化、処理の抽象化ができなければ意味がない。
具体例を挙げるわけにはいかないので曖昧な表現で申し訳ないが、
例えば>>286に挙げられているC++の講座などは勘違いの代表例かと。

確かにGUIはクラス化すると継承させて綺麗に実装できるように見えるのは事実。
しかし、C++の本領は寧ろ、GUIとは切り離された、アルゴリズムの実現で
発揮されるものだと思う。
なので、C++(≠VC++)を使いこなそうと思うなら、例えば日付でもいい、
例えば座標空間でもいい、そうしたものを巧く抽象化したクラスを実装してみてはどうだろう。

と、これだけだとC++スレに行けと言われそうなのでCのフォローも。
C++を完全に使いこなすことは難しい(と言うか多分無理)だが、
Cならライブラリも含めて多いに使いこなせると思う。
そのためにも、既存の入門書の嘘に振り回されずに
自分でマニュアルを見、テストコードを書き、
ansiなどの仕様を確認する能力を養うべきだろう。
その技術はC++でも立派に役に立つ。
#結局C++かい>自分

296 :デフォルトの名無しさん:03/05/27 11:42
C >>>>>>>>>>>>>>>>>>>>>>> C++


297 :デフォルトの名無しさん:03/05/27 11:47
C++というかOO関係のスレへ逝けや

298 :デフォルトの名無しさん:03/05/27 11:54
C++相談室に来られては困るから、OO厨房は戦場では必要なしスレでどうぞ。

299 :デフォルトの名無しさん:03/05/27 12:07
私はオブジェクト思考に拘っているわけじゃないんで念の為。
長年構造化に拘ってきた結果として、クラスという
データのカプセル化(など)に着目しているだけだ。
まぁ、構造化プログラミングができない奴から見れば
オブジェクト思考との区別がつかないのも仕方ないとは思うが。

300 :デフォルトの名無しさん:03/05/27 12:11
「オブジェクト“思考”ができずに使うC++〜」と言いだしたのは誰なのかと
これだからOO厨は

301 :デフォルトの名無しさん:03/05/27 12:24
>>300>>298>>297
で、あなたたちはC++をどう捉えているの?

302 :デフォルトの名無しさん:03/05/27 12:41
#include <stdio.h>

int main( void )
{
  while( 1 )
  {
    printf( "ぬるぽ" );
  }
  return 0;
}

303 :デフォルトの名無しさん:03/05/27 12:44
#include <stdio.h>

int main()
{
 for(; ;)
 {
  printf("ガッ >>302");
 }
 return 0;
}

304 :デフォルトの名無しさん:03/05/27 13:12
>>301 スレ違い

305 :デフォルトの名無しさん:03/05/27 13:29
>>304
禿しく同意

306 :デフォルトの名無しさん:03/05/27 16:27
pascalの型定義をC風に書くにはどうすればいいんでしょうか?

pascalだと
type line = packed array[1..10] of char;
var x = line;
な感じです。

307 :デフォルトの名無しさん:03/05/27 16:32
それはいったい何をしたいコードなのか書けよ。
それともpascalも知らない厨房には聞いていないということか?

308 :デフォルトの名無しさん:03/05/27 16:34
>>306
typedef char line[10];
line x;

309 :デフォルトの名無しさん:03/05/27 16:37
C では添字が 0 から始まる点に注意ナ。

310 :デフォルトの名無しさん:03/05/27 16:41
struct person{
char name[10];
char address[20];
char age[3];
}p;
構造体のメンバを参照するとき,p.nameのようなメンバ名ではなく
「上からi番目のメンバ」のように指定することはできないでしょうか?
どなたか教えてください。

311 :デフォルトの名無しさん:03/05/27 16:41
packedってなに?

312 :デフォルトの名無しさん:03/05/27 16:42
>>310
できません。配列を使いましょう。

313 :デフォルトの名無しさん:03/05/27 16:48
>>310
enum person_index_t
{
 PERSON_NAME, PERSON_ADDRESS, PERSON_AGE
};

char* person_entry(struct person* p, enum person_index_t i)
{
 switch(i)
 {
 case PERSON_NAME: return p->name;
 case PERSON_ADDRESS: return p->address;
 case PERSON_AGE: return p->age;
 default: assert(0);
 }
}

生の値で指定するのは超絶危険行為。
列挙子を使う事。

314 :デフォルトの名無しさん:03/05/27 16:51
>>313
> 生の値で指定するのは超絶危険行為。

どういうこと?

315 :デフォルトの名無しさん:03/05/27 16:55
enum person_index_tを配列の添え字にしてはいけないんだろうか。

316 :デフォルトの名無しさん:03/05/27 16:57
>>310
union使ったら?

317 :310:03/05/27 17:03
お返事ありがとうございます。
何とかループで上のメンバから順番に処理したいのですが・・・
やはり312さんの言うとおり配列に1つ1つ入れるしかないのでしょうか

318 :デフォルトの名無しさん:03/05/27 17:06
ループ使わなければならないほどメンバーが多いのか?
俺ならひとつずつ処理するが。

319 :306:03/05/27 17:33
>>307
型をそう定義するというだけで特に何をしたいというわけではありません。
「型定義」といって同じようにCで通じるのかと思い書いてみました。
pascalしか知らない日本語の不自由な厨房でごめんなさい。

>>308
サンクスコ、やってみます。

>>309
了解

>>311
配列の各要素のメモリ領域を小さめに確保するみたいです。
実行結果に変わりは無いはずです。


320 :デフォルトの名無しさん:03/05/27 17:36
>>319
型定義はわかるが、packedなんて知らないし。

調べてみたが、pascalって配列にも詰め物がつく場合があるのか・・・・

321 :デフォルトの名無しさん:03/05/27 17:42
教訓:プログラマ界での通用度
C>日本語>英語>その他>>>>>pascal

322 :デフォルトの名無しさん:03/05/27 17:43
>>320
Cでもつくときはつきますが何か。

323 :デフォルトの名無しさん:03/05/27 17:45
>>322
実際には多くメモリを確保しても、sizeofの結果にその部分が反映されることはないだろ?

324 :デフォルトの名無しさん:03/05/27 17:45
>>320
あるだろね。というかpaddingは言語に関係なく必要だったりする。
それをプログラマに意識させるかどうかは別として。

奇数番地から始まるint(16bitとか32bit整数)を参照したら、
bus errorとかの例外が発生するプロセッサがあるしね(68kなど)。
x86でもそういう参照の仕方をしたら例外が発生しないまでも、
性能が大幅に落ちるし。

325 :デフォルトの名無しさん:03/05/27 17:55
>>314
person(&p, 0); とか、生の値でやるのが危険だということ。
仕様変更に弱いし、読みにくいし。

>>317
enum person_index_t
{
 PERSON_NAME, PERSON_ADDRESS, PERSON_AGE,
 PERSON_NUM /* ← これを追加 */
};

にして、

int i;
struct person p;
for(i = 0; i < PERSON_NUM; ++i)
{
 char* entry = person_entry(&p, (person_index_t)i);
 /* entry を使ってほにゃらら */
}

とすれば可能。
一応ね。
ただ、保守はしにくくなると思われ。

326 :デフォルトの名無しさん:03/05/27 17:59
>>325
あ、やっぱりマジックナンバーのことか。
Perlだとやっちゃう人多いかも(モードの指定とか)

327 :デフォルトの名無しさん:03/05/27 18:01
>>310
つーか、何がやりたいのさ。
>>323
sizeofに反映されなかったらmalloc()できませんが。


328 :デフォルトの名無しさん:03/05/27 18:05
>>327
え!? じゃあchar a[23];と定義した場合、sizeof s==23になるとは限らないの!?
もしそうならsizeof s/sizeof s[0]で要素数を得るというポピュラーな方法が使えなくなるけど。

329 :328:03/05/27 18:06
sizeof aだ(鬱)

330 :デフォルトの名無しさん:03/05/27 18:16
>>328
sizeof に反映されるからこそ、その方法が使えるのでは?
単体の sizeof でも padding を含めたサイズを返す、
ということを「反映される」と表現してるんじゃない?

331 :デフォルトの名無しさん:03/05/27 18:54
hBitmap = LoadBitmap(hInst, "IDB_BITMAP1");

ビットマップのハンドルを取得するのはこれではいけないんでしょうか?
どうしてもビットマップの表示がうまくいかず、ここに原因があることは分かったんですが……

332 :デフォルトの名無しさん:03/05/27 18:56
……

333 :デフォルトの名無しさん:03/05/27 19:00
>>331
>>1くらい読め。

334 :デフォルトの名無しさん:03/05/27 19:00
何の話?>>331
環境依存ならその環境のスレに行ってください。

335 :デフォルトの名無しさん:03/05/27 19:04
>>331
来ると思ったぜ、おまえ絶対1読んでないだろ。
教えてもいいが示しが付かんのでとりあえずWin32APIスレに行け。

336 :デフォルトの名無しさん:03/05/27 19:06
>>331
じゃ、このスレ的な解答。

・コンパイラからは警告が出なかったか。
・関数の仕様(マニュアル)はよく読んだか。
・変数の型は合っているか、引き数の型は合っているか。
以上チェックするように。

337 :デフォルトの名無しさん:03/05/27 19:07
良回答者だ。

338 :331:03/05/27 19:09
API質問スレなんてあったんですね……
大変失礼いたしましたm(_ _)m

339 :331:03/05/27 19:10
>336
どうもありがとうございます。
それで解決しないようでしたらAPI質問スレの方に行かせていただきます。


340 :bloom:03/05/27 19:13
http://homepage.mac.com/ayaya16/

341 :デフォルトの名無しさん:03/05/27 20:03
>>317
1つずつ入れて行けばいいのですよ。
何を困っているのか解りませんが・・・。

>>318
配列から配列へ、互いに添え字やポインタのインクリメントが
使える代入の繰り返し処理でしかループは使わないよな。

342 :デフォルトの名無しさん:03/05/27 20:53
データファイルを出力する関数は何ですか?

for(i=0;i<=n;i++){
printf("%d,%f\n",i,A[i]);
}

画面に表示される数字の羅列をテキストファイルに出力して
後からエクセルなんかにテキストファイルから値を
インポートしてグラフを書きたいのです。
助けて下さい。

343 :342:03/05/27 20:57
アゲー
環境はリナックスです。おながいします。

344 :デフォルトの名無しさん:03/05/27 20:58
fprintfとか使えばいいけど、
面倒ならリダイレクトしとけばいいんじゃね?

345 :342:03/05/27 21:01
>>344
ありがとうございます!
試して見ます!

346 :デフォルトの名無しさん:03/05/27 21:11
>>342
プログラム無改造で、 ./a.out > hoge.txt

347 :動画直リン:03/05/27 21:13
http://homepage.mac.com/hitomi18/

348 :デフォルトの名無しさん:03/05/27 21:19
ポインタについて質問です。
10分ほど本を読んだら理解したつもりになりました。確認させてください。

ポインタとは、
変数のアドレスを格納するアドレス。変数の先頭アドレスそのものではなく、
先頭アドレスという値を格納した別の場所であることに注意。ポインタ自身は
何のポインタであろうが32ビットのlong型変数。

なぜポインタを利用するかは、
第1の利点は、関数が実行されるとき、実際にはPC内で引数の変数を新たに
コピーして作成している。なので変数によっては(文字列や構造体や浮動小数点)
メモリを大きく消費する。ポインタにしておけばどんな変数でも32ビットですむ。
そう考えれば逆に、intなどの大してメモリを消費しない変数ではポインタを
使用しない場合が多い。
第2の利点は、外部からポインタの実体を変更したらそれが反映する。
関数だと戻り値は1つしか作れないが、ポインタならばいくつでも外部から
変更が可能。

以上です。間違ってたら指摘してください。

あと、ポインタのポインタとは具体的にどのようなケースで使用するのか教えてください。

349 :デフォルトの名無しさん:03/05/27 21:29
ポインタのポインタ例文

char *aho="aho";
char *baka="baka";
char *manuke="manuke";

char *text[] = {aho,baka,manuke,aho};

void hoge(int n)
{
printf("%s\n", *(text+n)); // text(=&text[0])がポインタのポインタ
}

350 :デフォルトの名無しさん:03/05/27 21:30
解釈はちょっと変。

第1の利点は今時利点じゃないね。

第2の利点は説明が変だけどそう言うこと。

ポインタのポインタは、ポインタの値を関数で変更したいときに使える。
即ち、整数を関数で変更するときに整数のポインタを渡すが如く
ポインタを関数で変更するときにポインタのポインタを渡すわけだ。

351 :デフォルトの名無しさん:03/05/27 21:33
>>348
> 変数のアドレスを

NG: 変数とは限らない。(関数へのポインタ、文字列定数へのポインタなどもある。)

> 格納するアドレス。変数の先頭アドレスそのものではなく、
> 先頭アドレスという値を格納した別の場所であることに注意。

意味不明。

> ポインタ自身は何のポインタであろうが32ビットのlong型変数。

NG: そもそも long 型が 32bit とは限らんし。

> 第1の利点は、...

NG: 今時メモリーなんか気にするな。
  気にするのは、配列や配列を含んだ構造体軟化の時だけだ。
  そう言う風にポインタ使うと遅いし、コードがでかくなることが多い。

> 第2の利点は、...

OK: 日本語がが変だけど、関数内で複数の値を戻せると言うなら OK と見なす。

> あと、ポインタのポインタとは具体的にどのようなケースで使用するのか教えてください。

10年早いと思う。

352 :デフォルトの名無しさん:03/05/27 21:33
>>348
ポインタのポインタの使い道がわからないっていうやつ結構多いけど、
intのポインタを使うのと同じ理由でポインタのポインタが使えるだろ。
関数に渡してポインタの指す先を変更してもらいたいなんてのも一つの例だし。
複数の場所で一つのポインタを共有したいときなんかも。

353 :352:03/05/27 21:35
かぶった。
逝ってくる・・・。

354 :342:03/05/27 21:37
>>346さん!
本当に有難うございます!
助かりました!
y(^v^)y

355 :y(^v^)y :03/05/27 21:51
y(^v^)y

356 :デフォルトの名無しさん:03/05/27 22:14
>>349
あんまり例がよくないような。textそのものはポインタの配列だし。
確かに、*(text+n)を評価するときにtextはポインタに縮退するけど。

357 :デフォルトの名無しさん:03/05/27 22:22
ポインタのポインタ関連の話なのですが、2次元配列のmallocの仕方を教えてください。
具体的にはchar型でn*mの2次元配列をmallocしたいのです。
char *b;
char **p;
b=(char *)malloc(n*m*sizeof(char));
p=(char)malloc(m*sizeof(char));
p=b;

でだめでした・・・。

358 :デフォルトの名無しさん:03/05/27 22:24
ミス
p=(char)malloc(m*sizeof(char));


訂正

p=(char *)malloc(m*sizeof(char));



359 :デフォルトの名無しさん:03/05/27 22:33
>>357-358
ちょっとぐらいググれよ。
"malloc 2次元配列" でググレばたくさん出てくるぞ。

とりあえず http://www.borland.co.jp/qanda/lang/l0001842.html とか。

360 :デフォルトの名無しさん:03/05/27 22:37
>>358
2次元配列分の一次元配列を確保し、利用方法で逃げるのが常道。

char *pArray = (char *) malloc(n * m * sizeof(char));
for (im = 0; im < m; im++) {
for (in = 0; in < n; in++) {
pArray[in + im * n] = 0;
}
}


361 :デフォルトの名無しさん:03/05/27 22:37
C++では、単行変換されたあと算術変換されますが、
Cではどのような順序で変換が行われるのでしょうか?

362 :デフォルトの名無しさん:03/05/27 22:40
>>361
質問が曖昧過ぎる。

363 :361:03/05/27 22:46
例えば、
char char_dt;
float float_dt1,float_dt2;
long long_dt;
double double_dt;

float_dt2 = char_dt * long_dt +float_dt1 / double_dt;

のような式の場合、

char_dtとlomg_dtの計算のときは、いっきにlongに変換されるのでしょうか?

364 :デフォルトの名無しさん:03/05/27 22:51
一気にの意味がわからん
途中があるのか?

365 :デフォルトの名無しさん:03/05/27 22:52
>>363
アセンブラリストを出して追え。

366 :361:03/05/27 22:55
>>364
c++では、charがintになったあとlongになってるらしいんで

367 :デフォルトの名無しさん:03/05/27 23:00
毎日毎日時間が空いてて暇をもてあましている通信高校生ですが、
日々ネトゲと2chしかやらないのもどうかと、何かしらの勉強でもしてみようかと思い立ちました。
それなりに難しくても実用的なものは無いかなーと思ってたんですが・・・
その中で見つけた候補の一つがC言語です。

C言語は知っていると何が出来ますか?
C++等似通ったものも幾つかあるようですが、その違いは?
何というか本当に何も知らない状態なんで的をいてなくて曖昧で阿呆な質問、
その上微妙にすれ違いだと思うんですが他に該当スレが見当たらないもので。
暇な人、居たら教えてくれると幸いです。良さそうなら明日あたり書店にでも出向いてみようと思います

368 :342:03/05/27 23:26
>>367
まずlinux導入してみたらどうよ?
C言語は元々unixから生まれたもんだよ。

「Windowsなんて糞。」
なんて事を回りに言えるようになりますよ。
それ言うだけでコイツlinux使えるのかよって一般人はビビルよ。


>>346これがリダイレクトするっつう事ですかね。

369 :デフォルトの名無しさん:03/05/27 23:42
>>348
誰も突っ込まないので突っ込んでおく。

>ポインタとは、変数のアドレスを格納するアドレス。

「アドレスを格納するアドレス」って言うのはどういう事よ?(w
ポインタの前に「メモリ」と「アドレス」の勉強しる!

370 :デフォルトの名無しさん:03/05/27 23:46
>>369
>>351 ですでに突っ込まれてるよ。

371 :デフォルトの名無しさん:03/05/28 00:17
>>360
sizeof(char)なんてやめろYO!

372 :デフォルトの名無しさん:03/05/28 00:49
>>360
ループで回さないでcalloc()使えyo!

373 :360:03/05/28 00:58
>>371
おっといけない、元のコードに引き摺られた。
>>372
まぁ、ループの回し方のサンプルと言うことで。

374 :デフォルトの名無しさん:03/05/28 01:06
>>368
>「Windowsなんて糞。」

漏れはLinuxは好きだけど、こういう低レベルなこと言うヤシを増やしてほしくないぞw

375 :デフォルトの名無しさん:03/05/28 01:10
>>374
最後の行がオチだったんじゃないかな。

376 :デフォルトの名無しさん:03/05/28 01:32
こんばんわ。
出力ファイル名をコマンドラインの第一引数で受け取るというプログラムを
作ってもらえませんか?
出力ファイル名は12文字以内のフリーフォーマットです。

377 :デフォルトの名無しさん:03/05/28 01:34
376ですが、
 C言語でお願いします。

378 :デフォルトの名無しさん:03/05/28 01:35
こらー!宿題か!

379 :デフォルトの名無しさん:03/05/28 02:01
376です。
はい、宿題です。
どうしてもわからないもので・・^^;

380 :デフォルトの名無しさん:03/05/28 02:03
>>379
>>1読め。宿題スレは別にあるぞ。

381 :デフォルトの名無しさん:03/05/28 02:09
あ、はい。わかりました。
すみません。

382 :デフォルトの名無しさん:03/05/28 04:07
文字列の配列の中身をかえる関数をかいたのですがうまくいきません。
関数内で暴走してしまいます。
main()
{
char str[20][20];
int i;
ReadSttring(str);
for(i=0 ; i<20 ;i++){
printf("%s", str[i]);
}
}

void ReadString(char str[20][20])
{
FILE *fp;
中略
for(i=0 ; i<20 ; i++){
fets(str[i], 20, fp):
}
}


383 :カーニハン三世:03/05/28 04:26
>>382
fets()関数はfgets()関数の間違いだと思いますが、
まずそのfgets()関数の戻り値のNULLチェックをしましょう。


384 :デフォルトの名無しさん:03/05/28 05:02
多次元配列のアドレスを示すポインタをつくりたいのですが、今は単純に以下のように作っています。
------------------------------------------------------
    int dat0[5][3];
     ……

    {
     int data;
     int *pDat;
     pDat = (int*)dat0;
     data = checkMatrix( pDat, 3, 2 ); // [3][2]の値を得る
    }

    // ノード [a][b] に アクセス する
    int checkMatrix( int *pMtx, int a, int b ) {
     return pMtx[a*3 + b];
    }
------------------------------------------------------
しかし、次元は固定なのでもっとスマートにtypedef を 用いて作りたいのですが、
 typedef int MDAT[5][3];
 MDAT dat0;
  ……
この時のMDAT型データへのポインタ pDatは
 MDAT *pDat;
 pDat = &dat0;
でいいのでしょうか?また、ノードへのアクセス関数は

 // ノード [a][b] に アクセス する
 int checkMatrix( MDAT *pMtx, int a, int b ) {
  return pMtx[a][b]; // それとも return (*pMtx)[a][b]; か ?
 }

でいいのでしょうか?どうか、ご教授お願いします。

385 :デフォルトの名無しさん:03/05/28 05:20
int (*pDat)[3];

386 :デフォルトの名無しさん:03/05/28 06:24
レジスタ変数使うと処理速度あがると教科書に書いてあったのに
実際使ってみると遅くなってるんですが
何故でしょうか?
僕の環境のせいでしょうか?

387 :386:03/05/28 06:40
#include <stdio.h>
#include <time.h>


int main(void)
{
register unsigned int i_r, j_r;
unsigned int i_a, j_a;
unsigned long sum = 0;
time_t time1,time2;

/*レジスタ変数の場合*/
time(&time1);
for(i_r = 0; i_r < 30000; i_r++){
for(j_r = 0; j_r < i_r; j_r++){
sum++;
}
}
time(&time2);
printf("sum = %lu , time = %f\n",sum,difftime(time2,time1));


388 :386:03/05/28 06:41

sum = 0;
              /*レジスタ変数を使わないとき*/
time(&time1);
for(i_a = 0; i_a < 30000; i_a++){
for(j_a = 0; j_a < i_a; j_a++){
sum++;
}
}
time(&time2);
printf("sum = %lu , time = %f\n",sum, difftime(time2,time1));

return 0;
}

こんな感じで実行したら
sum = 449985000 , time = 3.000000
sum = 449985000 , time = 2.000000
こうなりました。

389 :デフォルトの名無しさん:03/05/28 07:03
アセンブラを見て考えたら。

390 :デフォルトの名無しさん:03/05/28 07:48
いまどきのコンパイラならregister修飾なんか黙殺だろ。

391 :デフォルトの名無しさん:03/05/28 08:13
黙殺ならまだいいがかえって足引っ張ってるんじゃないか?

392 :デフォルトの名無しさん:03/05/28 08:32
何にせよtimeではねぇ。精度1秒では何とも言い難い。

393 :386:03/05/28 09:02
i_a,j_aにvolatile付けたら
sum = 449985000 , time = 3.000000
sum = 449985000 , time = 7.000000
こうなりました。
コンパイラで最適化されてたと言う事でしょうか?
余計な修飾子つけるよりコンパイラに任せた方がイイというわけですか・・・
ちなみにBorland C++ Compiler 5.5使いました。
レジスタより早くなるってのはどういう原理で早くなってるのだろう・・・

>>392
もっと精度を高くするには自分で関数つくらないとダメなんでしょうか?

394 :デフォルトの名無しさん:03/05/28 09:28
>>393
clockを使う。
time1 = clock();
for(i_r = 0; i_r < 30000; i_r++){
for(j_r = 0; j_r < i_r; j_r++){
sum++;
}
}
time2 = clock();
printf("sum = %lu , time = %f\n",sum, (double)(time2 - time1) / CLOCKS_PER_SEC);

で↓にgcc -Sで吐かせたもののclock〜clockまでを貼り付けておく。
ほとんど変わらなかった。

395 :394:03/05/28 09:29
レジスタ変数の場合
call _clock
movl %eax,%esi
xorl %edx,%edx
.align 4
L14:
xorl %eax,%eax
leal 1(%edx),%ecx
cmpl %edx,%eax
jae L13
.align 4
L18:
incl %ebx
incl %eax
cmpl %edx,%eax
jb L18
L13:
movl %ecx,%edx
cmpl $29999,%edx
jbe L14
call _clock

396 :デフォルトの名無しさん:03/05/28 09:30
レジスタ変数を使わないとき
call _clock
movl %eax,%esi
xorl %edx,%edx
addl $16,%esp
.align 4
L24:
xorl %eax,%eax
leal 1(%edx),%ecx
cmpl %edx,%eax
jae L23
.align 4
L28:
incl %ebx
incl %eax
cmpl %edx,%eax
jb L28
L23:
movl %ecx,%edx
cmpl $29999,%edx
jbe L24
call _clock

397 :394:03/05/28 09:32
>>394
× gcc -S
○ gcc -O2 -S

398 :386:03/05/28 09:56
>>395,396って意味不明。
いちいちコンパイルしなくても実行結果がわかるって事です?
もしそれなら便利な機能だけど・・・どこをどうみたらいいのやら
コンパイラのマニュアル見てみるか・・

399 :デフォルトの名無しさん:03/05/28 10:10
>>398
> いちいちコンパイルしなくても

いやコンパイルした結果だ。機械語を見てもいいけど、それじゃなおさら分かりにくいだろ。

400 :386:03/05/28 10:33
borlandC++ではコンパイルしてもそんなの出てこないです。
とりあえずgccってのでやってみよう。
分かる人には>>395、396を見ただけで結果が理解できるのでしょうか?

401 :394:03/05/28 10:46
>>400
eax、edx、ebxとかがレジスタ。
レジスタ変数にすると、このレジスタに優先的に割り付けられる。
しかし両者を比較しても、ラベル名が違うのとaddl $16,%espが
追加されているくらいで、レジスタへの割り付けられ方は同じ。
registerの指定が効いていないってこと。
ちなみにi_r、i_aがedxにj_r、j_aがeaxにsumがebxに割り付けられている。

bccでも似たようなものを吐かせることができるはずなので
試してみてください。(オプションは違いますが)
コンパイラによって多少差がありますので。

402 :386:03/05/28 11:12
実行時間じゃなくてメモリへの割り当て具合が分かると言うことでしょうか?
奥が深い。
理解できるようにがんばるっす!

403 :384:03/05/28 11:56
>>385
すいません。まだよく判らないので教えてください。

 typedef int MDAT[5][3];
 MDAT dat0;
  ……
 int (*pDat)[3];
 pDat = &dat0;

ということなんでしょうか?
また、その時のCheckMatrix関数の引数はどのように記述すればいいのでしょうか?

int (*pDat)[3];
こういう記述は初めてなので、私はげしく勘違いしてるかもしれませんが
よろしくお願いします。



404 :デフォルトの名無しさん:03/05/28 12:06
>>403
要素数3のint配列を指すポインタ 括弧をつけないとint *の配列になってしまうからつけた。

int dat0[5][3];
int (*pDAT)[3]=dat0;

405 :山崎渉:03/05/28 12:30
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

406 :デフォルトの名無しさん:03/05/28 13:31
書籍の専門スレって何処ですか?

407 :デフォルトの名無しさん:03/05/28 13:32
癇にさわる書き込みだな。

408 :デフォルトの名無しさん:03/05/28 13:35
>>406
推薦図書/必読書のためのスレッド PART 10
http://pc2.2ch.net/test/read.cgi/tech/1051496506/

409 :デフォルトの名無しさん:03/05/28 13:39
>>406
なぜこのスレで質問した?

410 :デフォルトの名無しさん:03/05/28 13:45
1に書籍は専門の別スレがあるとあったので・・・
書籍、で検索して出てこなかったのでここで質問してみました。
関連スレのリンクも張ってあると良いかなーとか思ったりして

411 :名無しさん:03/05/28 13:51
関連ではないけどね
これを関連といってしまうと、他の言語も関連だと思うし

412 :デフォルトの名無しさん:03/05/28 13:55
VCなんですが、あるWindowsで動いてるプロセスの指定したメモリアドレスの値を取得したい場合は
どうしたらいいのでしょうか?

たとえば起動しているaaa.exeのメモリ0x41000の値を10進数で表示したいという感じです


413 :1:03/05/28 14:00
わざわざ「ここ注目」と書き加えたのに。

414 :デフォルトの名無しさん:03/05/28 14:00
>>412
スレ違い

415 :デフォルトの名無しさん:03/05/28 14:01
>>412
ReadProcessMemoryだが、スレ違い。

416 :デフォルトの名無しさん:03/05/28 14:04
初心者には標準Cでできるかどうか判断する力はない罠

417 :デフォルトの名無しさん:03/05/28 14:05
>>416
だから、みんな教えてるんじゃないか

418 :デフォルトの名無しさん:03/05/28 14:27
ごめんなさい、探してきます

>>415
取っ掛かりが分かった気がします
ありがとうございました。
まだ不明な点はのこっていますが移動先で聞いてみます


419 :デフォルトの名無しさん:03/05/28 14:49
16桁の2進数の変数aを10進数に変換したいのですが
どうすれば良いですか?

420 :デフォルトの名無しさん:03/05/28 14:54
strtolしたあとにsprintf

421 :デフォルトの名無しさん:03/05/28 18:42
switch文で、

選んで入力してください

 1.・・・
 2.・・・
 3.・・・

=>[3]

というものを作っているのですが、たとえば「3」を入力するとプログラムを終了させるようにするには
どのようにすればいいのでしょうか?

422 :名無しさん:03/05/28 18:44
exit(1);

を実行する

一応検索して調べといてくれ
exitについて

423 :名無しさん:03/05/28 18:47
あ、
#include <stdlib.h>
をインクルードしておいてくれ
ん?
この文だと二重インクルードになって舞うか?

この関数は、プログラムを終了させてくれる関数です
引数に1を渡すと、異常終了だったっな・・・

424 :421:03/05/28 18:50
お手数かけました。早速調べてみたら。ありました。
ほんとにありがとうございました

425 :デフォルトの名無しさん:03/05/28 18:56
>>421
abort();

426 :デフォルトの名無しさん:03/05/28 19:37
abort(); イキナイ

427 :デフォルトの名無しさん:03/05/28 20:07
>>424
exit をしなくても、プログラムが終わるようにプログラムすればそれで良い。
 int main() {
  printf("Hello, world!¥n");
  return 0;
 }
には exit はないが、プログラムは終わる。
main にまで戻って return すればプログラムは終わるのだ。

>>423
二重インクルード防止コードは全ての標準ヘッダファイルに書かれている。
そのような心配はする必要ない。

>>419
「進数」という概念は値自身の持ってる属性ではない。
値を表示しようとした場合に生じてくる属性である。
例えば、
 a = 0x20;

 a = 32;
は人間が読む分には違いがあるが、値は全く同じである。
また、a の内容を全く変える事なく
 printf("0x%02X¥n", a);
は 0x20 を表示するし、
 printf("%d¥n", a);
は 32 を表示する。

428 :デフォルトの名無しさん:03/05/28 20:26
exit使ってmain以外でプログラムを終了させることは構造化を乱すことになるとか。
うーん?

429 :デフォルトの名無しさん:03/05/28 20:31
>>427
> #include <stdlib.h>
> をインクルード

という文章が2重インクルードになってるという意味だと思われ。

>>428
main内でもexitはいやんだろ。本当は関数途中でのreturnもうれしくない。
もしかしたら関数の最後にクリーンアップ処理が書いてあるかもしれない。

430 :デフォルトの名無しさん:03/05/28 20:55
プログラムの終了コードはぬるぽに統一しよう!!


431 :デフォルトの名無しさん:03/05/28 21:08
int型変数の各桁の値を取り出す方法はありますか?
例えば変数に1234という値が入っていて、10の位を取り出す場合
3という値を得たいのです。よろしくお願いします。

432 :デフォルトの名無しさん:03/05/28 21:10
10で割り、その値を10で割った余りを求める。

433 :デフォルトの名無しさん:03/05/28 21:11
>>431
int a = 123;
printf("%d\n", a / 10 % 10);

434 :デフォルトの名無しさん:03/05/28 21:11
>>431
あります。

435 :デフォルトの名無しさん:03/05/28 21:17
あ、そうか…ありがとうございます

436 :デフォルトの名無しさん:03/05/28 21:50
switch(n){

case 1:
while( ( c = getchar() ) !=EOF)
putchar( test1(c) );

break;

case 2:
while( ( c = getchar() ) !=EOF)
putchar( test2(c) );

break;

        ・
        ・
        ・

}
という風に作ったのですが、入力→出力→入力→出力→・・・
となってしまいmainに戻れません。
break;の使い方が違うのでしょうか。
どうすればいいんでしょうか。どなたかお願いいたします。

437 :384:03/05/28 21:57
>>385
>>404
ありがとうございました。
ステップアップ目指してぜひ習得したいと思いますが、

すいません、もう2点質問いいでしょうか?

int dat0[5][3];
int (*pDAT)[3]=dat0;

1)
このポインタを用いての要素へのアクセスは
pDat[a][b] でいいんでしょうか?

2)
pDAT = (キャスト?)0x80000;

の場合のキャスト書式はどのようになるのでしょうか?

よろしくお願いします。



438 :436:03/05/28 22:00
すいません、戻るではなく終了でした。戻るってのは前にwhile(1)使ってたからでして・・

439 :436:03/05/28 22:20
またまたすいません、自己解決しました。


440 :デフォルトの名無しさん:03/05/28 22:26
C言語って何が出来るの?
興味持ったから少し検索して初心者向けのページとか見たりしてみたんだけど、
何処も「機械に命令を出す事が出来る」程度にしか書いてないんだよね。
それを使って何が出来るのかが知りたいのだけれど・・・

例えばランチャー等のアプリとかもC言語で作れるんですか?
ゲームなんかもC言語で作られてるものが多いと聞いた記憶があるんですが、
要するに何でも作れるって事なんでしょうか。

441 :デフォルトの名無しさん:03/05/28 22:30
431でも出てた任意の整数の任意の桁の数値を抽出するソース教えてください。
例)1234と言う数字から10の位の3と言う数字を抽出する



442 :デフォルトの名無しさん:03/05/28 22:33
>>441
死ね

443 :デフォルトの名無しさん:03/05/28 22:39
>>441
どっかの学校の宿題なのか?

444 :デフォルトの名無しさん:03/05/28 22:39
>>440
心配するな、お前には何も作れないから。

>>441
int extract(int n, int k)
{
 switch(k){
 case 4:
  return n / 1000 % 10;
 case 3:
  return n / 100 % 10;
 case 2:
  return n / 10 % 10;
 case 1:
  return n / 1 % 10;
 default:
  fprintf(stderr, "対応してね−よ。\n");
  return 0;
 }
}

445 :デフォルトの名無しさん:03/05/28 22:43
最近C言語初めてばかりのものですが自分も441の方法知りませんので知りたいです。
上の433に書いてる>>431って432の書き間違いですよね^^;
>>443
441のソースてか命令文って学校の宿題にでるぐらい簡単なことなのですか?


446 :デフォルトの名無しさん:03/05/28 22:45
選択ソートのプログラムで標準入力から最大100個までの配列データを
読み込んで小さい順にソートし、結果を出力するプログラムを作る。
作ってはみたんですが、例えば50個のデータをソートすることが出来ませ
ん。どうすればいいんですか?ちなみに最初に要素の個数を指定することはできません。


447 :デフォルトの名無しさん:03/05/28 22:46
>>446
最後の行をもっと詳しく

448 :431:03/05/28 22:47
>>441は私じゃないですよ…

449 :デフォルトの名無しさん:03/05/28 22:48
>>445
10の位はその数字を10で割ったものを10で割ったあまりだということくらい理解できませんか?

450 :デフォルトの名無しさん:03/05/28 22:52
>>446
こっちのスレにいってくれ。

C/C++の宿題やらせてください。7代目。
http://pc2.2ch.net/test/read.cgi/tech/1053963794/150

451 :デフォルトの名無しさん:03/05/28 22:52
>>445
算数の問題だと思うんだけど…

452 :441:03/05/28 22:54
>>449
おお そういうことだったのか^^;
頭の回転悪くて理解できなかったw

453 :デフォルトの名無しさん:03/05/28 22:54
>>446
要素の個数を指定できるように作り直せ


454 :デフォルトの名無しさん:03/05/28 22:55
>>448
わかってるよ。
あんたは直後のレスで理解したんだろ?
問題はそれで理解できずにさらに聞くやつら。
ってゆーかもしかして同じ学校?

455 :デフォルトの名無しさん:03/05/28 23:08
>>447
>>453
要素の数を指定してはいけないんです。

456 :デフォルトの名無しさん:03/05/28 23:12
>>455
あれだけの情報でまともな答が返ってくると思ってんの?
つーか、宿題スレにカエレ

457 :bloom:03/05/28 23:13
http://homepage.mac.com/ayaya16/

458 :デフォルトの名無しさん:03/05/28 23:19
リダイレクトって何ですか?

459 :デフォルトの名無しさん:03/05/28 23:24
とりあえずググれ

460 :デフォルトの名無しさん:03/05/28 23:44
>>446

#include<stdio.h>
#define N 100

main(){
int i,j,min,x[N];
for(i=0;i<N;i++)
scanf("%d",&x[i]);

for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
if(x[i]>x[j]){
min=x[i];
x[i]=x[j];
x[j]=min;
}
}
}

for(i=0;i<N;i++)
printf(" %d ",x[i]);
printf("\n");
}

これを改良してデータ数が100未満でも動くようにして下さい。

461 :デフォルトの名無しさん:03/05/28 23:47
宿題スレに行け
しかもまだ情報不足

462 :デフォルトの名無しさん:03/05/28 23:52
質問させてくださいっ。

unsigned longに4294967295(0xffffffff)を入れて
printf()しようとしたところ"%d"では上手く表示できませんでした。
(2147483647:0x7fffffff)までは上手く表示できることを確認。

で、ネットで4294967295をprintf()で表示させる方法を探したところ
"%lu"、"%u"を発見。やってみたところ上手くいったんですが、
この"%lu"、"%u"って一般的に使用しますか?

既出だったらすみませんがよろしくおねがいしますm(__)m

463 :440:03/05/28 23:58
>444
そんなみ身も蓋も無い事言わないで教えて下さいよ つД`)
それともその返答の中にはお前以外なら作れる、つまりC言語でアプリとか作れる・・・という意味が込められてるんでしょか

464 :デフォルトの名無しさん:03/05/29 00:13
>>462
符号あり・なしって知っている?

465 :デフォルトの名無しさん:03/05/29 00:13
>>462
一般的に、printfのフォーマットは引数の型に合わせて使います。
%luでも%uでもうまくいったのは、longとintのサイズがたまたま同じだったからでしょう。

466 :デフォルトの名無しさん:03/05/29 00:59
int main(void){
return 0;
printf("hello, world\n");
}

こういう書き方するとhello,worldが出力されませんよね。
関数内でreturnのあとの文を実行させる方法ってありますか?

467 :デフォルトの名無しさん:03/05/29 01:00
goto

468 :デフォルトの名無しさん:03/05/29 02:04
int *a;
a = (int *)malloc(sizseof(int)*5);

これで要素5つの領域がaに確保されることを教わったのですが、
mallocの前の(int *)は何を意味していて何故必要なのでしょうか?

469 :カーニハン三世:03/05/29 02:44
>>468
malloc() が void* 型だからです。 a に代入するため
int* 型でキャストします。
                           以上

470 :デフォルトの名無しさん:03/05/29 03:10
>>466
atexit();



471 :デフォルトの名無しさん:03/05/29 06:03
>>468
mallocの戻り値をint *へキャスト。
stdlib.hさえインクルードしていれば必要ないよ。もっとも、C++としてコンパイルするのなら必要だけど。

>>469
そういう理由じゃないと思う。

472 :デフォルトの名無しさん:03/05/29 08:19
>>471
おいおい・・・

473 :デフォルトの名無しさん:03/05/29 08:48
>>466
何のために?
return は関数を終わらせるために書くものなのに、
何でその後を実行する必要があるんだ?

474 :デフォルトの名無しさん:03/05/29 10:38
void*からint*に暗黙に変換できることを知らない人が一人紛れ込んでるようですね

475 :デフォルトの名無しさん:03/05/29 10:53
voidがなかったころにchar *で代用していたからキャストしていたんじゃないの?

476 :デフォルトの名無しさん:03/05/29 11:12
移植しやすいようにするためじゃあ?

477 :デフォルトの名無しさん:03/05/29 13:00
意味するところと必要性を問われて、理由を勝手に推測するスレはここですか?

478 :デフォルトの名無しさん:03/05/29 13:29
名前欄に「山崎渉」って書けないんだけど、なんで?

479 :山崎­渉:03/05/29 13:59
ほんとに?

480 :デフォルトの名無しさん:03/05/29 14:15
意味するところと必要性を問われて、理由を勝手に推測するスレはここですか?

481 :デフォルトの名無しさん:03/05/29 15:43
int foo:
char buf[256];

fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &foo);

とあった場合、 buf を "%d" でパースして int 型に変換して、それを foo に入れる、
という理解で会ってますか?


482 :デフォルトの名無しさん:03/05/29 16:53
C FAQ すらも読まずに質問に答えるスレはここですね?

483 :デフォルトの名無しさん:03/05/29 18:57
括弧の連続は4つが許せる限界。

484 :デフォルトの名無しさん:03/05/29 19:21
>>483
誤爆?
複雑な場合は括弧が連続しないように書けばいい。

485 :デフォルトの名無しさん:03/05/29 19:40
perlみたいなかんじで
!open(...) || exit(-1);
とかやったら コンパイルエラー

486 :デフォルトの名無しさん:03/05/29 19:42
>>485
当たり前だ。exitは戻り値なし(void)だからだ。

487 :デフォルトの名無しさん:03/05/29 19:44
>>485
openできたら終了しちゃうのか?

open(...) ? (void)0 : exit(-1)

488 :デフォルトの名無しさん:03/05/29 19:46
stdlib.hをインクルードしなければエラーにならないかもな。

489 :たまちゃん:03/05/29 19:47
今、会社で初めてC言語を勉強し始めたのですがif文や配列、関数、ポインタなど
理解が出来なく困っています。そこで、本当に初心者でも理解ができ、
社会で使えるくらいの知識がつけられる参考書を教えてほしいのですが?

490 :デフォルトの名無しさん:03/05/29 19:48
そもそもexit()に-1を渡すのはやめれ。

491 :デフォルトの名無しさん:03/05/29 19:48
>>489
ない。

492 :デフォルトの名無しさん:03/05/29 19:50
そのopenがUNIXのopenなら、!をつけるのはやめろ。

493 :デフォルトの名無しさん:03/05/29 19:56
>>489
まずは>>1を見る事からだな

494 :デフォルトの名無しさん:03/05/29 20:02
>>489
http://pc2.2ch.net/test/read.cgi/tech/1051496506/

495 :デフォルトの名無しさん:03/05/29 20:58
この問題が解ける人はソースを載せてください。
結構難しいと思います。挑戦待ってます。C言語の問題です。

氏名と5科目の点数を標準入力から読み込み、ファイル「gakusei.dat」に保存するプログラムkakikomiを作成せよ。但し、氏名は最大20文字とし、「Q」を入力した時点で終了するものとする。また、学生のデータは構造体を用いて管理せよ。

496 :デフォルトの名無しさん:03/05/29 20:59
>>495
http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50

497 :デフォルトの名無しさん:03/05/29 21:01
>>496
すいません。
スレ違いでした!

498 :デフォルトの名無しさん:03/05/29 21:03
http://jbbs.shitaraba.com/computer/2364/
“ヘ( ̄- ̄ )カモォーン♪
http://homepage3.nifty.com/coco-nut/

499 :デフォルトの名無しさん:03/05/29 21:24
>>463
必要な情報を提示して質問できない奴はプログラマになれない。
ただそれだけ。

500 :440:03/05/29 21:31
>499
必要な情報って?
自分の質問読み返しても別にそんな情報が要るような質問じゃないと思うのだけれど・・・

501 :デフォルトの名無しさん:03/05/29 21:33
>>473

あー、たぶんあれだ。
内部処理の終了を待たずにリターンしたいんだろね。
スレッドという言葉を466に教えるといいことありそうだ。

502 :デフォルトの名無しさん:03/05/29 21:40
>>440
> 要するに何でも作れるって事なんでしょうか。
ほとんどなんでも出来ることは確かだが、それを楽に実現できるかどうかは別問題。
Cに限らずなんでもやってみないことには始まらない。

503 :デフォルトの名無しさん:03/05/29 21:52
お聞きしたいのですがwhile文の結果を使ってさらにwhile文を実行できないのでしょうか?
したのソースはコンパイルは問題なく出来たのですが下半分が機能してくれません
原因を教えてください
/*入力した任意の数値の桁数を調べるソース*/
#include<stdio.h>
#include<math.h>
main()
{
int a,b,c,i;
scanf("%d",&a);
i=0;
while(i>=0)
{
c=pow(10,i);
b=a%c;
if(a==b)
break;
i++;
}
printf("%d",i);
/*これ以降は任意の数字のそれぞれの桁の数字を抽出するソースであり上のところで調べた桁数だけループする*/
int d,e;
int j;
j=0;
while(j==i)
{
e=pow(10,j);
d=a/e%10;
j++;
printf("%d桁目の数値は%dです",j,d);
}
}

504 :デフォルトの名無しさん:03/05/29 21:59
while (j == i) は while (j != i) じゃないか >>503

505 :デフォルトの名無しさん:03/05/29 22:04
>>503
ブロックの先頭以外で
int d,e;
int j;
は宣言できるか?

それと、この場合whileよりforの方が適当だとは思わないか

506 :503:03/05/29 22:05
>>504
ホントだ継続条件間違ってました^^
言われたとおり==を!=に変えたら機能しました
どうもありがとうございます

507 :503:03/05/29 22:10
>>505
ブロックの先頭以外でも宣言はできました。
あとお聞きしたいのですが自分はまだC勉強し始めたばかりなのですが
forとwhileの使い分けについてまったく分かりません自分にはまったく同じ物にしか思えなくて^^;
使い分けについて簡単に教えていただけないでしょうか

508 :デフォルトの名無しさん:03/05/29 22:21
判定式とインクリメントをまとめるのと
continueしたときは動作が違う。

509 :デフォルトの名無しさん:03/05/29 22:22
>>507
> ブロックの先頭以外でも宣言はできました。
多分 C++ を C のように使っている状態だと思います。

> forとwhileの使い分け
基本的に for 文はループが進むごとに何かを次に進める時に使います。

510 :デフォルトの名無しさん:03/05/29 22:25
あなたが探してる話題あれはこれでしょ♪
http://endou.kir.jp/betu/linkvp/linkvp.html

511 :503:03/05/29 22:30
>>508,509
ありがとうございます勉強になりました

512 :デフォルトの名無しさん:03/05/29 22:47
趣味でプログラミング始めてみたんですがマルチモニタ環境じゃないと非常に作業しづらいですね

513 :デフォルトの名無しさん:03/05/29 22:55
へえ。そうですか。

514 :デフォルトの名無しさん:03/05/29 22:58
>>511
参考書によっては書いてあるかもしれないが、
for と while は基本的に同じものだ。
for(A;B;C)D; <=> A;while(B){D;C;}

515 :デフォルトの名無しさん:03/05/29 23:05
ttp://www9.plala.or.jp/sgwr-t/c/S/smpl02-3.html

float x,y[] = { 1.1,2.8,6.5 }; /* yをfloat型3個の配列で宣言後、初期化 */
の注釈間違ってますよね?          ↑ここは「xとy」ですよね?

516 :デフォルトの名無しさん:03/05/29 23:07
>>514
>>508

517 :デフォルトの名無しさん:03/05/29 23:10
>>515
注釈は合っているが、
そういう宣言の仕方は(可読性が)良ろしくない。
x と、y の要素の型を確実に同じにできるので、
その事に意味があれば多少保守性は上がるけどね。

518 :デフォルトの名無しさん:03/05/29 23:22
>>517
ではfloat x,yのxはどういう意味なんでしょうか?

519 :ずれてました:03/05/29 23:23
float x,y[] = { 1.1,2.8,6.5 }; /* yをfloat型3個の配列で宣言後、初期化 */
の注釈間違ってますよね? ↑ここはyだけになってますが、「xとy」ですよね?


520 :デフォルトの名無しさん:03/05/29 23:27
>>518
float x,y[] = { 1.1, 2.8, 6.5 };



float x;
float y[] = { 1.1, 2.8, 6.5 };

と同じ。
x は float 型の変数。

521 :デフォルトの名無しさん:03/05/29 23:29
>>520
そうですか!
勘違いしてたみたいです。

522 :デフォルトの名無しさん:03/05/29 23:40
>>500
要は、お前は「車ってどこへ行けるの ?」って聞いてるのと同じだよ。
あるいは、「車でディズニーランド行ける ?」って聞いてるのと同じ。
ディズニーランドが1つじゃないように、ランチャーだっていろいろある。

そもそも環境もわからんし、環境を書いて聞くスレじゃないし。

523 :デフォルトの名無しさん:03/05/29 23:44
>>500
その質問は FAQ なので、みんな嫌気が差してる。

回答は「その気になりゃ大抵の事はできる」だ。
あとはやる気の問題。

524 :初心者プログラマー:03/05/30 00:52
こんばんわ。いまCでプログラムを書いています。一応書いてはみたのですが、
自信がありません・・・。
そこで、プログラムソースを添削していただきたいのですが・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1054220849_1/report2-3.c
ここにソースを置いています。覗いてみてください、お願いします。


525 :デフォルトの名無しさん:03/05/30 00:54
>>524
マルチポストうざい

526 :デフォルトの名無しさん:03/05/30 01:57
>>524>>525
それに直リン?が嫌。直リンとは、直接ファイルの所に行く事か
ttp://として、サーバーの負担をなんたらの事かどちらか分からんが。
これに乗じて質問します。貼るなら以下のように貼るのが良い。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=69

527 :デフォルトの名無しさん:03/05/30 04:54
PocketCってC言語の勉強にも利用できますか?

528 :デフォルトの名無しさん:03/05/30 07:46
>>521
ついでに言うと、float *x,y;としたとき、ポインタになるのはxだけ。

529 :デフォルトの名無しさん:03/05/30 09:47
>>527
PocketCがAnsiCとどれだけ違うか把握してからなら兎も角、
AnsiCに慣れていないのなら激しくお勧めしません。

530 :デフォルトの名無しさん:03/05/30 11:22
>>527
ちょっと調べてみた。
http://www.din.or.jp/~matusima/ce/pocketc/diff.html
学習用には +激しくお勧めできない+
これはCをわかってる人、もしくはプログラムさえできりゃなんでもいいと思ってる人が使うものだ。

531 :デフォルトの名無しさん:03/05/30 13:48
void Count(char *cnt)
{
intCNT;

CNT = 1;

CNT ++;

cnt = (char *)&CNT;

}
こんな関数があったとして
main側でcntを受け取ったときに
cnt = 2;と認識できますか?



532 :デフォルトの名無しさん:03/05/30 13:51
できない

533 :デフォルトの名無しさん:03/05/30 13:55
無茶苦茶だな

534 :531:03/05/30 15:07
まじすか・・・

どうやったらできるんでしょうか。。。


535 :デフォルトの名無しさん:03/05/30 15:11
>>531
それがだめな理由わかる?

536 :デフォルトの名無しさん:03/05/30 15:13
>>534
cnt = (char*)2;

537 :直リン:03/05/30 15:13
http://homepage.mac.com/yuuka20/

538 :デフォルトの名無しさん:03/05/30 15:26
>>534
まず何がしたいのかが理解できない。

539 :デフォルトの名無しさん:03/05/30 15:28
void Count(char *cnt)
{
int CNT;

CNT = 1;

CNT ++;

*cnt = (char)CNT;

}

540 :531:03/05/30 15:32
>>535
CNTのアドレスが渡ってるだけ??
ですか?

541 :デフォルトの名無しさん:03/05/30 16:33
>>531は事実上何もしない。

542 :デフォルトの名無しさん:03/05/30 17:53
*cnt = CNT;

543 :デフォルトの名無しさん:03/05/30 17:54
文字列リテラルに特定の文字をいれると(為替など)コンパイル時に
警告:不適切なエスケープ:\<0x91>
と出ます。
実行すると文字化けしてしまいます。
UNIXなんですが、どなたか対策しりませんか?


544 :デフォルトの名無しさん:03/05/30 18:00
【緊急】ちょっと現調いってきてください!
名前: 頭脳土方
E-mail: team-zeroth@docomo.ne.jp
内容:
現調にいってくれるひと募集。
5月31〜6月1日 宿泊費、交通費、でます。
もちろん、現調なのでお金払います。(値段は相談)
C++が分かる人。開発室と電話連絡しながら、
コンパイルしたりテストしたり、してください。

メール team-zeroth@docomo.ne.jp

もまいら、よろしくおねがいします。




545 :デフォルトの名無しさん:03/05/30 18:07
>>543
どんな文字入れたの?

546 :デフォルトの名無しさん:03/05/30 18:11
>>543 SJIS なんか使うな。


547 :デフォルトの名無しさん:03/05/30 18:12
>>543
Shift-JISで一部の文字が\とかぶるものがあったとおもうけど、それか?

548 :カーニハン三世:03/05/30 20:28
>>540
CNTはCount()関数内だけの一時変数です。つまりCount()関数が
実行中の時だけスタックに存在する変数です。
ですからCNTのアドレスを上位関数へ渡しても、Count()関数を
抜けたらお仕舞い。
上で*cntを参照すれば、Unix/Linuxなら Segmentetion Fault、
Win32なら アプリケーションエラー だぞ。(偶然落ちないこともあるが)

アドレス(ポインタ値)を返せるのはstatic変数だけ。(例:strtok()関数など)

549 :デフォルトの名無しさん:03/05/30 20:43
>>548
それ以前に返してないってば。代入しているのは仮引き数のみ。

550 :デフォルトの名無しさん:03/05/30 20:48
>>543
ソースをこういうのに通せ
#include <stdio.h>
#define iskanji(c) ((0x81 <= (c) && (c) <= 0x9f) || (0xe0 <= (c) && (c) <= 0xfc))
#define ESC '\\'

int main(void)
{
  int in_string = 0, kanji1 = 0;
  int before = 0, c;

  while ((c = getchar()) != EOF) {
    if (in_string) {
      if (kanji1) {
        if (c == ESC)
          putchar(ESC);
        kanji1 = 0;
      }
      else if (!kanji1 && iskanji(c))
        kanji1 = 1;
      else if (before != ESC && c == '\"')
        in_string = 0;
    }
    else if (before != ESC && c == '\"')
      in_string = 1;
    before = c;
    putchar(c);
  }
  return 0;
}

551 :デフォルトの名無しさん:03/05/30 21:07
コテって無能が多いね。

552 :カーニハン三世:03/05/30 22:08
>>549
>>551
あ、・・・・
よく見たらスタック上の引数のコピーに代入してるだけじゃん(撃)
俺のレスまで無意味だった。 激しく逝って来る・・・

553 :デフォルトの名無しさん:03/05/31 02:40
Visual C++じゃなくてBoriand C++を今買って学習するのは無謀でしょうか。

554 :デフォルトの名無しさん:03/05/31 02:43
>>553
かわずとも・・・cygwinとかWideStudioとかLinuxとかBSDにあんだろ。

555 :デフォルトの名無しさん:03/05/31 02:44
>>553
BCCなら只だから
その分、書籍に金をまわせるが

556 :デフォルトの名無しさん:03/05/31 02:46
>>553
Borland C++の方が簡単にアプリが組めるという点ではよい。
ただ、それで勉強しなくなるなら結果的によかったのかわからないけどね。

557 :556:03/05/31 02:50
あれ、C++Builderでなくタダのほうのことだったか
逝って来よう・・・・

558 :デフォルトの名無しさん:03/05/31 03:28
C++ Builder簡単に組める=馬鹿でも組めるからダメだろ(w

559 :デフォルトの名無しさん:03/05/31 04:07
>>558
実際にVisual C++買って難しくて挫折する人は多いと思うよ。
それならC++Builderで何かしら作れたほうがいいとも言える。
誰にでも組めるっていうのもいいものだよ。
とりあえずちょっとしたもの1つ組めれば次に進む気になるからね。

560 :デフォルトの名無しさん:03/05/31 04:11
ホントにC言語を勉強したいなら、GNUが使えるLinuxなんかを
ダウンロードしてCD-Rに焼いてインスコすれば、安上がりだし
WindowsでもフリーなBorland BC++5.5がある。

C言語でWinアプリを組めばメッセージ駆動の勉強にもなっちゃうよ。
独力で .rcの記述をしながら、WinMain()、WinProc() のデザインから
始めるのも良いかも。

561 :デフォルトの名無しさん:03/05/31 04:19
時は金なりだからね。何が安いかわからないよ。
フリーのCコンパイラで勉強して、それではWinのアプリが簡単には組めないことがわかって結果的にCはやめてVBにいったりする。
C++Builder1万円って社会人にはそんなに高くないんじゃないの。
これで何か作れる喜びを味わえるなら安いくらいかも。

562 :デフォルトの名無しさん:03/05/31 05:54
#include <stdio.h>
void main(void){
int n[3],i;
for(i=0;i<3;i++){
printf("n[%d]=",i+1);
scanf("%d",&n[i]);}
for(i=0;i<2;i++){
if(n[3]>n[i]){
printf("rejected\n");}}
for(i=0;i<2;i++){
if(n[3]<=n[i]){
printf("approved\n");}}}
これを「n[1],n[2]のどちらかがn[3]より小さいならrejectedを出力し、
n[1],n[2]の両方ががn[3]以上ならapprovedを出力する」ソースにしたいです
そのままではapprovedが2回出るだけなので、
どうしてそうなるのか非常に悩んでいます

563 :562:03/05/31 05:57
n[1],n[2],n[3]がどんな値でも実行したらapprovedが
2回出ることを追加しておきます

564 :デフォルトの名無しさん:03/05/31 06:42
>>562
int n[3]と宣言して n[3]と比較するのは
これいかに。いやどうかと。
n[3]と宣言した場合使えるのはn[0]〜n[2]まで。

565 :デフォルトの名無しさん:03/05/31 07:34
口から悪魔が出てきますな.

566 :デフォルトの名無しさん:03/05/31 09:00
>>560
CDライターが高い

567 :デフォルトの名無しさん:03/05/31 09:17
Cって日本語が使えないんですか?

568 :デフォルトの名無しさん:03/05/31 09:27
使えません。

こちらへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1051184396/
http://pc2.2ch.net/test/read.cgi/tech/1015170837/

569 :デフォルトの名無しさん:03/05/31 15:45
#include <stdio.h>

#define MAX 5

main()
{
int i, point[MAX], total=0, avr;

for(i=0; i<MAX; i++){
printf("%d人目の点数は? ", i+1);
scanf("%d", &point[i]);
}
for(i=0; i<MAX; i++){
printf("%d人目 = %d\n", i+1, point[i]);
total += point[i];
}
avr = total / MAX;
printf("平均点 = %d\n", avr);
}
のtotal += point[i];ってところがわかりません。
どういう意味なのでしょうか?

570 :デフォルトの名無しさん:03/05/31 15:47
文法なら本をみようよ。
a+=bはa=a+(b)

571 :デフォルトの名無しさん:03/05/31 15:49
>>570
ありがとうございます。あいにく貸しているんで・・

572 :デフォルトの名無しさん:03/05/31 15:59
>>570
(b)はbでいいだろ。
(b)でも問題ないが

573 :デフォルトの名無しさん:03/05/31 16:05
>>572
bが先に評価されるという意味で括弧でくくった。

574 :デフォルトの名無しさん:03/05/31 16:06
>>572
+ より優先順位の低い二項の演算子なんていくらでもあるぞ。

575 :デフォルトの名無しさん:03/05/31 16:45
>>573
カッコは評価順序とは関係ない。優先順位を変えるだけ。


576 :デフォルトの名無しさん:03/05/31 17:07
>>575
よく読めよ

577 :デフォルトの名無しさん:03/05/31 18:06
C言語を家で勉強したいと思うんだけど
どのソフトを買えばいいでしょうか?
やっぱり Visual C++.NETかな

578 :デフォルトの名無しさん:03/05/31 18:11
純粋なC言語だったら、linux+gcc
Windows上で動かしたいなら、VC
安く済ませたいなら、BCC
きわどく行きたいなら、cygwinのgcc(素人にはお勧めできない)

例えば、学校でlinux+gccとかsun+gccとかだったら、
cygwinのgccでもまあ、がまんできる。無料だし。

いじゃう。っていうか同じような質問多すぎ。逝ってくれ。

579 :デフォルトの名無しさん:03/05/31 18:12
FAQスレ立てた方がよさげ。

580 :デフォルトの名無しさん:03/05/31 18:22
C言語ってどんなソフトを作れるんですか?

581 :デフォルトの名無しさん:03/05/31 18:32
>>580
基本的に何でも。
OS書いているソフトだからな。
ただし生産性は高いとはいえない。

582 :デフォルトの名無しさん:03/05/31 18:37
>>580
はっきり言ってCは
1.ソースが混乱する。
2.膨大になる。
が問題。

583 :デフォルトの名無しさん:03/05/31 19:35
char str[100];
fgets(str, sizeof(str), stdin);
というように標準入力から文字列(アルファベット)を受け取る際に、100文字
を超えたら改行まで読み続けないで、1回で処理を打ち切るようにしたいのですが、
どのようにしたら良いのでしょうか?フラグなどを立てておく以外でお願いします。

584 :デフォルトの名無しさん:03/05/31 19:39
なんの処理を一回でうち切りたいのか知らないけど、入力処理のことならfgetsを一度だけ呼べば一回でうち切られる。


585 :デフォルトの名無しさん:03/05/31 20:00
>>582
ほほぉ。
それではソースが混乱しないで膨大にならない言語は何ですか?
#スレ違いって誤魔化して答えないと思うけど一応聞いてやる。

>>583
残りの入力を放置していいなら>>584の言うとおり。
入力を破棄してしまいたいならもう一度(必要なら複数回)呼んで
改行まで読み捨てる必要がある。

586 :デフォルトの名無しさん:03/05/31 20:11
>>584,585
ありがとうございます。
ループ内でfgetsをやっていたので、文字のあふれた分が続けて読み込まれていました。
もう一つ質問ですが、標準入力から文字列を読み込んだときに、格納する配列から
あふれたかどうかを判断する術はありますか?

587 :デフォルトの名無しさん:03/05/31 21:09
fgets()は、まさしく溢れさせないように作られている。
例えば、
char buf[100];
としたなら
fgets(buf, sizeof(buf), fp);
とすれば溢れることは有り得ない。

尚、行の最後まで呼んだかそれとも行の途中かを知りたければ、
if (buf[0] != '\0' && strrchr(buf, '\n') != buf[strlen(buf) - 1]) {
/* 行の途中 */
}
とでもすればよい。

588 :デフォルトの名無しさん:03/05/31 21:22
>>587
fgets(buf, sizeof(buf), fp) && strchr(buf, '\n')
だろフツー。

589 :582:03/05/31 21:35
>>585
そんな都合のいいものはないが
相対的に見れば
CよりC++という考え方になる。
表現方法が悪かったのはスマン。

590 :デフォルトの名無しさん:03/05/31 22:18
#include <stdio.h>
main()
{
int a[4];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

printf("%d\n%d\n%d\n%d\n%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}

コードが汚いし、誤作動するし。どうなってんだーーーーーーー

591 :デフォルトの名無しさん:03/05/31 22:20
>>590
荒らすな

592 : :03/05/31 22:23
int a[4]だとa[0]〜a[3]でつ

593 :デフォルトの名無しさん:03/05/31 22:28
>>590
ひさしぶりにワラタ

594 :デフォルトの名無しさん:03/05/31 22:29
int a[4]は、int型の配列が入るメモリを4個確保して、
その先頭の場所に「a」という名前付ける、って意味。
配列は0から数えるので、0,1,2,3までしか使えない。

ついでに、for文覚えてとけ。役に立つぞ。

595 :デフォルトの名無しさん:03/05/31 22:30
あと、main関数は基本的にint型の戻り値でおながいします(にやっ

596 :デフォルトの名無しさん:03/05/31 22:31
役に立つというか、必須では。

597 :デフォルトの名無しさん:03/05/31 22:32
>>595
>>590はint型になっているけど。
ただしreturn 0;を書いていないのは(ry

598 :デフォルトの名無しさん:03/05/31 22:50

int i = 2;
int n = 3;

printf("%d\n", i +++ n );
printf("%d,%d\n", i, n );

出力結果を妄想しなさぁい

599 :デフォルトの名無しさん:03/05/31 22:51
>>598

$ ./a.out >/dev/null
$


600 :デフォルトの名無しさん:03/05/31 22:52
実数を読み込みたいのですが下のコードで読み込めません。
どこかまずいでしょうか

double v;

sscanf("7.295760E+0", "%e", &v);
printf("%f\n", v);


601 :デフォルトの名無しさん:03/05/31 23:00
>>600
マニュアルを見ないところが拙い。
scanf()系のフォーマットがprintf()系と互換性があると思っている時点でダメダメ。


602 :デフォルトの名無しさん:03/05/31 23:01
%le

603 :デフォルトの名無しさん:03/05/31 23:02
>>600
sscanfが変。
第一引数はメモリ上に配置された
char型へのポインタだぞ。
他、指数の表示も%fじゃなく、%eだ。

604 :デフォルトの名無しさん:03/05/31 23:03
>>603
3行目以降はNG

605 :デフォルトの名無しさん:03/05/31 23:04
>>600
%e → %le

606 :デフォルトの名無しさん:03/05/31 23:04
doubleをfloatにする。じゃだめ?

607 :デフォルトの名無しさん:03/05/31 23:06
>>603
文字列定数が返すのはchar *じゃないのか?

608 :600:03/05/31 23:08
%e → %leで読み込めました。
変数のフォーマット指定をおろそかにするといけないのですね


609 :デフォルトの名無しさん:03/05/31 23:12
>>608
floatはdoubleに変換されるからprintfの時はどちらもlをつけないが、
scanfの場合はポインタを渡すから、、、ええと、うまく説明できないな(汗
同様に%dに対してchar*やshort*などを渡すのもまずい。

610 :デフォルトの名無しさん:03/05/31 23:13
>>600
"%e" に対応するのは、float 型。
一部の処理系で、"%le" で double に対応しているものがある。
使ってる処理系のヘルプを見るべし。

611 :デフォルトの名無しさん:03/05/31 23:16
だからさ、規格を調べずに嘘を書くのはやめようや。

612 :609:03/05/31 23:17
>>611
俺のこと?嘘ついた?

613 :609:03/05/31 23:21
念のため、floatがdoubleに・・・というのは可変個の引数の話なんで。

614 :デフォルトの名無しさん:03/05/31 23:22
>>609
嘘を書いているのは610。
自信がないならちゃんと調べよう。

615 :デフォルトの名無しさん:03/05/31 23:31
>>614
どこがウソなん ?

616 :デフォルトの名無しさん:03/06/01 02:39
>一部の処理系で、"%le" で double に対応しているものがある。

このあたりでは?
つまり、一部処理系独自の拡張みたいに云うな、と。

617 :デフォルトの名無しさん:03/06/01 06:06
なんかこのスレ、fjみたいになってきたな。

618 :Kusokabe Youichi:03/06/01 06:29
In article >>617, デフォルトの名無しさん/sage/617 wrote:

>なんかこのスレ、fjみたいになってきたな。

と思いたいのですね? :p

619 :デフォルトの名無しさん:03/06/01 09:10
(,,゚Д゚)∩先生質問です
構造体のメンバにconstを付けた場合
どうやって初期化すればいいんでしょうか

620 :デフォルトの名無しさん:03/06/01 09:45
>>619
通常のconst変数同様に初期化すればいい。

const int cOneConst = 3;
struct SomeStruct {
const int anyMember;
double otherMember;
} myStruct = {3, 3.14};


621 :デフォルトの名無しさん:03/06/01 10:17
>>619
わざわざ、定数を構造体に入れるとは
どういうソースだ?
利用法がわからん。

622 :デフォルトの名無しさん:03/06/01 10:19
>>621
利用法は考えてなかったけど出来るのかなーって思って

623 :デフォルトの名無しさん:03/06/01 10:25
>>621
テーブルを作るときに使います。
配列になるけど。


624 :デフォルトの名無しさん:03/06/01 10:37
構造体の中にテーブル!?

625 :デフォルトの名無しさん:03/06/01 11:03
テーブルならstruct X const table[]だろ。

626 :デフォルトの名無しさん:03/06/01 12:58
参考書を読み漁り、
ポインタ本やらK&R本やら基礎は頭の中に入ったと思うんです。
が、ここからどうしていいかわからない。
今まで学習した内容では何も出来やしないような気がして。
API叩きまくればできる、とかそういうんじゃなくて・・・。
とにかく、暗礁に乗り上げています。
どうか我が行く道を照らしてください・・・センセー。

627 :デフォルトの名無しさん:03/06/01 13:02
>>626
何か作ればいいじゃん。
何作ればいいかとかは自分で考えてね(w

628 :デフォルトの名無しさん:03/06/01 13:04
>>616
ん ? "%le" って ANSI で規定されてるのか ?

C99 では規定されてるみたいだけど。

629 :デフォルトの名無しさん:03/06/01 13:07
なかったらfloat*しか受け取れなくなるYO!

630 :デフォルトの名無しさん:03/06/01 13:08
>>626
これからが本番なんだyo
言語を一通り理解するのは土俵に立つ程度のことっス

631 :デフォルトの名無しさん:03/06/01 13:11
>>626
既存のソフトを改造してみるとか

632 :デフォルトの名無しさん:03/06/01 13:36
Cでウィルスとか作れるんでちか?

633 :デフォルトの名無しさん:03/06/01 13:37
VBSがいいよ

634 :デフォルトの名無しさん:03/06/01 13:38
>>632
てーか、程度の低いウィルスなら、
簡単。


635 :デフォルトの名無しさん:03/06/01 13:57
程度が低くなくても簡単。

636 :デフォルトの名無しさん:03/06/01 15:22
>>629
K&R には、"%le" なんかありませんでしたが、何か ?

637 :デフォルトの名無しさん:03/06/01 15:22
>>635
> 程度が低くなくても簡単。

こう言う奴は、大体何もできない奴。

638 :デフォルトの名無しさん:03/06/01 15:42
ところで
2chはどこまで
ウィルスの話OKなの?
てか、一応禁止だし。

639 :デフォルトの名無しさん:03/06/01 15:51
禁止なんだろ。

640 :デフォルトの名無しさん:03/06/01 15:55
>>636
lとeを分けて考えれば分かりそうなものだけど。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/sscanf.3.html
http://www.bohyoh.com/CandCPP/C/Library/fscanf.html

641 :デフォルトの名無しさん:03/06/01 16:02
void op(void){
int fd1;
char buffer[1000];

fd1 = open("data.c", O_RDONLY);
read(fd1, buffer, 1000);
puts(buffer);
close(fd1);
}
関数opを実行するとdata.cのなかの一部分しか表示されません。
全部表示するにはどうしたらよいでしょうか?

642 :デフォルトの名無しさん:03/06/01 16:03
>>641
バッファをもっと多くとる。data.cに'\0'を含まないようにする。

ところで、(UNIXの)readは末尾に'\0'を付加したりしないよ。

643 :デフォルトの名無しさん:03/06/01 16:08
>>641
てーか、
readで読み込むのに賛成しない。
while(fguts(buffer,1000,fd1)!=NULL)
   fputs(buffer,fd1);
なら大丈夫。

644 :デフォルトの名無しさん:03/06/01 16:09
>>643
getとputが混ざっているぞ

645 :644:03/06/01 16:12
というか、fd1から読み出してfd1に書き出しちゃだめだろ。

646 :デフォルトの名無しさん:03/06/01 16:14
while(fgets(buffer,sizeof buffer,fd1))
fputs(buffer,stdout);

647 :641:03/06/01 16:20
皆さん、レスありがとうございます!

課題があってreadを使わないといけないんです。

>>642
文字数は少ないので、バッファはこれで十分だと思います。
data.cに\0を含まないようにするには
どうしたらいいのですか?
使ってはいけない関数とかありますか?

648 :デフォルトの名無しさん:03/06/01 16:35
int n;
if ((n = read(fd1, buffer, 1000)) > 0) {
write(1, buffer, n);
}

649 :デフォルトの名無しさん:03/06/01 16:38
微妙にスレ違いですけど、バッファのスペルを
buf と書いてあるのを C のソースでよく見かけるのですが、なにか歴史的な理由でもあるのですか?
自分は buff とか buffer と書いてきたので。

650 :デフォルトの名無しさん:03/06/01 16:52
K&Rでそう書いてあったから。

651 :デフォルトの名無しさん:03/06/01 16:56
以下のプログラムをコンパイルするとscanf("%c",b);
の所でWarning: 'b' used before setと出ます。
どうしたら正常にコンパイルできますか?

#include <stdio.h>
static int a;
static int sum;
int plus(void);
int minus(void);
int kakeru(void);
int waru(void);

main(){
char b;

puts("数字を入力");
scanf("%d",&a);
puts("演算子を入力");
scanf("%c",b);
以下略

652 :デフォルトの名無しさん:03/06/01 17:00
&b

653 :デフォルトの名無しさん:03/06/01 17:00
>>651
なんでbに&がついてないの

654 :デフォルトの名無しさん:03/06/01 17:06
>>650
> K&Rでそう書いてあったから。
そうなのか。
creat 見たいなもんかな(微妙に違うか、、、

655 :デフォルトの名無しさん:03/06/01 17:09
>>651
どうでもいいけど関数のネーミングセンスどうにかせーよ。
あと、aとかsumは本当にグローバルじゃないとだめなのか。

656 :651:03/06/01 17:12
>>652.653
ありがとうございました。
以下のプログラム(>>651の続きです)のコンパイルはできたのですが、
実行したとき演算子入力の所で、
入力できずに終わってしまいます。
どうすれば自分が意図したとおりになりますか?

main(){
char b;
puts("数字を入力");
scanf("%d",&a);
puts("演算子を入力");
scanf("%c",&b);

if(b == '+')
{plus();}
else if(b == '-')
{minus();}
else if(b == '*')
{kakeru();}
         else if(b == '/')
{waru();}
else if(b == '=')
{printf("%d", &sum);}
}

657 :動画直リン:03/06/01 17:13
http://homepage.mac.com/hitomi18/

658 :651:03/06/01 17:23
>>655
英語苦手なので、単語が思いつきません。

一応、aもsumもグローバルでないとだめなようなプログラム
を作ったつもりです。

659 :デフォルトの名無しさん:03/06/01 17:26
数字に続けて演算子も入力してからEnter

660 :くりえいとりす:03/06/01 17:26
fopen("a.txt", "w");
みたいなやつで、低水準のフォルダ作成関数をキボヌン。

661 :デフォルトの名無しさん:03/06/01 17:26
>>658
> 英語苦手なので、単語が思いつきません。

mult(), divide()

> 一応、aもsumもグローバルでないとだめなようなプログラム
> を作ったつもりです。
んなわきゃーない。

662 :デフォルトの名無しさん:03/06/01 17:27
>>660
mkdir()

663 :くりえいとりす:03/06/01 17:30
さんくすこ

664 :デフォルトの名無しさん:03/06/01 17:34
低水準の文字列比較関数をキボヌン。

665 :651:03/06/01 17:34
>>659
やってみたら今度は演算子のところでとまってしまいました。

>>661
英語サンクスです。
でも、グローバルでも作れますよね?

666 :デフォルトの名無しさん:03/06/01 17:41
>>665
> でも、グローバルでも作れますよね?
できるからやりゃあいいってもんじゃない。
まともなプログラム作りたかったら、グローバル変数を濫用するな。

667 : :03/06/01 17:41
CString ss("123.45");
float f;
こんなコードがあったとして、文字列ssを変数に変換して
fに代入することは出来ますか?
関数でスマートにやる方法があったらぜひ教えて下さい。

668 :デフォルトの名無しさん:03/06/01 17:45
>>667
f = atof("123.45");
スレ違い。



669 :647:03/06/01 17:46
>>648
ファイルを正常に開けたならば
バッファを標準出力に書き込むって意味ですか?
それをすることとによって何がどうなるのですか?

670 :デフォルトの名無しさん:03/06/01 17:49
>>669
read()のマニュアルなりヘルプなり読め。


671 :デフォルトの名無しさん:03/06/01 18:17
>>640
何の話 ? 特定環境のヘルプ示されても困るんだが。

>>641
そもそも read() で読んで、puts() するのが不自然。
read() は、基本的にはバイナリを相手にしてるから、それをそのまま出力したいなら、write() にすべし。
と言うことを >>648 は言いたいんだと思う。

ただ、>>669

> バッファを標準出力に書き込むって意味ですか?

の発言が、非常に不安。アンタ puts() の仕様わかってんの ?

672 :デフォルトの名無しさん:03/06/01 18:28
一つ目はともかく、二つ目も特定の環境のヘルプか(藁

673 :デフォルトの名無しさん:03/06/01 18:46
2つ目はISO Cの文章そのままだな。
自分の知らないものは環境依存と決め付けるとは救いがたいアホだ

674 :デフォルトの名無しさん:03/06/01 19:06
JISで閲覧できるPDFには次のように書かれているよ。確かにANSIから引っ張ってきたものじゃないけど。

「変換指定子e,f及びgに対応する実引数が、float型へのポインタではなくdouble型へのポインタであるときにはlを」


K&Rの中で明確にそんなものはないと書かれているならまだしも、あれはあくまでも教本なんだから規格を何から何まで網羅しているとは思えないよ。

675 :デフォルトの名無しさん:03/06/01 19:54
>>637
> こう言う奴は、大体何もできない奴。

こう言う奴は、大体何もできない奴。


676 :デフォルトの名無しさん:03/06/01 21:42
煽りあい貶しあいは2ちゃんの華

677 :名無しさん@Emacs:03/06/01 23:17
プロトタイプ宣言でよくでてくる、

int foo _((int arg));

のように _()で囲むのはどういう意味ですか?

678 :デフォルトの名無しさん:03/06/01 23:23
>>677
_ が何かのマクロになってんじゃないの?
標準ヘッダの中では使われてる事はあっても、
そんなもん自分のプログラム内で使っちゃダメよ。

679 :デフォルトの名無しさん:03/06/01 23:25
>>677
K&R対策だったかな?

680 :デフォルトの名無しさん:03/06/01 23:48
乱数作るのは次の段階でいい。rndをaと比較使用とすると無限ループ化してしまう。何故?
#include <stdio.h>
main(){
int a,rnd=6;
while(){
printf("数を当てたまえ。");
scanf("%d,&a");
if(a<rnd){printf("もっと大きい\n");continue;}
if(a>rnd){printf("もっと小さい\n");continue;}
if(a==rnd){break;}
}
printf("正解!");
}

681 :デフォルトの名無しさん:03/06/01 23:50
whileの条件式って空にできたんだ。forならできるけど。

682 :名無しさん@Emacs:03/06/01 23:58
>>678

/usr/include 以下をgrepしてみて見付けられませんでした。
find /usr/include -type f | xargs grep ' _('
どのヘッダで定義されてるのですか?


683 :デフォルトの名無しさん:03/06/01 23:59
&aを外に出せ

684 :681:03/06/02 00:08
できねーじゃねーか!

685 :デフォルトの名無しさん:03/06/02 00:33
>>680
突っ込み所満載だな

686 :デフォルトの名無しさん:03/06/02 00:41
>>682
んなもん知らん。
こっちの GCC ではそんなマクロ使われてないし。

687 :682:03/06/02 01:25
#ifdef PROTOTYPES
# define _(Args) Args
#else
# define _(Args) ()
#endif

>>686
すいません。標準ヘッダではなく普通に定義されてました。

>>677
そうみたいですね。


688 :デフォルトの名無しさん:03/06/02 02:23
#include <stdio.h>
struct Num{int iti[10];}zyuu[10];
int main(void)
{
int i,n;
for(i=0;i<=9;i++)for(n=0;n<=9;n++)zyuu[i].iti[n]=i*10+n;
for(i=0;i<=9;i++)for(n=0;n<=9;n++)printf("%4d",zyuu[i].iti[n]);
getchar();return 0;
}
上プログラムの構造体を
struct Num2{int zero,int one,int two int three int four
int five,int six,int seven,int eight,int nine}zyuu[10];
とした時、同じ値をスムーズに与えるにはどうすればよいのでしょう。
下の構造体にしたい理由は、配列番号だと、メンバのどこにどれが入っているか
分からなくなる時があるからです。enumとかありますが、じかに出来ればいいなと。

689 :デフォルトの名無しさん:03/06/02 02:40
>>688
あんまりきれいな方法はないかなあ。

struct Num tmp = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (i = 0; i < 10; i++) {
 zyuu[i] = tmp;
}

てなかんじかね。

690 :デフォルトの名無しさん:03/06/02 02:50
スーパーハカーを目指している青少年ですが
linuxを勉強するのが先でしょうか?それともパイソン?C?

最短でハカーになりたいので、迅速な回答お願いします。
(ネットワークは無駄だと最近気づいたので)

691 :デフォルトの名無しさん:03/06/02 02:57
>>690
マジレスしてみると、最短なんてものはない。
ハカーに王道なし。ただソースと戯れ、たくさんプログラムを書き、
他人の技術を盗み、精進するのみ。

とか書くといかにも求道者風で苦痛の道のりみたいに見えるけど、
ハカーと呼ばれる人たちはそれが楽しいからやってるだけだ。

「最短コース? なんでいろいろ寄り道して楽しまないんだ? もったいないしつまらんじゃないか」

何をやればいいか? などと楽する道を人に聞いてるようじゃハカーには向いてないよ。
ハカーになるべくしてなるやつはそんなこと考えずにどんどん技術を身につけていくものだ。

692 :デフォルトの名無しさん:03/06/02 03:30
レス有難う御座います

>最短コース?
高校生のハカーとかかっこいいじゃないですか。。。
日本の餓鬼なんかに負けるかゴルァ!!って気持ちがどうも働くんですよね。
いや、もちろん私も日本人なんですが。

>何をやればいいか? などと楽する道を人に聞いてるようじゃハカーには向いてないよ。
そうですよね・・・ベクトルがhack=カッコイイ→若いともっとカッコイイからきてるのです。
ハカーになる目標を5年後から7年後に移動します。

7分で書いた>>691さんに感謝です。

693 :デフォルトの名無しさん:03/06/02 03:35
>>689
ありがとうございました。

694 :デフォルトの名無しさん:03/06/02 04:13
>>692
おいおい、青少年っつーか少年じゃないか。
だったら若さを活かして他人のプログラムを読み捲くれ。
その中から自分に合ったものを見つけて、自分流に何度も書いてみろ。

それからいろんな知識を身につけろ。数学は勿論、どんな知識でもいい。
プログラミング技術と知識を味方につければハッカーも夢じゃないぞ。
#そしてそれらはハッカーにならなくても役に立つしな。

695 :デフォルトの名無しさん:03/06/02 04:40
>>692
ついでに一般常識も勉強するように。
ハカーじゃなくてクラカーになっちゃ駄目よ。

696 :デフォルトの名無しさん:03/06/02 04:47
>>692
これも読んどけ。(いろいろ文句があるけどそれほど外れちゃいない)
http://cruel.org/freeware/hacker.html

697 :デフォルトの名無しさん:03/06/02 19:05
>696

Q: Windows ソフトのことで困っています。助けてもらえますか?
 はい。DOS プロンプトにいって、「format c:」とタイプしましょう。ものの数分で、困っておいでの各種問題は消滅することでしょう。

こういうのってどうなんだろ(´∀`;)
もしも知らない人がこれで助かると思って実行したら

698 :デフォルトの名無しさん:03/06/02 19:12
> しかし HTML は十分なプログラミング言語ではありません。

この時点でネタ決定 「十分な」がなければいいんだが。

699 :デフォルトの名無しさん:03/06/02 19:19
>>698
同意。マークアップ言語はプログラミング言語ではないからね。

700 :デフォルトの名無しさん:03/06/02 20:17
オーバーフローについて

long min = LONG_MIN;
long max = LONG_MAX;
long tmp = min - max;
としたときのtmpの値は?

1.シラネーヨ(不定)
2.そもそもそんな計算すんじゃねぇゴルァ!

701 :デフォルトの名無しさん:03/06/02 20:21
>>690
英語も勉強シル!
何か Unix/Linux 系の手頃なソフトを決めて、ソースを完全解読。
dev 向けのメーリングリストに入る。
パッチを投げる。
スーパーハカーへの第一歩。

702 :デフォルトの名無しさん:03/06/02 20:42
>>694
実はエンジニアの底辺を支えてる人だったりするのだ。
勉強する順序みたいのが知りたかったのです。
Python→linux→Perl→C→他の言語 の順番で覚えようかと思います。

>>696
ありがとうです。そことwww.hackerslab.orgはお気に入りに入ってたりします。

スレ違いスイマセンでした(^^


703 :デフォルトの名無しさん:03/06/02 20:42
>>701
その通り!英語大事あるよ。
英語やっときゃよかったと後悔することしかり。RFC くらい辞書なしで読んでみたい(恥。

704 :デフォルトの名無しさん:03/06/02 20:46
>>701
言語が全くできないんですよ。
わけもわからずMLに入ってきますw

705 :デフォルトの名無しさん:03/06/02 21:32
>>672-674
ぐちゃぐちゃ言ってるけど、ANSI で定義されてんの ?
定義されてるなら、ソース出してくれ。
それとも、C99 って話か ?

>>637=>>675 か ? つまんね。

706 :デフォルトの名無しさん:03/06/02 21:44
JISってANSIそのままじゃ・・・

707 :デフォルトの名無しさん:03/06/02 21:51
Webで公開されていない以上、>>705が規格書を買うしかないのでは?
引用したところで疑うだけだろうし。

708 :デフォルトの名無しさん:03/06/02 22:07
long intって64bitなの?
sizeofで測ったら4バイトだったけど

709 :デフォルトの名無しさん:03/06/02 22:10
>>708
何バイトかは処理系依存 ただしintより小さくなることはない
で、32bit以上はかならずある。

710 :デフォルトの名無しさん:03/06/02 22:11
> で、32bit以上はかならずある。

ANSIで決まってたか?

711 :デフォルトの名無しさん:03/06/02 22:12
>>710
決まっています(怒)

712 :デフォルトの名無しさん:03/06/02 22:13
またアメリカマンセー主義者か

713 :デフォルトの名無しさん:03/06/02 22:18
>>710
ANSI規格で決まった。
それ以前の処理系については保証はない。

714 :デフォルトの名無しさん:03/06/02 22:41
>>708
1バイトが16ビットの環境だったら4バイトで64ビットじゃん。
とか言ってみる。

715 :デフォルトの名無しさん:03/06/02 22:42
>>706
アフォですか ?

>>707
結局ソースはだせないのか ?
章 - 節 ぐらい書けるだろ。

716 :デフォルトの名無しさん:03/06/02 22:46
>>715
おい、アフォ。
JISのCもISOのCもANSIそのまんまだぞ。

717 :デフォルトの名無しさん:03/06/02 23:15
C++もmain関数から始まるの?

718 :デフォルトの名無しさん:03/06/02 23:18
>>717
スレ違い

719 :デフォルトの名無しさん:03/06/02 23:22
じゃあCは?mainから始まるの?

720 :デフォルトの名無しさん:03/06/02 23:25
>>719
何か「C言語でもmainから始まらない場合もある」とかいう話でも
聞いたのか?

721 :お祭りですよ :03/06/02 23:27
東芝dynabook SS S7の画像表示について、
特定のベンチマークを行った場合、不当に好成績が出せるよう
意図的な描画品質の操作が行われていたことが明らかになりました。

          
本スレ
【インチキ】東芝S7マジ死亡!【偽装】
http://pc3.2ch.net/test/read.cgi/mobile/1054292029/

◇dynabook SS S7 問題のスレッド◇
http://pc.2ch.net/test/read.cgi/pcnews/1054387292/
            

関連記事

「3DMark2001で測定したら、GeForce4 Ti4200並みのパフォーマンスを出している」
http://www.zdnet.co.jp/news/0305/02/nj00_ss7xp4.html
http://www.zdnet.co.jp/news/0303/12/nj00_centri_toshiba.html

3DMark2001のファイル名をリネームするとスコアが下がるXP4
http://pc.watch.impress.co.jp/docs/2003/0530/ubiq7.htm


722 :デフォルトの名無しさん:03/06/02 23:31
Cの例文が沢山あって、単語(例えばgetsとか)で検索出来るサイトを教えて下さい

723 :デフォルトの名無しさん:03/06/02 23:33
MSDN

724 :デフォルトの名無しさん:03/06/02 23:43
VC6ですが、組み込み型memsetって、データが4バイトアラインメントされてないと遅いんですね。

#pragmanko function(memset)
と書くと上記の場合でも速くなる。

って事にさっき気付いた。


気にする程の事ではないが・・・

725 :デフォルトの名無しさん:03/06/02 23:44
「組み込み型memset」ってなんすか?

726 :デフォルトの名無しさん:03/06/02 23:46
>>724
おれは「データが4バイトアラインメントされてないと」の中の「データ」とは
何をさしているのかが知りたい。

727 :デフォルトの名無しさん:03/06/02 23:47
>>726
第一引数のアドレスが4の倍数とか?

728 :デフォルトの名無しさん:03/06/02 23:48
インライン展開されたmemsetの事。

729 :デフォルトの名無しさん:03/06/02 23:52
pragmankoって言いたかっただけ?

730 :724:03/06/02 23:52
>726
 第一引数のアドレス値です。スマソ

731 :デフォルトの名無しさん:03/06/03 01:39
wavファイルの音程を上げ下げするには、どうすれば良いでしょうか?

732 :デフォルトの名無しさん:03/06/03 01:44
サンプラーを使う

733 :デフォルトの名無しさん:03/06/03 01:44
>>731 誤爆

734 :デフォルトの名無しさん:03/06/03 02:15
あるファイルで HOGEHOGE とだけ書いたときに、
マクロ定義によって、実際の値を変更したくて下記のように書いたのですが
思ったとおりにいきません

#define HOGE(a) tenkaigo_##a

#define AHYA ahyahya

#define HOGEHOGE HOGE(AHYA)

定義されてほしいのは tenkaigo_ahyahya
実際には引数は展開されず tenkaigo_AHYA が定義されます
下記は確認のソース

#include <stdio.h>
int main()
{
int HOGEHOGE;

// printf("%d", tenkaigo_ahyahya); //
printf("%d", tenkaigo_AHYA); //
}

実際には値じゃなくて予約語をマクロ展開で置き換えたいので、#if などで使えるマクロじゃなきゃだめなのです
(代行手段は他にありません)

何かうまい方法はありますか?

735 :デフォルトの名無しさん:03/06/03 02:21
予約語をマクロ展開で置き換えたい?

736 :734:03/06/03 03:19
>>735
はい、内容が C 部分だけなのでこちらで質問させていただきましたが、
実際には C++ で

#if -ライブラリのヘッダを読み込み中なら TRUE -
#define INTERNAL private
#else
#define INTERNAL public
#endif

としたいのです。で、ヘッダもソースも書き換えずに
ライブラリのヘッダをインクルードしているのか、
今コンパイル中のソースに関連深いヘッダをインクルードしているのかを
マクロでうまいこと定義したいんです。

737 :デフォルトの名無しさん:03/06/03 03:24
>>736
そんなもの置き換えるなばか。

738 :デフォルトの名無しさん:03/06/03 04:01
>>736
それは設計を見直したほうがいいんじゃないのか?


739 :デフォルトの名無しさん:03/06/03 04:19
乱数を使ったシミュレーションをしているのですが
たまに結果が-1.#INDOO
となってしまいます。これはどういう意味なんですか?
是非教えてください。よろしくお願いします

740 :デフォルトの名無しさん:03/06/03 04:21
どういうコード書いたの?

741 :デフォルトの名無しさん:03/06/03 04:25
struct hoge {
int value;
struct hoge* next;
};
ってのは出来るけど
typedef struct {
int value;
hoge* next;
} hoge;
っていうのはできません。

リスト要素の構造体を typedef で作るにはどうしたらよいのですか?

742 :デフォルトの名無しさん:03/06/03 04:28
>>740
ボックスミュラーで乱数を正規乱数にして
いろいろ演算しました。した演算は正規乱数をa,bとして
log(exp(a)/exp(b))をとってその平均分散を計算しただ
けなんですけど・・・
何がまずいんですかねえ・・・


いつも-1.#INDOO ってでるわけじゃないんですけど。

743 :taku:03/06/03 05:32
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>


int main(){
int pid;
int rtc;
int i;
int h = 1;
int status;

while(h){
printf("何をしますか?\n");
printf("1:アドレスブック、2:四則演算、3:終了");
scanf("%d",&i);
if(i == 0){
h = 0;
continue;
}

744 :taku:03/06/03 05:32
pid = fork();
switch(pid){
case 0:
if(i == 1){
rtc = execl("assressbook",NULL);
exit(0x00ff);
break;
}
else if(i == 2){
rtc = execl("calc",NULL);
exit(0x00f);
break;
}
case -1:
printf("fork error");
break;
default:
wait(&status);
printf("status : %d\n", status);
break;
}
}
return 0;

}

745 :taku:03/06/03 05:34
forkについていまいちよくわからないので質問させてください。
以下の部分は子プロセスといわれると思うのですが、
どういう意味で「子」なのですか?
case 0:
if(i == 1){
rtc = execl("assressbook",NULL);
exit(0x00ff);
break;
}
else if(i == 2){
rtc = execl("calc",NULL);
exit(0x00f);
break;
}

746 :taku:03/06/03 05:36
また以下の部分は親プロセスと言われると思うのですが、
どういう意味で「親」なのですか?

case -1:
printf("fork error");
break;


747 :taku:03/06/03 05:40
またこのプログラムではforkを使っているわけですが、
なぜforkを使う必要があるのかがわかりません。
forkを使うことによってどういった利点があるのでしょうか?

748 :taku:03/06/03 05:43
また具体的にどういったときに
-1、子プロセスのプロセスIDが返されるのですか?

いろいろ質問して申し訳ありませんが、
ぜひ教えていただきたいと思います。
よろしくお願いいたします。

749 :デフォルトの名無しさん:03/06/03 05:50
パーマンのコピーロボットと同じだ。プロセスが分裂するのだ。

・fork()→鼻を押す
・自分の鼻が丸ければ0が返る。
・本物にはコピーロボットのIDが返る
・コピーロボットがニセモノだったらfork失敗で-1が返る

で、親は本物のミツ夫。

750 :デフォルトの名無しさん:03/06/03 05:51
>>741
しばらくタグ名付きの定義使ってないので怪しいけどこんな感じで…

typedef struct _tag_hoge{
int value;
_tag_hoge* next;
} hoge;



751 :デフォルトの名無しさん:03/06/03 05:55
>>746
親は default のブロックだよん。
>>747
親は子の終了を待ってるから system() でも良いような…
fork() の例題作りたかったんじゃない?

752 :デフォルトの名無しさん:03/06/03 07:21
>>740
よくわからんが、-1.#INDOO になったときの a, b の値を見てみ。


753 :752:03/06/03 07:22
>>742ですた。スレ汚しスマソ

754 :デフォルトの名無しさん:03/06/03 08:26
>>750
これだと next の型が hoge* ではなく struct _tag_hoge*になってしまうです。

755 :ヽ(´ー`)ノ:03/06/03 08:38
これでいいんかいな。

typedef struct _hoge hoge;
struct _hoge {
int value;
hoge* next;
};


756 :デフォルトの名無しさん:03/06/03 09:12
>>755
タグに違う名前を付ける必要は無いですよね?

757 :ヽ(´ー`)ノ:03/06/03 09:44
たぶん必要ないと思われ。ていうか、それぐらい試しておくれよん。


758 :デフォルトの名無しさん:03/06/03 09:58
>>757
コンパイルとおるのは知ってます。
タグ名を区別する理由を知らないので、聞いてみたのです。

759 :デフォルトの名無しさん:03/06/03 10:02
typedef struct hoge{
int value;
struct hoge *next;
} hoge;

これでできなかったっけ?

760 :デフォルトの名無しさん:03/06/03 10:04
>>754
struct _tag_hoge*になったら何か問題があるのかと小一時間問いつめたい。

761 :デフォルトの名無しさん:03/06/03 10:06
俺はこんなのふうに書いてます
>>755とどっちが見やすいかなぁ?

typedef struct _hoge {
   int value;
   struct _hoge* next;
} hoge;

762 :デフォルトの名無しさん:03/06/03 10:07
一文字目がアンダーバーってのはまずいんじゃなかった?
二文字目が大文字でなければいいんだっけ?

763 :デフォルトの名無しさん:03/06/03 10:13
>>762
ボーランドのコンパイラ使ってるけど
警告された事も無いと思う
2文字目大文字にしても同じだった

てっかウィンドウズ関係のヘッダ見てたら
typedef struct _AAA {
int bbb;
} AAA, *AAA;
見たいな書き方たくさんあったよ

764 :デフォルトの名無しさん:03/06/03 10:39
まずいですよ。

765 :ヽ(´ー`)ノ:03/06/03 10:41
__[[:alnum:]_]* と _[A-Z][[:alnum:]_]* は reserved だから使っちゃダメだよん(C99)。


766 :デフォルトの名無しさん:03/06/03 10:49
(´-`).。oO(windows.hが使えなくなる)

767 :デフォルトの名無しさん:03/06/03 10:50
>>763>>766
処理系依存の予約語(マクロなども含めて)だからいいの。

768 :767:03/06/03 10:51
というか、それとかぶらないようにユーザー定義時には禁止しているってだけ。

769 :767:03/06/03 10:51
s/処理系依存/処理系定義/

770 :デフォルトの名無しさん:03/06/03 10:51
>>763,766
C99 ってわざわざ書いてくれてるんだから、仕様書読めよ。

771 :デフォルトの名無しさん:03/06/03 11:06
構造体タグ名とtypedef型名は名前空間が違うから同じでも構わないよね。
C++を睨んで変えてるんじゃないの?

772 :デフォルトの名無しさん:03/06/03 12:24
>>741
void * にしちゃダメなのか?

/* 注:全角空白あるからそのままコピペするなよ! */
typedef struct
{
  int value;
  void *next;
} hoge;

773 :デフォルトの名無しさん:03/06/03 12:51
>>771
C++だって問題なし。
typedef struct hoge hoge;
があればtypedefされたhogeが優先されるけど、
なければstructを省略したhogeが使われる。


774 :デフォルトの名無しさん:03/06/03 13:13
>>772
デスマの香り…。

775 :デフォルトの名無しさん:03/06/03 13:40
>>772
そりゃだめだろ…
nextを参照するときにいちいちキャストすんのか?

776 :デフォルトの名無しさん:03/06/03 13:51
hogeって何?

777 :デフォルトの名無しさん:03/06/03 14:04
>>776
激しく既出。

778 :デフォルトの名無しさん:03/06/03 14:10
>>777
俺の777を返せ

779 :デフォルトの名無しさん:03/06/03 16:30
一方向連結リストをあるメンバでソートするのに効率的な方法はないでしょうか?
1回の走査であるメンバが最も小さい(大きい)構造体を見つけてmallocして…
というバブルソート的なものしか思いつかないのですが。

780 :デフォルトの名無しさん:03/06/03 17:20
>>779
マージソート

781 :デフォルトの名無しさん:03/06/03 17:55
c言語を独習しようと思ってフリーソフトのlsic330試食版を
ダウンロードしたのですが、それからどうすればいいのか
わかりません。誰か教えてください。

782 :デフォルトの名無しさん:03/06/03 17:57
インストール

783 :デフォルトの名無しさん:03/06/03 17:59
>>781
パッケージに含まれるドキュメントを読め。
それからぐーぐるにきけ。
話はそれからだ。

784 :デフォルトの名無しさん:03/06/03 18:06
>>781
330?
CPadも一緒にDLして、CPadから起動すると結構自動的にやってくれる感じで楽ではあるよ

785 :デフォルトの名無しさん:03/06/03 19:18
C言語で、XMLのデータを抜き出す作業について詳しい人いますか?

786 :デフォルトの名無しさん:03/06/03 19:21
>c言語を独習しようと思ってフリーソフトのlsic330試食版を
>ダウンロードしたのですが、それからどうすればいいのか
>わかりません。誰か教えてください。
素人なら、まずLinuxをこんぴうたにインストールしろ。
そうするとgccが使えるようになる。

... まあ、Windowsが使えなくなることもたまにあるが、
CD boot linuxでgo.

787 :デフォルトの名無しさん:03/06/03 19:22
>>785
お呼びでしょうか?

788 :デフォルトの名無しさん:03/06/03 19:23
>>785
漏れとしては、perlで作った方が作業効率は早そうに100XML。
正規表現とかに強いし、何なら連想配列もある。
まあ、phpで組めばもっとえげつないものもできるけどな。

789 :デフォルトの名無しさん:03/06/03 19:32
Ruby がいいよ。

790 :781:03/06/03 19:33
>>782 783 784 786
どうもありがとうございました。

791 :デフォルトの名無しさん:03/06/03 19:45
グローバル変数とgotoはタブーなんでしょうか・・・

792 :デフォルトの名無しさん:03/06/03 19:46
>>787の「まあ、phpで組めばもっとえげつないものもできるけどな。」にワロタ
PHPって直接タグ抜く関数もあったね。

793 :デフォルトの名無しさん:03/06/03 20:28
>>791
使い方の問題。

タブーではない。

gotoの扱いは注意すべきです。
gotoを初心者(無知な人間)が使うと大変です。
gotoは初心者は使っては逝けません。
gotoは使っては逝けません。
となっているだけ。

794 :デフォルトの名無しさん:03/06/03 20:32
名前が後藤だと、この業界への就職が極端に不利です
残念でしたね

795 :デフォルトの名無しさん:03/06/03 20:46
>>794
漏れがことごとく就職に失敗したのはそのせいだったのか…

796 :デフォルトの名無しさん:03/06/03 20:57
名前が須藤だと、ネットワーク管理者の採用に不利です
可哀相に

797 :デフォルトの名無しさん:03/06/03 21:54
あのーくだらないこと聞いてすみませんが、ユーザの入力を求めて
入力が正しくない場合は再度入力を求める処理は以下で間違っているでしょうか?
何も入力しなくても文字数の限度を超えてもスルーされてしまうのですが…

printf("項目「ID」の値を入力してください。\n");
while(fgets(p->ID, 5, stdin) == NULL)
 printf("入力が不正です。もう一度入力してください。\n");

798 :デフォルトの名無しさん:03/06/03 21:59
>>797
間違っている。

何も文字を入力しない場合でも改行を入力するので、
p->ID に "\n" が入れられて fgets 成功。
文字数の限度を超えても fgets は失敗しない
(残りは次の fgets の時に得られる)ので、fgets 成功。
よってどちらの場合においても NULL は返ってこない。

入力された文字をチェック汁。

799 :デフォルトの名無しさん:03/06/03 22:22
分かりました。ありがとうございます

800 :デフォルトの名無しさん:03/06/03 22:25
800get

801 :デフォルトの名無しさん:03/06/03 23:47
XMLから データの抜き出す作業なんですが
今、 データがいくつかあるかわからないので
リスト構造体
 typedef struct node{
xmlChar *agent_name;
struct node *next;
};NODE
って作りました。



802 :デフォルトの名無しさん:03/06/04 00:03
int parse_parties(xmlDocPtr doc, xmlNodePtr cur, node NODE)
{
NODE *head;
NODE *p;

*head = NULL;

子ノードへ移る作業を行い

  while(cur != NULL){
cur = cur -> xmlChildrenNode;

if(!xmlStrcmp(cur->name,(const xmlChar *) "name" )){
p=malloc(sizeof(NODE));
if(!p){
エラー処理

      p ->agent_name=xmlNodeListGetString(doc, cur->xmlChildrenNode,1)
p -> next = head;
next = p;
}
cur = cur -> next;
}
}
return 0;
}
と作ったのですが、 おかしいとこありますか?

803 :デフォルトの名無しさん:03/06/04 00:04
C言語をおもしろおかしく学びたいです。こつを教えてください。

804 :デフォルトの名無しさん:03/06/04 00:06
>>802
> *head = NULL;
間接参照していいのか?

805 :デフォルトの名無しさん:03/06/04 00:09
>>802
> };NODE
セミコロンの場所が

>>802
> , node NODE)

おいおい

806 :805:03/06/04 00:11
一行目は>>801の間違い

807 :デフォルトの名無しさん:03/06/04 00:19
あ };NODEは ミスです^^;



808 :デフォルトの名無しさん:03/06/04 00:31
http://pc2.2ch.net/test/read.cgi/tech/1054392076/210
C言語ってのは、コンパイラによっては、ソースコードにC++の構文を
用いてもエラーにならない。
「C++で書いてます」というコードも、実は殆どC言語特有のむかーしの
伝統的なgets()やputs()関数ばかりで
printf()や<<をあまり使わないコードでもコンパイルが通る。

809 :デフォルトの名無しさん:03/06/04 00:34
やっぱ 引数かぁ・・・
引数がわからん・・

810 :デフォルトの名無しさん:03/06/04 00:37
>>809
型名と変数名の区別はついている?

811 :デフォルトの名無しさん:03/06/04 00:56
微妙です。 型って int とか charとかですよね?

812 :デフォルトの名無しさん:03/06/04 00:58
便乗質問ですが、>>797のような場合入力値チェックするとき
何百文字入力されようとfgetsが成功してしまうのなら
入力された値が4文字以内かどうかをチェックするには
どうすればいいんでしょうか??

813 :デフォルトの名無しさん:03/06/04 02:45
if文を使ってそのプログラムを
また最初からはじめるプログラムを書きたいのですが
goto文以外のやり方がわかりません
教えてください

814 :デフォルトの名無しさん:03/06/04 02:48
どんなプログラムか知らないけど、gotoで実現できるなら
それでいいんじゃないの?}

815 :デフォルトの名無しさん:03/06/04 02:58
>>812
fgetsは
 ・指定されたサイズに達した
 ・\nが現れた
 ・EOFに達した
のどれかまで読んでreturnする。
だから、規定の文字より一文字多く読んで
 ・EOFに達した(fgetsの値がNULLだった)場合
  ・文字列の末尾が\nだったら、規定の文字数である
  ・そうでない場合、strlenで規定の文字数以下であるか判定する
 ・EOFでなかった場合、文字列の末尾が\nだったら規定の文字数である
というふうに判定するかな。文字列の末尾が\nだったら、は文字列に\nが含まれていたら、でもいい。

816 :デフォルトの名無しさん:03/06/04 03:32
素数を発見するためにエラトステネスのふるいを用いて、素数発見を
行おうと思うのですが、配列を用意してもフラグにしか使わないので
1ビットずつ使いたいんです。そこで調べてみたら、ビットフィールドとか
なんたらをマスクして、とかあったんですけど、いまいちよく分かりませ
ん。要するに、中身がそれぞれ1ビットずつの配列を作るにはどうすれ
ばいいのか教えてください。できれば、ソース付で・・・・

817 :デフォルトの名無しさん:03/06/04 03:49
>>816 struct で unsigned で ビットとかにできるけど、
ビット演算するなら、そのまま ビット演算し使った方が早いよ。


818 :デフォルトの名無しさん:03/06/04 04:03
fgets(buf , c , stdin)があっても入力を受け付けずに
素通りしてしまうことがあるのはなぜなんでしょうか?

fgets();
fgets();
・・・
と5つくらい入力を続けるのですが、一番上のfgetsだけ素通り、
2つ目からは正常に入力受付のカーソルが出ます。
こんなことってありますか?

819 :デフォルトの名無しさん:03/06/04 04:09
cが0なんじゃないの

820 :デフォルトの名無しさん:03/06/04 04:16
>>819
いえ、全て定数で1以上なのです。

821 :デフォルトの名無しさん:03/06/04 04:17
1もダメだ

822 :818:03/06/04 04:40
済みません、書き方が悪かったですね・・
どれも最低でも5以上です。いろんな箇所でfgetsを並べて使ってますが、
どれも一番上や単独使用の場合は素通りされて、2つ目以降は入力を求められます。

823 :818:03/06/04 04:59
ていうか、俺のVCおかしい…?
if(・・・)
 ・・・
else
 ・・・
でifの処理が実行された後にelseが実行されたりするし…どーなってんだ
もう何がなんだか・・・

824 :デフォルトの名無しさん:03/06/04 05:12
ソース晒せ。

825 :818:03/06/04 05:21
謎は解けた…下のようなことやってるんですが、fgetsで入力した後
error2が出た(文字数制限を越えた)場合、ループの最初に戻って
またfgetsに来るんですが、ここで勝手に値が入力されて先に進んでるようなのです。
溢れた分が勝手に入力されてるんでしょうか?これを防ぐ手段はないでしょうか?

printf("値を入力してください。(最大3桁)\n");
while(1){
 if(fgets(buf, 7, stdin) == NULL)
  printf("error!もう一度入力してください。(1)\n");
 else{
  if((np = strchr(buf, '\n')) == NULL){
   printf("error!もう一度入力してください。(2)\n");
  }
  else{
   *np = '\0'; /* '\n'を'\0'に置き換える */
   break;
  }
 }
}

826 :デフォルトの名無しさん:03/06/04 05:48
#include<stdio.h>
main()
{
int x;
printf("Are you 2chner? Yes:1 No:2\n");

scanf("%d",&x);
switch(x){
case 1:
printf("You are 2chner!\n");
break;
case 2:
printf("You are'nt 2chner\n");
break;

return(0);
}
}

827 :デフォルトの名無しさん:03/06/04 06:49
>>818
戦略ミス。
fgets()で読めなかった文はバッファに残るので、読み捨てる必要がある。
なので、いっそ丸々読みこんでから判断する方がいい。

828 :818:03/06/04 07:44
>>827
どうもです。バッファに残った分は次にユーザ入力を求める場合に
勝手にそれを入力としてしまうということですか。
しかしプログラムで最初にfgets()が呼ばれた時にスルーされてしまうのは
何故なんでしょう・・・その前にはscanf()による整数の入力しか行ってないんですが。

丸々読むにしても、読み込む配列に制限があるので
出来ればバッファを読み捨てる方法を教えていただけないでしょうか。

829 :デフォルトの名無しさん:03/06/04 08:23
>>828
http://www.catnet.ne.jp/kouno/c_faq/c12.html#0

830 :デフォルトの名無しさん:03/06/04 08:50
>>818
だからscanf()は使うなとあれほど・・・

831 :デフォルトの名無しさん:03/06/04 09:01
>>813
longjmp
とか?

832 :デフォルトの名無しさん:03/06/04 10:03
scanf()使わずにどうやって数値をint型変数に入力するんですか??

833 :デフォルトの名無しさん:03/06/04 10:08
>>832
sscanf()
atoi()

など

834 :デフォルトの名無しさん:03/06/04 10:22
strtol() をおすすめします。

835 :デフォルトの名無しさん:03/06/04 12:37
p->nというのがあったんですけど、この->はどういう意味なんですか?

836 :デフォルトの名無しさん:03/06/04 12:49
->は、ポインタ演算子というものです。
検索してくり。

837 :デフォルトの名無しさん:03/06/04 12:49
(*p).n

838 :デフォルトの名無しさん:03/06/04 12:53
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=-%3E&btnG=Google+%8C%9F%8D%F5&lr=

839 :デフォルトの名無しさん:03/06/04 14:46
>>816
#include <limits.h>

void set_bit(unsigned char *buf, int index, int value) {
unsigned char *p = &buf[index / CHAR_BIT];
if (value)
*p |= (1 << index % CHAR_BIT);
else
*p &= ~(1 << index % CHAR_BIT);
}

int get_bit(unsigned char *buf, int index) {
return buf[index / CHAR_BIT] & (1 << index % CHAR_BIT);
}

こんな感じかな。テストしてないよ。

840 :デフォルトの名無しさん:03/06/04 15:00
>>839
補足。配列のサイズ(保持するbitの数)をNとすると、
確保すべきunsigned charの配列aのサイズは、

unsigned char a[N / CHAR_BIT + 1];

ね。

841 :デフォルトの名無しさん:03/06/04 15:42
>>839
即レスまじ感謝です。そこで、申し訳ないんですが使い方を教えていた
だけるとうれしい次第であります。なにぶんCは初めてでして


842 :デフォルトの名無しさん:03/06/04 16:45
>>841
そんなに難しくはないと思うんだが、使い方がないとやっぱりよくわからんかw
まず、情報を保持するバッファを用意する。これはunsigned charの配列でとる。
大きさは>>840参照。

んで、インデックスiのビットを1にしたいときはset_bit(a, i, 1);ってやる。aはバッファね。
同様にビットを0にしたいときはset_bit(a, i, 0);ってやる。

インデックスiのビットがセットされてるかどうかをチェックしたいときは、
get_bit(a, i);ってやる。0が反ってきたらセットされてない、それ以外のときはセットされてる(1でないことに注意)。

使用例

#define N 100 /* 保持するbitの数 */
void print_bit(unsigned char *buf, int index) {
printf("index %d: ", index);
if (get_bit(buf, index))
printf("on\n");
else
printf("off\n");
}
int main(void) {
static unsigned char a[N / CHAR_BIT + 1];
set_bit(a, 5, 1); /* 5番目のbitをon */
print_bit(a, 5); /* どうなってるか出力 */
set_bit(a, 5, 1); /* 5番目のbitをoff */
print_bit(a, 5); /* どうなってるか出力 */
return 0;
}


843 :818:03/06/04 18:08
未だに解らない・・・
scanf()でintに小さな整数を入力するだけならオーバーフローは
起こらないはずですよね?なのに何故かその後特定の箇所で
入力受付(fgets、scanf)がスルーされます。
(正常に入力を受け付ける箇所もある)
しつこくて済みませんがこの原因をどなたか教えてください。

C言語始めたばかりの頃演習やらでscanf使いまくりだったけど
こんなことに一度も出くわしたことないんですが・・

844 :デフォルトの名無しさん:03/06/04 18:09
>>843
ttp://www.catnet.ne.jp/kouno/c_faq/c12.html#18

845 :デフォルトの名無しさん:03/06/04 18:11
h抜くな

846 :デフォルトの名無しさん:03/06/04 18:14
ハァ?

847 :デフォルトの名無しさん:03/06/04 18:39
>>843
だから scanf() は使うなよ。
代わりに fgets() と sscanf() 使え。

どうせ、"\n" がバッファに残ってるってことだと思う。

848 :デフォルトの名無しさん:03/06/04 19:55
インクリメント デクリメントの詳しい説明してるサイトが見つからない
 本当は1を足したり引いたりするためのものじゃないと聞いたのだが



849 :デフォルトの名無しさん:03/06/04 19:58
>>848
聞いた本人に聞けば?

850 :デフォルトの名無しさん:03/06/04 19:58
>>848
1足したり引いたりするためのものです。

851 :850:03/06/04 19:59
もちろん、++や--のことだよね?

852 :デフォルトの名無しさん:03/06/04 19:59
はいa++とか

853 :デフォルトの名無しさん:03/06/04 21:07
++a と a++ の違いはあまり気にするな。
それを活用すると、最悪、最適化を阻害することもある。

まぁ、C++ を使う事があるなら、
演算子のオーバーロードする時は
++a の方が実装しやすいということだけは言っておく。

854 :デフォルトの名無しさん:03/06/04 21:16
13とか1以外が足されたりすることがあるらしいんですが


855 :デフォルトの名無しさん:03/06/04 21:26
typedef unsigned char uchar3[3]
これってどういう意味かわかりますか?

856 :デフォルトの名無しさん:03/06/04 21:29
>>855
わかるけどそれがどうしたの

857 :デフォルトの名無しさん:03/06/04 21:30
>>848
ポインタのことを言ってるような気がするが、それならば気にする必要はない。

858 :デフォルトの名無しさん:03/06/04 22:24
オブジェクトによって使わないメンバもいくつか持つ構造体を1つ作るのと
必要なメンバだけを持った似たような構造体を複数作るのどっちがいいと思う?
要はC++で言う継承をスマートな形でCで実現したいのだが。。。



859 :デフォルトの名無しさん:03/06/04 22:28
char line[100], *p;

      ・
      ・

fgets(line, sizeof(line), stdin);

      ・
      ・

for(p = line; *p; p++);
printf("Line size = %d\n", p-line);

      ・
      ・

というソースで、 for(p = line; *p; p++) のところがよくわかりません。*pというのが範囲なんでしょうか?
どなたかお教えください。

860 :デフォルトの名無しさん:03/06/04 22:28
>>858
>オブジェクトによって使わないメンバもいくつか持つ構造体を1つ作るのと
>必要なメンバだけを持った似たような構造体を複数作るのどっちがいい

継承自体わかってないんじゃないかという気がする。


861 :デフォルトの名無しさん:03/06/04 22:29
>>859
文字列の終わりまで処理したいんだろ

862 :デフォルトの名無しさん:03/06/04 22:30
*pは*p != '\0'

863 :デフォルトの名無しさん:03/06/04 22:30
>>859
配列lineの内容が文字列だとしたら、最後に'¥0'(=0)があるわな。
for文の第2式が偽(=0)になればループが止まるから、そいつを利用
してるんだよ。日本語下手ですまん。

864 :859:03/06/04 22:33
>>861-863
そうだったんですか。ありがとうございまっした!

865 :デフォルトの名無しさん:03/06/04 22:51
ただバイナリにしたいだけなんですが
シェルスクリプトと同等のCのプログラムを作るにはどうしたらいいですか?
mkdirとかcdとかわかりません

866 :デフォルトの名無しさん:03/06/04 22:57
>>865
何言ってるかわからん。

867 :デフォルトの名無しさん:03/06/04 23:03
>>865
さぱーりわからん

868 :デフォルトの名無しさん:03/06/04 23:03
>>865
標準Cでは無理

869 :865:03/06/04 23:05
unixコマンドのソースを教えてください
てことです

870 :デフォルトの名無しさん:03/06/04 23:06
なんでそれがシェルスクリプトと同等なんだろう。

871 :デフォルトの名無しさん:03/06/04 23:07
/* false.c */
#include <stdlib.h>
int main()
{
return EXIT_FAILURE;
}


872 :デフォルトの名無しさん:03/06/04 23:07
ぼうやだからさ

873 :デフォルトの名無しさん:03/06/04 23:09
>>869
http://www.gnu.org/
http://www.freebsd.org/

874 :865:03/06/04 23:11
シェルスクリプトでかいたのをCで書きたかっただけです
意味不明ですみません

875 :デフォルトの名無しさん:03/06/04 23:12
>>874
system

876 :直リン:03/06/04 23:13
http://homepage.mac.com/yuuka20/

877 :858:03/06/04 23:33
>>860
継承自体わかってない>それはない
お前の読解力か俺の文章化能力が足りないだけ

具体的に言うと3Dゲームで3Dモデルとビルボードが混在している
こんなとき両方とも描画オブジェクトの
派生クラスとしていっしょに管理したいだろ?
これをCでやるとき構造体を1つにまとめるのか?個別にしてをキャストで使い分けるのか?
お前等ならどうする?


878 :デフォルトの名無しさん:03/06/04 23:54
>>877
素直にC++使う。

つうかCでやるなら基底クラスに相当する構造体を
派生クラスの構造体のメンバーに持たせちゃうかなあ。

typedef struct {
int boke;
char *vaka;
} base_class;

typedef struct {
base_class base;
long mona;
} delivered_class;

Cでは継承なんてあんまり考えんでプログラム組むからのう…


879 :デフォルトの名無しさん:03/06/05 00:44
>>877
質問者の態度じゃないな(笑)

880 :デフォルトの名無しさん:03/06/05 00:52
makeでターゲットディレクトリをビルドしたいときコマンドラインでどのよ
うに記述したらいいですか?
コンパイラはBorlandのフリーのbcc5.5です。

881 :デフォルトの名無しさん:03/06/05 00:55
>>880
スレ違いです。

882 :デフォルトの名無しさん:03/06/05 01:03
>>865
>unixコマンドのソースを教えてください
マジで ?


883 :デフォルトの名無しさん:03/06/05 01:06
>>869
BSDやらLinux系ディストリは全部ソースがありますが?
それを全部ここに出力せいと?

884 :デフォルトの名無しさん:03/06/05 01:08
gets()

scanf()
は何が違うのでしょうか?

885 :デフォルトの名無しさん:03/06/05 01:08
>>883
よし、俺がやってやろう。
次スレの用意も頼む。

886 :デフォルトの名無しさん:03/06/05 01:09
>>884
標準入力から読み込むこと以外、共通点はないよ・・・・

887 :動画直リン:03/06/05 01:13
http://homepage.mac.com/hitomi18/

888 :デフォルトの名無しさん:03/06/05 01:16
すいません!
1〜10まで順番に足していくプログラムが解りません!
ソースお願いしますm(__)m

889 :デフォルトの名無しさん:03/06/05 01:18
int n = 10, sum;
sum = n * (n + 1) / 2;

890 :デフォルトの名無しさん:03/06/05 01:20
888です!
すいません!
コンパイラはcygwinです!
m(__)m

891 :デフォルトの名無しさん:03/06/05 01:20
>>889
仕様を満たしていないから駄目。
1〜10までを足した値を得るのではなく、1〜10までを順番に足すプログラムでなければならない。

892 :デフォルトの名無しさん:03/06/05 01:21
>>890
Cygwinはコンパイラじゃねぇ!

893 :デフォルトの名無しさん:03/06/05 01:21
main()
{
1+2+3+4+5+6+7+8+9+10;
}

894 :デフォルトの名無しさん:03/06/05 01:22
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

895 :894:03/06/05 01:22
マケタ

896 :デフォルトの名無しさん:03/06/05 01:27
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

void main(void)
{
char moji; /* 文字列の一時的な格納領域 */
int len;
int number; /* 変換後の数値       */
while(1)
{
printf("数値を6桁以内に入力して=>");
rewind(stdin);
scanf("%s",&moji);
len=strlen(moji);
if (len>=7)
{
printf("7桁以上です。\n");
}
if (!isdigit(moji))
{
printf("数値じゃありません。\n");
}


897 :デフォルトの名無しさん:03/06/05 01:27

number=atoi(moji);
if(number>0)
{
printf("プラスです。\n");
}
else if(number==0)
{
printf("ゼロです。\n");
}
else
{
printf("マイナスです。\n");
}
}
}
エラーが
error C2664: 'strlen' : 1 番目の引数を 'char' から 'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
error C2664: 'atoi' : 1 番目の引数を 'char' から 'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
cl.exe の実行エラー
と出るんですけど分かりません

898 :デフォルトの名無しさん:03/06/05 01:28
>892
間違った!
GNU Cコンパイラだ!

1+2+3+4…
ちがーう!(゚А゚)

899 :デフォルトの名無しさん:03/06/05 01:31
>>897
文字と文字列の区別がついてない

900 :デフォルトの名無しさん:03/06/05 01:32
>>899
的確な指摘。

901 :デフォルトの名無しさん:03/06/05 01:34
moji[]でいいの?

902 :デフォルトの名無しさん:03/06/05 02:13
あげ

903 :デフォルトの名無しさん:03/06/05 02:13
さげてた。逝ってきまつ


904 :デフォルトの名無しさん:03/06/05 02:13
さげてた。逝ってきまつ  


905 :????:03/06/05 03:05
int val, ans = 0;

for ( val=1; val<11; val++) {
ans += val;
}

906 :デフォルトの名無しさん:03/06/05 03:10
#include <stdio.h>
main()
{
int n,mushi;
printf("1から10までの整数を加算するプログラム\n");
for(n=1;n<=10;n++){
do{
printf("%d",n);
printf("を入力してください。数字以外の入力は動作を保証しません。\n");
scanf("%d",&mushi);
}while(n!=mushi);
};
printf("答は55です。");
}

907 :デフォルトの名無しさん:03/06/05 03:48
>>906
少なくともコンパイル通る様にしろよ。
一目で分るぞ。
for(;;){};←なんだ?

908 :デフォルトの名無しさん:03/06/05 03:56
>>907
ハァ?

909 :デフォルトの名無しさん:03/06/05 04:01
>>906の後ろから3行目に注目すると、>>908の負け。

910 :デフォルトの名無しさん:03/06/05 04:04
>907 >909
寝言はコンパイルしてから言え。


911 :デフォルトの名無しさん:03/06/05 04:11
>>910
頼むからこうしてくれ。

#include <stdio.h>
main()
{
int n,mushi;
printf("1から10までの整数を加算するプログラム\n");
for(n=1;n<=10;n++){
do{
printf("%d",n);
printf("を入力してください。数字以外の入力は動作を保証しません。\n");
scanf("%d",&mushi);
}while(n!=mushi);
}
;
printf("答は55です。");
}

912 :896-897:03/06/05 04:23
分からない。誰か訂正したプログラムキボンヌ!!
スマソ。

913 :デフォルトの名無しさん:03/06/05 04:29
>>911
なんで?

914 :デフォルトの名無しさん:03/06/05 04:29
空文(「;」のみからなる文)

915 :デフォルトの名無しさん:03/06/05 04:32
>>912
char moji; → char moji[774];
scanf("%s",&moji); → scanf("%s",moji);

916 :デフォルトの名無しさん:03/06/05 04:45
>>914
理由になってない

917 :デフォルトの名無しさん:03/06/05 04:54
その位置に;がついていたとしても、
コンパイルは無事にとおるだろうし意図したとおりに動作はするだろう。
しかし通常そのような余計な;はつけないな。

918 :デフォルトの名無しさん:03/06/05 06:15
整数の場合、++を繰り返すといつかオーバーフローしますが、
不動小数点数の場合はオーバーフローしないのですか?

寝る前に作ったfloat型の変数をインクリメントし続けて、
インクリメント前の値と比較するテストプログラムが
いまだにCPUフル稼働で動きつづけてます。
ログを見ると274877906945.000000まで逝ってます。

919 :デフォルトの名無しさん:03/06/05 06:34
>>917
そんなことは>>911の理由にはならないな。

920 :デフォルトの名無しさん:03/06/05 07:13
void StringCopy(char *s1, const char *s2)
{
while (*s1++ = *s2++)
;
}
これってs2がヌルぽになったら偽になるらしいですが何故???


921 :デフォルトの名無しさん:03/06/05 07:25
*s1もぬるぽになるから

922 :デフォルトの名無しさん:03/06/05 07:29
#include<stdio.h>
int main()
{
int d,k,l,num[100][100],dan[100],sum,sumt,m,n,po;
/*d:段数 k:きざみ若しくは現在の段 num:データ配列 dan:各段の現在のポインタ*/
/*sum:合計 sumt:最大合計 m,n:予備 po:ポインタ位置修正用変数*/
-------------------------------中略---------------------------
/*以下、計算処理*/
for(k = 1;k <= d;k++){dan[k] = 1;}
for(l = 1;l <= 100;l++){
sum = num[1][1];
for(k = 1;k <= d;k++){sum = sum + num[k][dan[k]];}
for(k = 1;k <= d;k++){printf("%d",num[k][dan[k]]);}
printf("=%d",sum);
if(sum > sumt){sumt = sum;}/*ここまで正常*/
for(po = d;po >= 2;po--){
if(dan[po] = dan[po-1]){ /*異常*/
for(m = po;m <= d;m++){dan[m] = dan[m] + (po - m + 1);}
po = 1;
}
}
printf("\n");
}
printf("biggest = %d\n",sumt);
return 0;
}

d段のピラミッド上に並んだ数を右・左に一個ずつ移動しながら降りていき、
その道筋の合計値が一番高い物を求め、出力するプログラムなのですが・・・
異常と示してある部分で、if分に入る際にどうやらdan配列の中身が全て1に
戻ってしまうようなのです。(前後で出力して確認しました)これはどのような原因なのでしょうか・・・?

923 :デフォルトの名無しさん:03/06/05 07:35
>>922 適当にこたえるけど
>if(dan[po] = dan[po-1]){ /*異常*/
= じゃダメでしょ。

924 :920:03/06/05 07:41
*s1に*s2を代入できないから偽ってことです??
意味わからん!

925 :デフォルトの名無しさん:03/06/05 08:02
>while (*s1++ = *s2++);

do {
 *s1 = *s2;
 s1++;
 s2++;
}while(*s1) コウナル

926 :デフォルトの名無しさん:03/06/05 08:09
>>920-921
NULLとNUL文字を混同してる

927 :デフォルトの名無しさん:03/06/05 08:13
         ,l'       ::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::. |     はめはめ〜
         l       ::::::::::::::::::::;;;;;;i;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::: i    i
         i,       ..::::: ○:::::::;;;;/;;;;;;;;;;;;;;;;;;;;:::::::::::::::::: !   /
         i      ..::::::::::::::::::::::;;;/;;;;;;;;;;;;;;;;;;;;;;:::::::::○::  i'   /
          'l,    ..:::::::::::::::::::::::::::/|、;;;;;;;;;;;;;;;;;/::::::::::::::::: ,i'  /
          i,   .::::::::::::::::::::::::::/::|  ~"''''"/::::::::::::::::::: /  /
          ' .,  :::::::::::::::::::::::/:::::|'⌒`ヽ,/;:::::::::::::::::: / /
           `・、., ::::::::::::::/;::::::,人,__,/;;;;;:::::::::::::://
              ~--‐ '           -''"_/

928 :920:03/06/05 08:23
>>925はwhileの継続条件の*s1がぬる文字だから偽になるのです?
ぬる文字だったら偽になるのでしょうか?

929 :デフォルトの名無しさん:03/06/05 08:34
0だからね

930 :デフォルトの名無しさん:03/06/05 08:41
沢村が>>925と同じミスをしていたな

931 :920:03/06/05 09:04
え?
>>925ってミスなの?
せっかくとりあえずだけど納得できたのに・・・
どこがミスなのでしょうか?

932 :デフォルトの名無しさん:03/06/05 09:06
>>931
ループ終了条件が違う

933 :920:03/06/05 09:09
>while (*s1++ = *s2++);

do {
 *s1 = *s2;
 s1++;
 s2++;
}while(*s2)

こうかな?

934 :デフォルトの名無しさん:03/06/05 09:12
敢えて展開するなら
do {
 c = *s1 = *s2;
 s1++;
 s2++;
}while(c);

s1++されるのは条件判定後である点に注意

935 :デフォルトの名無しさん:03/06/05 10:04
>>917
同意。そんなソースで作りつづけていたら、そのソースを見た人間が
for(〜;〜;〜){

};
を正式な構文として誤認識する恐れがある。

普通、コメントとかは別だが、動作に無関係なものは入れないように配慮する。
っていうか、いったいどうやったらそんなコード書くようになることやら...

936 :デフォルトの名無しさん:03/06/05 10:10
漏れは要らない{〜}とか(〜)とか結構付けているからなぁ

937 :デフォルトの名無しさん:03/06/05 10:30
よくmain(int argc, char *argv[])
ってみるけどこの引数って何すか?
どんな意味が?

938 :デフォルトの名無しさん:03/06/05 10:36
プログラムをコンパイルするとき、gccなら
gcc test.c -o test -O3
とかってやるよな?これはgccに色々パラメータを与えてるんだ。

プログラムを実行するときに、与えられたパラメータを読み込むのに使う。
argcは何個パラメータがあるか、char *argv[]はその内容だ。

以下を試してみてくれ。

#include <stdio.h>

int main(int argc,char *argv[]){
int i;
for(i=0;i<argc;i++){
printf("[%5d] - %s \n",i,argv[i]);
}
return 0;
}

$ ./a This is a pen.
[ 0] - ./a
[ 1] - This
[ 2] - is
[ 3] - a
[ 4] - pen.


939 :デフォルトの名無しさん:03/06/05 10:37
>>937
コマンドの引数だろ。。

940 :デフォルトの名無しさん:03/06/05 10:39
>>漏れは要らない{〜}とか(〜)とか結構付けているからなぁ
考えようだが、基本的に
if(a==0)a=10;
というような書き方してると、elseとの対応がわからなくなる可能性もあるので、
if(a==0){
a=10;
}
という書き方の方が望ましいかと。どうせコンパイルした結果は変わらないだろうし。


941 : :03/06/05 14:01
>>940
追加する時もうっかりミスが減るしね。
()は優先度をわかりやすくするときにも使うかな。
if ((a >= 0) && (a <= 10))とか。


942 :デフォルトの名無しさん:03/06/05 14:11
for(i=0;i<100;i++){
int a=10;
if(a*i == 1)
  printf("%d\n",a);
}

というようなfor文の中に、変数宣言をした時は
毎回変数の領域を確保するのか
それともコンパイラが最適化してくれるのかどっちなんでしょうか?

943 :デフォルトの名無しさん:03/06/05 14:15
>>942
処理系依存

944 :デフォルトの名無しさん:03/06/05 14:44
>>942
その場合、レジスタに直接割り当てられる「可能性」もある

945 :デフォルトの名無しさん:03/06/05 14:58
printf("%e",…… と書くと
8.000000e+001と出力されます

001の方の桁数を変更することはできないのですか?
ちなみに8.000000の桁数の変更はわかります

946 :デフォルトの名無しさん:03/06/05 14:58
printf("%e",…… と書くと
8.000000e+001と出力されます

001の方の桁数を変更することはできないのですか?
ちなみに8.000000の桁数の変更はわかります

947 :デフォルトの名無しさん:03/06/05 16:26
>>946
指数部の桁数は処理系依存じゃなかったかな。

948 :デフォルトの名無しさん:03/06/05 17:11
数字反転のプログラムで

12345 → 54321
12300 → 321
0 → 0

という風に作りたいのですが、0の場所をどうすればいいかどうしても分かりません。
どなたか教えてくれませんでしょうか?

949 :デフォルトの名無しさん:03/06/05 17:15
オーバーフロウしない範囲なら数値にした後、数字列に戻す。

950 :デフォルトの名無しさん:03/06/05 18:23
>>948
1.変換したい数値を文字列に変換
2.変換した文字列を反転
3.反転した文字列を数値に変換

これで OK

951 :948:03/06/05 20:02
>>949-950
なるほど・・・ありがとうございました

952 :デフォルトの名無しさん:03/06/05 22:08
関数が暗記できません!!!!!

953 :デフォルトの名無しさん:03/06/05 22:23
>>948
反転したあと文字列の先頭から'0'判定して、
'0'の数だけmemmoveでもいんじゃない?
これなら何桁でもオーバフローしない。

あるいは、反転する前に1の位から上位に
判定していって、'0'以外の数字が見つかった
ところから処理をはじめるとか。

954 :186:03/06/05 22:35
>952
暗記じゃない。理解汁

955 :918:03/06/05 23:20
テストプログラム動かしっぱなしで家を出て、
帰って来て見たけど、まだ動きつづけてる。
ログによると、2199023255553.000000を超えているらしい。

インクリメントでfloatをオーバーフローさせるのは相当遠いらしい。
もぅやーめた。

956 :デフォルトの名無しさん:03/06/05 23:44
つーか、そのうち精度をオーバーして空回りするよ。

957 :デフォルトの名無しさん:03/06/05 23:49
FLT_MAXを入れて1.0を足してみればいいのに。

958 :デフォルトの名無しさん:03/06/05 23:51
>>957
あーあ、いっちゃった。

959 :918:03/06/06 00:13
float x = 0;
for(;;)
{
 float y = x;
 ++x;
 if( !( x > y ) )
 {
  // このときの x の値を調べたかったのです
 }
}

960 :デフォルトの名無しさん:03/06/06 00:35
>>955
浮動小数点数で遊ぶときは、ちゃんと例外処理を入れといた方がいいよ。

961 :デフォルトの名無しさん:03/06/06 00:39
#include <stdio>
main()
{
float f;
for (f=1.0 ; f+1>f ;f=f*2); ;
printf ("%e\n",f);

for(f=1.0 ; f+1>f ; f=f*2+1); ;
printf ("%e",f);
}

962 :デフォルトの名無しさん:03/06/06 01:08
#include <stdio>
main()
{
float f;
for (f=1.0 ; f+1>f ;f=f*2); ;
printf ("%f\n",f);
printf ("%f\n",f-1);
printf ("%f\n",f-10);
printf ("%f\n",f-1000);
printf ("%f\n",f-10000);
}

963 :918:03/06/06 01:24
二分探索で見つけた値をいじってみたんだけど、
++とか--でこっそり数億かわってる・・・。
あぶねぇ。・・・アァ、アノコードシュウセイシナキャ・・・

964 :デフォルトの名無しさん:03/06/06 01:42
>>918
浮動小数点数は一度に数桁しか表現できないから、
数が大きくなってくると 1 足しても何も起こらなくなっちゃうよ。

965 :デフォルトの名無しさん:03/06/06 03:35
なんでfgetsは読み込む文字数を制限できるのに、getsはできないようにしたんでしょうね。

966 :デフォルトの名無しさん:03/06/06 04:43
歴史的に順番が逆なんでねえの?
gets が読み込む文字数を制限できなかったから
fgets で読み込む文字数を制限できるようにした、と。
よく知らないけど。


967 :デフォルトの名無しさん:03/06/06 07:10
プログラムの終了時にexit,returnを入れると思うのですが、
その2つの違いがよくわかりません。
どのように違うか、わかりやすく教えてください。
よろしくお願いします。

968 :直リン:03/06/06 07:13
http://homepage.mac.com/yuuka20/

969 :デフォルトの名無しさん:03/06/06 09:02
>>967
return → 関数の処理を終了する
exit() → プロセスの処理を終了する

970 :デフォルトの名無しさん:03/06/06 12:14
アホ丸出しの質問で悪いんだが
>>2のリンクにあるホームページでgccって
どこでダウンロードすればいいんだ?
教えて君でスマソ。

971 :デフォルトの名無しさん:03/06/06 12:20
>>970
> アホ丸出しの質問で悪いんだが
> >>2のリンクにあるホームページでgccって
> どこでダウンロードすればいいんだ?
> 教えて君でスマソ。
http://gcc.gnu.org/install/binaries.html
普通にダウンロードからいけたよ。

972 :970:03/06/06 12:35
良く読んだら言葉足らずだな…
gccのHPのどこで、どのコンパイラをダウンロード
すれば一番良いのかと、聞きたかったんでつ…・゚・(ノД`)・゚・

973 :デフォルトの名無しさん:03/06/06 13:42
>>972
OSによってちがう。
windows ならCygwin かMinGW。

974 :970:03/06/06 13:53
>>973
thx。
windows使ってるんでそれでやってみるYO!


975 :デフォルトの名無しさん:03/06/06 16:36
昨日から勉強始めました。C machineてソフトを使って、教本に載ってる例を参考にしながら自分で書いて動作確かめながらやってるんですが、同じように書いたと思うんですがエラーが起きます。
何度も見直したんですが解らないので・・・凄い単純な見落としがあるかも知れないんですが。

/*if文と等価/関係演算子*/
#include <stdio.h>
main()
{
int a,s;
printf("整数を二つ入力して下さい\n");
printf("それらが満たす関係を示します: ");
scanf("%d %d",&a,&s);

if (a==s)
printf("%dは%dと等しい\n",a,s);

if (a!=s)
printf("%dは%dと等しくない\n",a,s);

if (a<s)
printf("%dは%dよりも小さい\n",a,s);

if (a>s)
printf("%dは%dよりも大きい\n",a,s);

if (a>=)
printf("%dは%d以上である\n",a,s);

if (a<=s)
printf("%dは%d以下である\n",a,s);

return 0;
}

976 :デフォルトの名無しさん:03/06/06 16:47
>>975
エラーが出ますとだけ書いて、エラーの内容を書かないやつは
聞く気がないんですよね。

977 :デフォルトの名無しさん:03/06/06 16:52
あとCmachineとかいうのは使っちゃいかんとあれほど…
あれはC処理系じゃないのでこのスレで質問するのはスレ違い。

出てるのは文法エラーとかsyntax errorとかだろう。
下から2番目のifの条件式が変だぞ。

978 :デフォルトの名無しさん:03/06/06 18:52
このプログラムの出力結果の説明をお願いします。
1.〜
2.〜  という感じで。
#include<stdio.h>
main()
{ char a[10];
int n,k,i,j,l,m,h,g;
scanf("%d %d",&n,&k);
for(i=0;i<n+1;i++)
if(i%2==1)
a[i]='*'; else a[i]=' ';
g=0;
if(n%2==0)
g=1;
for(i=0+g;i<n+g;i++)
for(l=0;l<k;l++)
{
h=0;
if(i%2==0)
h=1;
for(j=0+h;j<n+h;j++)
for(m=0;m<k;m++)
printf("%c",a[j]);
printf("\n");
}
}
おかしな出力結果になったら教えて下さい。ではお願いします。

979 :デフォルトの名無しさん:03/06/06 19:05
意味がよく分からない。宿題?

980 :デフォルトの名無しさん:03/06/06 19:14
とりあえず次スレ先頭に「C machineはCに非ず」を書くこと求む。

981 :デフォルトの名無しさん:03/06/06 19:18
>>979
レポートを提出しなければいけないので。

982 :デフォルトの名無しさん:03/06/06 19:25
>>981
宿題スレがあるのに、なんでわざわざここで?

983 :デフォルトの名無しさん:03/06/06 19:28
>>982
スマソ。では移動します。

984 :デフォルトの名無しさん:03/06/06 21:26
次スレ立てないの?

985 :デフォルトの名無しさん:03/06/06 21:33
イラネ。

986 :デフォルトの名無しさん:03/06/06 21:48
どうして、

・0 && 1 || 1 : 真
・0 && (1 || 1) : 偽
・1 || 1 : 真

なんでしょうか。
どうにも理解できませんです。

987 :デフォルトの名無しさん:03/06/06 21:51
1
> || 1
これだけで真
2
> 0 &&
これだけで偽
3
おいおい。

988 :987:03/06/06 21:53
0が偽、非0が真ということを知らないのかな?

989 :デフォルトの名無しさん:03/06/06 21:54
申し訳ない…今気づきました。
ただそれだけのことだったのね。

ホンマすいません。

990 :デフォルトの名無しさん:03/06/06 21:55
>>987
おいおい1と2の説明を合わせたら、1がわからなくなるだろ。

991 :デフォルトの名無しさん:03/06/06 21:57
>>990
括弧で演算の順番を変えているじゃん。

992 :989=986:03/06/06 21:58
名前書き忘れ、989=986でした。
こんなあほらしいこと聞いちゃってホントすいません。。。

993 :デフォルトの名無しさん:03/06/06 22:02
 ! 0 && (1 || 1) これは?

994 :デフォルトの名無しさん:03/06/06 22:03
1

995 :デフォルトの名無しさん:03/06/06 22:13
新スr(PAM!

996 :デフォルトの名無しさん:03/06/06 22:22
>>980
> とりあえず次スレ先頭に「C machineはCに非ず」を書くこと求む。
テンプレ追加

997 :デフォルトの名無しさん:03/06/06 22:23
てんぷれきぼん

C言語なら俺に聞け! Part 〈57〉
http://pc2.2ch.net/test/read.cgi/tech/1053725121/

998 :デフォルトの名無しさん:03/06/06 22:28
1000

999 :デフォルトの名無しさん:03/06/06 22:29
いーつーもーかがやいていたね!!

1000 :デフォルトの名無しさん:03/06/06 22:29
--- 僕の前に1000はない。
--- 僕の後ろに1001はできる。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

229 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)