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

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

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

1 :デフォルトの名無しさん:04/12/11 16:26:05
C言語なら俺に聞け! Part 97

まず問題を冷静に吟味して
Cの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

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

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 96
http://pc5.2ch.net/test/read.cgi/tech/1101615970/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/

2 :デフォルトの名無しさん:04/12/11 16:29:53
【コンパイラ】
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft 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
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm


3 :デフォルトの名無しさん:04/12/11 16:30:48
立てたくて仕方の無い年頃、か。

4 :デフォルトの名無しさん:04/12/11 16:45:43
姉妹スレ

C言語なら俺に聞け! Part 95
http://pc5.2ch.net/test/read.cgi/tech/1100951565/

C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/

5 :デフォルトの名無しさん:04/12/11 16:46:53
自分じゃ何もせずに愚痴言うだけの >>3 よりはまし。

6 :デフォルトの名無しさん:04/12/11 17:13:47
>>5
いや、スレ立てをソフト開発か何かと勘違いしてないか?
継続スレのスレ立てぐらい、ホスト制限さえ無ければ誰でも立てられるが。

7 :デフォルトの名無しさん:04/12/11 17:17:29
>>3==池沼

8 :3:04/12/11 17:32:00
川本です。

9 :デフォルトの名無しさん:04/12/11 17:41:54
石橋です
木梨です
とんねるずです
この歌をいただいて
初めて演歌の心を知りました・・・

10 :デフォルトの名無しさん:04/12/11 18:08:57
C言語の質問ではないのですが、
ビープ音を使って人が話しているような音を出す事ってできるのでしょうか?

11 :デフォルトの名無しさん:04/12/11 18:10:30
妄想力による。

12 :デフォルトの名無しさん:04/12/11 18:27:10
>>10
8bit機全盛の時代にそんなのあったな
F-BASIC に TALK コマンドを新設するソフト
「さんだ〜ふぉ〜す」も有名
karateka の主人公は come on ! と叫ぶし

13 :デフォルトの名無しさん:04/12/11 18:59:12
>>10
喧嘩売っているの?

14 :デフォルトの名無しさん:04/12/11 19:56:36
>>6
スレを「立てた」「立てなかった」の問題であって、
「立てられる」「立てられない」の問題ではないだろ。

いつもその調子で論理のすり替えやってんの?

15 :デフォルトの名無しさん:04/12/11 20:02:33
スレ立て如きに何もしないの愚痴だの言うのがおかしいって

16 :デフォルトの名無しさん:04/12/11 20:21:39
とりあえず下の二つを埋めてからこっちを使いませんか。

http://pc5.2ch.net/test/read.cgi/tech/1100951565/
http://pc5.2ch.net/test/read.cgi/tech/1101615970/

17 :デフォルトの名無しさん:04/12/11 21:12:17
埋め厨が来るまでそのまま放置しとけばいいでしょ。

18 :デフォルトの名無しさん:04/12/11 21:27:48
次スレが立ったら即移動しなきゃいけないわけではないからなぁ。

19 :デフォルトの名無しさん:04/12/11 22:28:32
教えてください。
入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。
警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main)
警告2:コードは効果をもたない。(関数 main)
警告3:問題のあるポインタの変換。(関数 input)
ソース↓
#include <stdio.h>
#define MAX 256

char *input();

void main()
{
*input();
}

char *input()
{
char s[MAX];

printf("COMMAND:");
scanf("%s", s);

return s;
}


20 :デフォルトの名無しさん:04/12/11 22:30:44
#include <stdio.h>
#define MAX 256

char *input(void);

void main()
{char *p;
p=input();
}

char *input(void)
{
static char s[MAX];

printf("COMMAND:");
scanf("%s", s);

return s;
}


21 :埋め厨:04/12/11 22:32:16
こんばんわ。埋め厨です。

22 :デフォルトの名無しさん:04/12/11 22:33:44
うんこトークしようぜ!!!

23 :デフォルトの名無しさん:04/12/11 22:43:08
printf()で " や %d を出力するにはどう書いたらいいんでしょう?

24 :デフォルトの名無しさん:04/12/11 22:45:07
>>23
うんこじゃ無いから却下!!!

25 :デフォルトの名無しさん:04/12/11 22:52:03
>>23
printf("[\"] [%%d]\n");

26 :デフォルトの名無しさん:04/12/11 23:12:23
>>20
動きました!
ローカル変数の扱いの間違いだったんかな?
ありがとうございました。

27 :デフォルトの名無しさん:04/12/11 23:15:20
>>26
釣りじゃなかったのかよ
二度と来るな糞

28 :デフォルトの名無しさん:04/12/11 23:15:29
いやー、やっとスレが主系と副系に落ち着いたな。一時とはいえ4本もあるのは異常事態だったが。

29 :デフォルトの名無しさん:04/12/11 23:19:54
埋め厨恐るべしだな。

30 :デフォルトの名無しさん:04/12/11 23:27:54
まだ異常事態だよ

31 :23:04/12/11 23:29:56
>>25
ありがとうがざいます。

32 :デフォルトの名無しさん:04/12/11 23:36:43
949 :デフォルトの名無しさん :04/12/11 21:42:51
初心者です。

参考書によって
void main() と書いてあるものと
int main() と書いてあるものの2種類ありますよね。
intにしてreturnしても、どこにも使われてないし
プログラムも問題なく動くので
全部voidでいいと思うんですが。

voidにしてはいけない理由でもあるのでしょうか。

33 :デフォルトの名無しさん:04/12/11 23:37:09
993 :デフォルトの名無しさん :04/12/11 23:09:50
その通り、処理系が認めていればなんでもいい。
ただし、コードの可搬性はなくなる。

994 :デフォルトの名無しさん :04/12/11 23:11:27
>>993
可搬性をどの程度持たせるべきかとは、全く別な議論だな

996 :993 :04/12/11 23:12:30
>>994
その通り。個人だったら個人で、団体なら団体で勝手に決めればいい。

ISO/IEC 9899:1999
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be defined with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;9) or in some other implementation-defined manner.


34 :デフォルトの名無しさん:04/12/11 23:37:33
俺俺から先に使え。特に>>32、お前だ。

35 :デフォルトの名無しさん:04/12/11 23:37:37
997 :デフォルトの名無しさん :04/12/11 23:12:42
>>980
JIS X3010:2003(いわゆるC99)ではこういう風に書いてある。(ISO/ANSIも同じだろう)

5.1.2.2 ホスト環境
5.1.2.2.1 プログラム開始処理
プログラム開始時に呼ばれる関数はmainとする。
処理系はこの関数に対してプロトタイプを宣言しない。
この関数は次の4種類の方法のいずれかで定義しなければならない。
1. int main(void);
2. int main(int argc, char *argv[]);
3. 上記2つの方法のいずれかと等価なもの。
4. 処理系定義

ちなみに5.1.2.1でフリースタンディング環境の場合プログラム開始時に呼ばれる関数は(戻り値の型・引数含め)処理系定義と書いてある。


36 :デフォルトの名無しさん:04/12/11 23:41:10
>>35
LinuxのようなOSもそのフリースタンディング環境になるの?

37 :36:04/12/11 23:42:26
OS自体のこと

38 :デフォルトの名無しさん:04/12/11 23:48:17
>>36-37
OS自体はフリースタンディングだと思う。
ただシェルあたりは独立したプログラムにするのであれば、それはフリースタンディングではないだろうな。

39 :デフォルトの名無しさん:04/12/11 23:52:46
ちなみにフリースタンディングの条件はこの2つのようだ。
― 複素数型を使っていない
― 標準ヘッダは<float.h>, <iso646.h>, <limits.h>, <stdarg.h>, <stdbool.h>, <stddef.h>及び<stdin.h>しか使っていない

40 :デフォルトの名無しさん:04/12/11 23:56:33
>>38
WinMainはどっちだ?

41 :デフォルトの名無しさん:04/12/11 23:59:59
<iso646.h>の中身ワラタ

42 :デフォルトの名無しさん:04/12/12 00:01:47
<iso4649.h>

43 :デフォルトの名無しさん:04/12/12 00:47:53
前スレでマンデルブロー集合について質問した奴です。
なんとか計算の結果を2次元配列風に表示するところまではできたんですけど
実際に2次元配列に結果をいれることが出来ません。

アドバイスおねがいします、、、



44 :デフォルトの名無しさん:04/12/12 00:52:15
http://www6.ocn.ne.jp/~anomina/board.htm

45 :デフォルトの名無しさん:04/12/12 00:54:21
まさか2次元配列の使い方が分からない訳じゃないだろうから
・メモリが確保できない
・二次元配列を関数の引数に渡せない
のどちらかかな。
ちゃんと>>1のFAQを読んでいるなら、違うだろうけど。

46 :デフォルトの名無しさん:04/12/12 00:56:44
2が1番小さい素数、3が2番目に小さい素数・・・・・、
i番目に小さい素数を返す関数nthprime(i)をつくり、500番目に
小さい素数を求めよ。
作成したプログラムのアルゴリズム書け。
ただし関数nthprimeは再帰呼び出しを用いて作成すること。
#include<stdio.h>

int primep(int) ;
int nthprime(int) ;

int main()
{
 int i = 500 ;
 printf("%d",nthprime(i));
}
int primep(int i)
{
 int k ;
 for(k = 2 ;k < i ;k++){
  if(i % k == 0){
  return 0 ;return 1 ;
  }
 }
}
int nthprime(int i)
{
/*ここがわからないです・・・*/
}

誰かお願いします。


47 :デフォルトの名無しさん:04/12/12 00:59:16
>>46
機能か一昨日同じような問題に答えた記憶があるな。宿題スレで。

48 :デフォルトの名無しさん:04/12/12 01:03:23
>>47
ぶっちゃけ同じ人なんですが〜アルゴリズムについて
教えていただけなかったので・・・。
というかint primep(int i)の中身が納得できないんです。。。


49 :デフォルトの名無しさん:04/12/12 01:03:38
  if(i % k == 0){
  return 0 ;return 1 ;
  }
ここがわからないです

50 :43:04/12/12 01:07:28

for(i=0; i<SIZE; i++)

   for(j=0; j<SIZE; j++)
   {
            mandel[i][j] = 0;
       }
}

こんな感じでなら二次元配列すべてに0を入れたりi+jの結果を入れたりすることはできるのですが、、、

マンデルブロー集合の計算でもfor文を使いまくってるんで
そこから見直したほうがいいでしょうか?





51 :デフォルトの名無しさん:04/12/12 01:07:51
>>49
オレも他の人もそんなことは一度も書いていない

52 :デフォルトの名無しさん:04/12/12 01:10:14
>>51
もしわかってるならでいいんですが
i=500だったらこれで素数判定はおかしくないですか?

53 :デフォルトの名無しさん:04/12/12 01:13:57
>>51
for(k = 2 ;k < i ;k++){
if(i % k == 0){
return 0 ;return 1 ;
}
}
だっただろ?
なんで勝手に問題書き換えるんだよ

54 :53:04/12/12 01:15:02
あれ?最初から違ってたのか

55 :53:04/12/12 01:15:53
for(k = 2 ;k < i ;k++){
if (i % k == 0) {
return 0;
}
}
return 1 ;
こうね

56 :53:04/12/12 01:18:58
素数は1とそれ自身以外では割り切れない数のことだ。
そのforループの中では、渡された数が2〜(渡された数-1)の範囲の数で割り切れるか試してるわけだ。
割り切れたら素数じゃないから0を返し、割り切れなかったら素数だから1を返してる。
OK?

57 :デフォルトの名無しさん:04/12/12 01:19:04
int nthprime(int i)
{
if(i == 500)
{
nthprime(0);
}
return 3571;
}


58 :デフォルトの名無しさん:04/12/12 01:23:53
>>43
計算の結果とやらがローカル変数に格納されていて
格納先の2次元配列との受け渡しでポインタ処理を間違っていたり、
どちらかの変数の寿命に整合性が取れていないことが原因かとみた。

59 :デフォルトの名無しさん:04/12/12 01:25:10
>>52
どう考えてもわかってない人の方が少ないから、そういう言い方は逆に失礼だと思うよ。

60 :デフォルトの名無しさん:04/12/12 01:33:43
>>56
1って素数だっけ?

61 :デフォルトの名無しさん:04/12/12 01:34:23
>>60
どこにも1が素数だなんて書いてないと思う

62 :デフォルトの名無しさん:04/12/12 01:35:24
いつから宿題スレに落ちぶれたんだ?ここは。

63 :デフォルトの名無しさん:04/12/12 01:37:09
>>60
違うが、「この関数を使って」で示された関数はそこを考慮してなかった
それをそのまま使っただけだ。

64 :デフォルトの名無しさん:04/12/12 01:37:19
>>61

>>56
> 素数は1とそれ自身以外では割り切れない数のことだ。


65 :デフォルトの名無しさん:04/12/12 01:37:48
おっとsage忘れ&>>62すまそ

66 :デフォルトの名無しさん:04/12/12 01:38:30
>>59
みなさんすみませんでしたm(_ _)m
>>56
つまりそこでのiっていうのは500ではないのですか?

67 :デフォルトの名無しさん:04/12/12 01:38:30
>>64
揚げ足取りウザい

68 :デフォルトの名無しさん:04/12/12 01:40:27
>>67
いや俺が覚え間違えてたのかな〜と思っただけ。

69 :デフォルトの名無しさん:04/12/12 01:41:10
>>67
心が荒んでますね。

70 :デフォルトの名無しさん:04/12/12 01:43:16
>>66
iが500だったら
for(k = 2 ;k < 500 ;k++)
になるから、
if (i % k == 0)
ここでiは2〜499で割り切れるか試されるの!
なぜわかってくれんのだ

>>68
そうかごめん。
>>69
そうかもしれんorz

71 :デフォルトの名無しさん:04/12/12 01:47:53
>>70
わからない理由は答えが3571になるのに素数判定では500までしか
やらないからです。
すみません。バカで・・・。


72 :デフォルトの名無しさん:04/12/12 01:48:01
>つまりそこでのiっていうのは500ではないのですか?
そう500だね

73 :デフォルトの名無しさん:04/12/12 01:49:39
>>71
素?
nthprimeはnまでの中の最大の素数、じゃなくて、
n番目の素数 を求める関数だろ

74 :デフォルトの名無しさん:04/12/12 01:50:22
>>73
はい。そうです。

75 :デフォルトの名無しさん:04/12/12 01:53:12
>>71
primepは単に与えられた数が素数か素数かを判定するだけ。
3571を計算してるのはnthprimeの方。
nthprimeの方で数字を1から順番にprimepで評価してやって、
primepが3571回1を返した時点でその回数を返してやるの。

76 :デフォルトの名無しさん:04/12/12 01:54:25
int main()
{
 int i = 500 ;
の i と、

int primep(int i)
の i が別のもの、って事が判ってないんじゃないの?

77 :デフォルトの名無しさん:04/12/12 01:56:55
今更だけど>>26さん、
>>20のコードって思いっきり間違ってますよ

input()でとって来たの使って作業してると、そのうち動かなくなると思われ…

78 :デフォルトの名無しさん:04/12/12 01:57:32
>>75
あっ、nthprimeの方で数字を1から順番にprimepで評価して
るんですか〜!わかりました!!
ありがとうございました!

みなさんありがとうございました!

79 :デフォルトの名無しさん:04/12/12 01:58:56
>>76
別のものなんですか?

80 :デフォルトの名無しさん:04/12/12 02:00:59
>>79
やっとわかってくれたと思ったのに(;´Д`)

81 :デフォルトの名無しさん:04/12/12 02:02:45
>>80
でも76さんのおかげでなんとなくわかりましたよ!
これ以上はご迷惑でしょから〜大丈夫です。
ありがとうございました!

82 :デフォルトの名無しさん:04/12/12 02:08:07
>>50
同等のことをしているつもりの動かないコードを晒せ。

83 :デフォルトの名無しさん:04/12/12 02:08:53
定本Cプログラマーのためのアルゴリズムとデータ構造っていう、アルゴリズムの入門書に
正規表現のプログラムが載っているのですが、理解できる気がしません。

・・・・・・正規表現なんて、実際使えればもんだいないですよね?

84 :デフォルトの名無しさん:04/12/12 02:10:53
Cの入門のとき
#include <windows.h>
#include <stdio.h>

int main(){
MessageBox(NULL, "", "", MB_OK);
return 0;
}

ってプログムを止める方が楽しいと思った。

85 :デフォルトの名無しさん:04/12/12 02:15:10
>>83
プログラム見るんじゃなくて、理論から勉強しろ。

86 :デフォルトの名無しさん:04/12/12 02:16:59
>>83
あの本はわかりやすかったと思うんだけどなぁ

87 :デフォルトの名無しさん:04/12/12 02:40:07
>>85
あのーー。オートマトン理論とかいうやつですかね?
やっぱりあれ勉強しないといけないんですか・・・・

88 :デフォルトの名無しさん:04/12/12 02:43:28
アルゴリズム入門というからには理論を勉強するのが筋。
単に関数だけコピペで使いたいのならネットで拾ってくればいいし。

89 :デフォルトの名無しさん:04/12/12 02:52:42
>>87
Turing Machineから勉強すると良いよ。
それに、オーダーの概念も知らないでしょ。

90 :87:04/12/12 03:10:52
Java勉強しようかと思っていたところだったが、またひとつ課題ができてしまいましたね(汗
時間があれば勉強してみます。ありがとうございました。

91 :デフォルトの名無しさん:04/12/12 04:47:19
TuringMachineは勘弁してやれ

92 : :04/12/12 09:12:58
ttp://www.bohyoh.com/Books/ReikaiA01/RSA01chap09.pdf

ここの3ページ目の下のほうにある(47)〜(53)の答えを教えてもらえませんか?

ttp://www.bohyoh.com/Books/ReikaiA01/RSA01chap11.pdf

ここの(29)(30)(31)もです。お願いします。

93 :デフォルトの名無しさん:04/12/12 09:16:13
>>92
断る

94 :デフォルトの名無しさん:04/12/12 10:40:24
>>92
そのくらいは自分で考えないと、この先何もできないような…。
つーか、strxxxのサンプルソースなんかいくらでもあるんだから
せめて探すくらいしなさい。

95 :デフォルトの名無しさん:04/12/12 10:46:03
>>92
宿題スレいけ

96 :デフォルトの名無しさん:04/12/12 11:25:25
素数は、「1とそれ自身以外では割り切れない」数のことだ。

素数が1、ではない

97 :デフォルトの名無しさん:04/12/12 11:37:05
>>96
-1 は?w

98 :デフォルトの名無しさん:04/12/12 11:40:43
>>97
フ━━━( ´_ゝ`)━━━ン!!

99 :デフォルトの名無しさん:04/12/12 11:40:57
1とその数以外に約数を持たない1より大きな自然数だなぁ

100 :デフォルトの名無しさん:04/12/12 11:44:24
>>99
「1より大きな」ってあたりが美しくない
もっとエレガントに定義してみな

101 :デフォルトの名無しさん:04/12/12 11:44:31
確かに「自然数で」が抜けてるw

102 :デフォルトの名無しさん:04/12/12 11:45:40
>>100
見本みせてくれ
お前ならなんと言う?

103 :デフォルトの名無しさん:04/12/12 11:48:06
字面的に短くとは言ってないぞ

104 :デフォルトの名無しさん:04/12/12 11:50:52
誰がそんな事言ってんだ

105 :デフォルトの名無しさん:04/12/12 11:51:43
さ、おじさんもう寝るぞ
明日までにできてるかな?

106 :エラストテネス:04/12/12 11:55:43
素数と思ったら素の数を素数とする。

107 :デフォルトの名無しさん:04/12/12 11:58:54
>>99
数学的に書いてください

108 :デフォルトの名無しさん:04/12/12 12:22:07
「2つの約数を持つ自然数」ってのはどう?

109 :デフォルトの名無しさん:04/12/12 15:35:53
#include <stdio.h>
#include <stdlib.h>
#define N 6

int array[] = { 9, 0, 2, 5, 3, 2 }; // 適当な入力
int order[] = { 0, 1, 2, 3, 4, 5 }; // 0 から N-1 まで昇順

int shoujun(const int *a, const int *b){
/* ここに order[] に対する処理を加えたい */
 return (*a-*b);
}

int main(){
 int i;

 qsort(array, N, sizeof(int), (int(*)(const void*, const void*))shoujun);

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

stdlib.h の qsort() を使い、出力として
array[] = { 0, 2, 2, 3, 5, 9 }; 昇順に
order[] = { 1, 2, 5, 4, 3, 0 }; 元の array[] の要素の小さい添え字順
という操作を qsort で用いる関数に order[] に対する処理を加えて
行いたいと考えているのですがいまいち方法が分かりません。
そもそも qsort でこのようなことは可能なのでしょうか。


110 :デフォルトの名無しさん:04/12/12 15:39:36
>>109
構造体でまとめろ。

111 :デフォルトの名無しさん:04/12/12 15:42:50
>>109
手っ取りばやくやるならふたつの配列じゃなくて構造体にまとめてひとつの配列にする。

112 :111:04/12/12 15:43:12
かぶった orz

113 :デフォルトの名無しさん:04/12/12 15:44:02
方法1)
先に order[] を array[] の順に並べ替えろ
次に array[] だ

方法2)
別の配列を用意して array[] の順に並べ替えろ、そいつで array[],order[] を入れ替えろ
そいつには元々の array[] の添え字を入れておけ

114 :113:04/12/12 15:45:21
スマソ、ウソツイタ

方法1) ではできなかったorz


115 :109:04/12/12 15:52:26
>>110-114
ありがとうございます。
とりあえず構造体を使ってみます。

116 :デフォルトの名無しさん:04/12/12 16:05:57
>>115
return (*a-*b); はやめな。


117 :デフォルトの名無しさん:04/12/12 16:30:06
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。
そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。
私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
私の使い方が悪いのでしょうか?
どなたか教えていただけないでしょうか?
 <コーディング>
    w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL);
    w_ret = GetDeviceCaps(w_hdc, HORZSIZE);


118 :デフォルトの名無しさん:04/12/12 16:31:04
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)

119 :117:04/12/12 16:33:04
板を違えたようです・・・。
すみませんでした。

120 :デフォルトの名無しさん:04/12/12 16:41:03
shortを使うより、intを使ったほうが実行速度が早いと聞きました。

さゆがC/C++の宿題を片付けるの 36代目
http://pc5.2ch.net/test/read.cgi/tech/1102753497/35-

このあたりについて詳しく書かれた文章とかないでしょうか。

121 :デフォルトの名無しさん:04/12/12 16:45:18
>>120
処理系と処理内容によって異なる。

122 :デフォルトの名無しさん:04/12/12 17:37:27
>>120
http://www.kouno.jp/home/c_faq/c1.html#1
> どうでもいいならint を使う。

大抵intはCPUにとって1番高速に演算できるサイズになっている。
それにCには演算前にshort/charはintになる整数拡張があり、言語自体intを整数型の基本に据えていると言える。

123 :120:04/12/12 18:33:22
ありがとうございました。
これまで、変数型をいちいち変えていました。
for文のときにループが100回以下ならcharを使うなんてことをしていたのは、
3バイトケチって、手間と速度を犠牲にしていたわけですね。

124 :デフォルトの名無しさん:04/12/12 18:39:33
>>123
いや、ループ変数にcharを使っても大抵のCPUでは32ビットレジスタか32ビット幅の
スタック領域を消費するから全く節約にならない。
#言い方悪いが、全くの無駄。

125 :デフォルトの名無しさん:04/12/12 18:43:00
>>124
ん?それはCPUのせいなのか?

126 :デフォルトの名無しさん:04/12/12 18:56:30
>>125
8ビット(つーか1バイト)のレジスタや8ビット幅のスタックを扱えるCPUなら話は別だ。
仮令インテルチップであっても32ビットレジスタをchar変数4つには割り当てられないからな。

127 :デフォルトの名無しさん:04/12/12 19:03:42
そこでSIMDですよ。

128 :デフォルトの名無しさん:04/12/12 23:45:41

【イメージ】

○○○( str, "現在%2d時%2d分%2d秒です"
,st.wHour ,st.wMinute ,st.wSecond ) ;

現在の時刻を %d とかの形に変換した後、strに文字列として一気に
流し込むような処理がしたいんですけど、そんな事ができる便利な
関数ありませんか?
ちょっとわかりにくかったらすみません。


129 :デフォルトの名無しさん:04/12/12 23:55:11
(☉◇☉)Σ

130 :デフォルトの名無しさん:04/12/12 23:56:16
>>128
sprintf()或いは日付けに特化したstrftime()

131 :デフォルトの名無しさん:04/12/13 00:02:45
ただ今、きょん時ねこ分きつね秒です

132 :128:04/12/13 00:04:01
>>130
ありがとうございます。
お陰で出来ました。

133 :デフォルトの名無しさん:04/12/13 00:18:06
<ご質問>
キャラクタ'AA'(0x4141)を0xAA に変換したいのですが、
スマートなロジックの書き方があればご教授ください。

お願いいたします。


134 :デフォルトの名無しさん:04/12/13 00:21:59
byte0 + (byte1<<4)

135 :デフォルトの名無しさん:04/12/13 00:23:19
ちがっとーよ

136 :デフォルトの名無しさん:04/12/13 00:25:09
a = 0xaa;
でいいんじゃない?

137 :デフォルトの名無しさん:04/12/13 00:31:02
>>134>>136
馬鹿?

>>133
自分の行動に「ご」をつけるような常識知らずに教える気はない。
#つーか、結構めんどいよ。

138 :デフォルトの名無しさん:04/12/13 00:32:53
>>137
つか、あの質問から何がやりたいのかを理解できたとしたら凄いよ。

139 :デフォルトの名無しさん:04/12/13 00:33:55
strtol

日本語はマジ直とけ
技術屋としてシャレにならんぞ

140 :デフォルトの名無しさん:04/12/13 00:34:59
>>139
それは無茶では?

141 :デフォルトの名無しさん:04/12/13 00:43:44
138へのアンチテーゼ

142 :デフォルトの名無しさん:04/12/13 00:49:19
if(strcmp(str,"AA")==0) ans=0xAA;

143 :デフォルトの名無しさん:04/12/13 00:53:38
>>142
せめてmemcmpに。

144 :デフォルトの名無しさん:04/12/13 00:59:08
uchar hex1asc(uchar c)
{
if(c >= 'a') c -= 'a' - 10;
else if(c >= 'A') c -= 'A' - 10;
else c -= '0';
return c & 0x0F;
}

uchar hex2asc(uchar *s)
{
return (hex1asc(s[0]) << 4) | hex1asc(s[1]);
}


145 :デフォルトの名無しさん:04/12/13 01:05:23
strtolでいいやん

146 :デフォルトの名無しさん:04/12/13 01:07:03
char line[ ] = "AA";
sscanf(line, "%x",&ans);
とか

147 :デフォルトの名無しさん:04/12/13 01:07:34
>>133
「スマートなロジック」を定義してくれ


148 :デフォルトの名無しさん:04/12/13 01:08:06
>>145
'AA'だけを変換してくれるような機能は無かった気がするけど。。

149 :デフォルトの名無しさん:04/12/13 01:10:55
>>148
ttp://www9.plala.or.jp/sgwr-t/lib/strtol.html

150 :デフォルトの名無しさん:04/12/13 01:13:12
>>149
やっぱりそんな機能無いよね。

151 :デフォルトの名無しさん:04/12/13 01:13:28
とりあえず 142 がスマートっぽい。

152 :デフォルトの名無しさん:04/12/13 01:13:37
uchar hex1asc(uchar c)
{
if(c >= 'a') c -= 'a' - 10;
else if(c >= 'A') c -= 'A' - 10;
else c -= '0';
return c & 0x0F;
}

uchar hex2asc(ushort s)
{
return (hex1asc((uchar)(s >> 8)) << 4) | hex1asc((uchar)(s & 0x00FF));
}


153 :デフォルトの名無しさん:04/12/13 01:14:09
>>148
そういう質問なのかw

if (str[0] == 'A' && str[1] == 'A')
ret = 0xaa;

154 :デフォルトの名無しさん:04/12/13 01:37:10
文字列じゃなくて文字だと言うことに気付いてない香具師多過ぎ

155 :デフォルトの名無しさん:04/12/13 14:36:10
Linuxで書かれたCのプログラムをWindowsでコンパイルする方法は無いですか?
unistd.h等のインクルードファイルが無くてエラーが出ます。
あとコンパイルできたとしても動くんでしょうか?

156 :デフォルトの名無しさん:04/12/13 14:46:45
>>155
標準ライブラリなどプラットフォーム非依存のライブラリだけを使っていれば、コンパイルできれば動くはず。

157 :デフォルトの名無しさん:04/12/13 14:47:34
Cygwinというソフトを使うとWindows上に擬似Linux環境を作れるから
そこのgcc使うとコンパイル・実行できる。

普通のWindows用コンパイラを使う場合はエラーが出た箇所を
片っ端から#ifdefで囲んでいってWindows用に書き換えていく必要がある。
人はこれを移植と呼ぶ。

158 :デフォルトの名無しさん:04/12/13 15:04:10
>>156
>>157
ありがとうございます。
Cygwinを試してみます。

159 :デフォルトの名無しさん:04/12/13 17:59:15
擬似Linux環境??????

160 :デフォルトの名無しさん:04/12/13 20:02:29
Unixだろ

161 :デフォルトの名無しさん:04/12/13 20:05:21
#include <stdio.h>

main()

{
char buf[80];

scanf("%s",buf);
printf("%s %d \n",buf);

return 0;

}

とやったら普通、Aを入力したらA 65と出力しますよね?Aはちゃんとでるんですが10進数のほうがおかしいです。

162 :デフォルトの名無しさん:04/12/13 20:08:53
printf("%s %d \n",buf         );

163 :デフォルトの名無しさん:04/12/13 20:41:29
>>161
> scanf("%s",buf);
> printf("%s %d \n",buf);
    (snip)
>とやったら普通、Aを入力したらA 65と出力しますよね?
普通はそんなバカなコード書きません。
>Aはちゃんとでるんですが10進数のほうがおかしいです。
おかしいのはあなたです。

164 :デフォルトの名無しさん:04/12/13 20:53:41
#include <stdio.h>

main()

{

char a[20];

scanf("%s",a);
printf("%d",a);

return 0;
}

同じ人で恐縮なんですが、これでAAAと入力、そしたらprintf側はどうでますか?
656565って感じにはでないんですか?

165 :デフォルトの名無しさん:04/12/13 20:55:17
>>164
馬鹿は黙ってろ

166 :デフォルトの名無しさん:04/12/13 20:56:03
>>159
Cygwin は RedHatLinux だよ


167 :デフォルトの名無しさん:04/12/13 20:56:42
>>164
 ならない

168 :デフォルトの名無しさん:04/12/13 20:57:50
#include <stdio.h>
main()
{
char buf[80];
scanf("%s",buf);
printf("%s %d \n",buf, buf[0]);
return 0;
}

169 :デフォルトの名無しさん:04/12/13 20:58:15
CygwinでCやってるんですけど、何回もプログラムを実行してると
たまにバグるのは気のせいですか・・・orz

170 :デフォルトの名無しさん:04/12/13 20:59:25
#include <stdio.h>
main()
{
char a[20];
scanf("%s",a);
printf("%03x",*(unsigned long *)a);
return 0;
}

171 :デフォルトの名無しさん:04/12/13 20:59:57
>>169
君のプログラムにバグは内科医?

172 :デフォルトの名無しさん:04/12/13 21:03:01
バグってからGDBでrunすると1,2回は何も出ず終わるんですが・・・
これまたrunしすぎるとエラーでます。
そんなもんですか??

173 :デフォルトの名無しさん:04/12/13 21:06:09
>>172
その情報で何か有効な意見が得られると思いますか?

174 :デフォルトの名無しさん:04/12/13 21:08:27
どんなエラーかくらい書けよ

175 :デフォルトの名無しさん:04/12/13 21:11:46
もういいです

176 :デフォルトの名無しさん:04/12/13 21:13:15
バグって何?

177 :デフォルトの名無しさん:04/12/13 21:14:18
>>168サンクスです。馬鹿はだまってらんねーです

#include <stdio.h>

main()

{

char a[20];

scanf("%s",a);
printf("%s %d%d%d",a,a[0],a[1],a[2]);

return 0;
}

へいるまん「これでおーけーね?」

178 :デフォルトの名無しさん:04/12/13 21:22:57
>>177
%Xにしろ。

179 :デフォルトの名無しさん:04/12/13 21:34:22
とりあえず馬鹿であることは認識したようだ

180 :デフォルトの名無しさん:04/12/14 00:49:53
文字列の入ったテキストファイルを読み込んで、
あらかじめ作っておいた配列に格納する方法を教えてください
C言語でお願いします


181 :デフォルトの名無しさん:04/12/14 01:01:20
宿題は宿題スレへ

182 :デフォルトの名無しさん:04/12/14 01:26:35
文字列の入ったテキストファイルを読み込んで、
あらかじめ作っておいた配列に格納する方法を教えてください
C言語でお願いします


183 :デフォルトの名無しさん:04/12/14 01:41:36

宿題は宿題スレへ

184 :デフォルトの名無しさん:04/12/14 02:53:25
いつもお世話になっております先輩ども

TrsFmtConv.c:1641: error: declaration for parameter `stOldSet' but no such parameter
TrsFmtConv.c:1640: error: declaration for parameter `stSet' but no such parameter
TrsFmtConv.c:1652: error: number of arguments doesn't match prototype
cc1: error: prototype declaration

みたいなエラーがイパーイ出るんですが、
原因は何だと推測されますか?

185 :デフォルトの名無しさん:04/12/14 02:53:57
ヘッダ

186 :デフォルトの名無しさん:04/12/14 03:10:04
>>185
ヘッダ・・・?
自分もそう思って定義してるつもりだったんじゃないかと
確認してみましたが、未定義じゃなかったようです

二重定義とかかな・・・

187 :デフォルトの名無しさん:04/12/14 03:11:57
定義してる型がおかしいとか引数の数がおかしいとか、そんなとこじゃないのかな?
何せファイルがデカすぎるからどっかで起きたtypoが全体をブッ壊してるようにも思える。

188 :185:04/12/14 03:14:27
うおおおおおおおおおおおおおおおおおおお
解けたあああああああああああああああああああああああ

原因は内部変数の定義でセミコロン付け忘れでした_| ̄|○
>>185,>>187、レスサンクスです!

もうCの開発嫌だ・・・

189 :デフォルトの名無しさん:04/12/14 03:15:50
お疲れ!

190 :デフォルトの名無しさん:04/12/14 03:19:04
number of arguments doesn't match prototype

191 :デフォルトの名無しさん:04/12/14 05:18:24
くだらない質問で恐縮ですが、
C言語で配列の要素数を#defineやプログラム内で宣言せずに
scanfなどでプログラム実行中に後から指定する方法は無いのでしょうか?
やって見ると、「定数式が必要」とエラーになるのですが・・・



192 :デフォルトの名無しさん:04/12/14 05:31:14
malloc() と free()

C言語では、配列の大きさはコンパイル時に(というかプログラムを書いた時点で)
決まるものでなければなりません。たとえば、int n; int a[n]; という宣言は不可能です。

プログラムが動いてから配列の大きさを決めたい場合は、関数 malloc() で割り当ててやります。
http://www5a.biglobe.ne.jp/~iwase47/00comp/alloc.html

193 :デフォルトの名無しさん:04/12/14 11:20:40
あーマルチしちゃってたのね

194 :デフォルトの名無しさん:04/12/14 13:00:05
C99使えるコンパイラへ乗り換えろ

195 :デフォルトの名無しさん:04/12/14 17:01:13
それは10種類あるのかよ?

196 :デフォルトの名無しさん:04/12/14 19:23:07
ない。

197 :デフォルトの名無しさん:04/12/14 21:57:41
2次元配列を用いて九九の結果を画面に出力するプログラムを作成せよ。
但し掛け算の計算はmulとして関数を作成すること。
おしえれ

198 :デフォルトの名無しさん:04/12/14 22:04:26
>>197

void mul(int i, int j)
{
  return i * j;
}
int main(void)
{
  int data[9][9];
  int i, j;

  for (i = 0; i < 9; i++) {
    for (j = 0; j < 9; j++) {
      data[i][j] = mul(i + 1, j + 1);
    }
  }

  for (i = 0; i < 9; i++) {
    for (j = 0; j < 9; j++) {
      printf("%d ", data[i][j]);
    }
    printf("\n");
  }
  return 0;
}

199 :デフォルトの名無しさん:04/12/14 22:21:34
>>198
void mul(int i, int j)
~~~~

200 :デフォルトの名無しさん:04/12/14 22:26:00
>>199
あうあう。一発書きだから許せ。
int mul(int i, int j)に訂正。

201 :デフォルトの名無しさん:04/12/14 22:33:35
> mul(i + 1; j + 1)

間違っちゃいないんだけど、ばっきゃろーってとこだな
あと九九は2の段からだろ
仮面ライダーが本郷猛だった頃はそうだった

202 :デフォルトの名無しさん:04/12/14 22:34:08
> ;

オレモナー

203 :デフォルトの名無しさん:04/12/14 22:49:45
>>201
ごめん、言いたいことがわからん。

204 :デフォルトの名無しさん:04/12/14 22:50:15
>>201
えー、俺、小学校のころ1の段から覚えさせられた覚えがあるべ。

205 :デフォルトの名無しさん:04/12/14 22:51:32
>>201
四十か...

206 :デフォルトの名無しさん:04/12/14 23:41:50
>>203

  for (i = 1; i <= 9; i++) {
    for (j = 1; j <= 9; j++) {
      data[i-1][j-1] = mul(i, j);
    }
  }
  
のがいいって言いたいんじゃね?


207 :デフォルトの名無しさん:04/12/14 23:57:47
どっちも一緒や。そんな微細なこと、ドウでもいい

208 :デフォルトの名無しさん:04/12/15 00:07:42
// ...
int *pdata;
// ...
pdata = data[-1][-1];
// ...
pdata[i][j] = mul(i, j);
// ...

209 :デフォルトの名無しさん:04/12/15 00:36:42
>>208
そこまでメンドい事やるくらいだったら、「data[0][0]は使いません」の方が全然わかりやすい。


210 :デフォルトの名無しさん:04/12/15 00:58:49
>>209
メモリが勿体ない

211 :デフォルトの名無しさん:04/12/15 01:42:07
NUMERICAL RECIPES in Cは>>208のスタイルをとってるな。

212 :デフォルトの名無しさん:04/12/15 04:41:34
東京の時刻を元にして、各都市の時刻を求めるプログラムを書いているんですが、
年月日それぞれをまたぐ場合をif elseで求めているため条件式の嵐になっています・・・
特に月をまたぐ場合、28日と30日と31日という3つの条件についてそれぞれ求めなければならず、
非常にわけがわからなくなっています。

これって明らかに効率の悪い手法ですよね?

213 :デフォルトの名無しさん:04/12/15 04:45:03
unix time化して時差分を引いてフォーマッティングすりゃいいんでは

214 :デフォルトの名無しさん:04/12/15 04:47:54
cを習って半年の大学生です。
課題↓が全く分かりません、教えてくださいマセm(__)m
ttp://www.siokara.cjb.net/siobin/sio001/src/sa10580.zip.html

215 :デフォルトの名無しさん:04/12/15 06:37:05
あるプログラムを書き換えるソフトを作ろうとしているのですが、コンパイルがうまく通ってくれません。
何度見返してみても自分ではおかしな点を発見できなかったので、見ていただけないでしょうか。

#include<stdio.h>

int main(void)
{
FILE *fp;

fp=fopen("KAZOKUK.EXE","wb");

fseek(fp,0x000140D9h,SEEK_SET);
while(ftell(fp)<=0x000140EDh) fputc(fp,0x90h);
fputc(fp,0xEBh);

fclose(fp);

return 0;
}

エラー E2121 a.c 9: 関数呼び出しに ) がない(関数 main )
エラー E2377 a.c 10: While文に ) がない(関数 main )
エラー E2121 a.c 11: 関数呼び出しに ) がない(関数 main )

216 :デフォルトの名無しさん:04/12/15 06:47:23
エラー E2121 a.c 9: 関数呼び出しに ) がない(関数 main )
エラー E2377 a.c 10: While文に ) がない(関数 main )
エラー E2121 a.c 11: 関数呼び出しに ) がない(関数 main )


217 :デフォルトの名無しさん:04/12/15 07:07:48
>>216
それでただの書き忘れかと思ったんですが、どこにもそんな個所が見つけられなくて困ってます。
どこがおかしいのでしょうか?

218 :デフォルトの名無しさん:04/12/15 07:11:00
h

219 :デフォルトの名無しさん:04/12/15 07:12:13
>>215
0x000140D9h
のhが意味不明。

220 :デフォルトの名無しさん:04/12/15 07:18:31
>fputc( fp, 0x90 );
逆だ、逆

221 :デフォルトの名無しさん:04/12/15 07:26:16
>>217
君の頭

222 :デフォルトの名無しさん:04/12/15 07:28:05
>>215
wbで開いて良いのか?知らないぞ。

223 :デフォルトの名無しさん:04/12/15 07:32:26
>>222
ワロタ。

224 :デフォルトの名無しさん:04/12/15 08:23:57
家族計画ってそんなにおもしろいか?

225 :デフォルトの名無しさん:04/12/15 08:39:26
fgets関数を使ってファイル内容を読み出したいんだけど、
()って記号は読み出せないんですか?

226 :デフォルトの名無しさん:04/12/15 09:00:46
あーなるほど、何かのプログラムにNopパッチを当てようとしているのか。

227 :デフォルトの名無しさん:04/12/15 12:26:40
どこがおかしいですか?

問題
西暦2000年から10000年の間で,夏季オリンピックが開催されるにもかかわらず,
閏年でない年をすべて列挙するプログラムを作りなさい。

#include <stdio.h>
main()
{
int y;
for(y=2000; y<=10000; y++)
  if (y % 4 == 0)
{
if (y % 100 == 0 && y % 400 != 0);
printf("%d");
  }
}

228 :デフォルトの名無しさん:04/12/15 12:32:13
最近、printfにあからさまな誤りを入れた質問が乱発しているが
scanfに続くネタとして、面白いんだろうか

229 :デフォルトの名無しさん:04/12/15 12:46:03
>>228
標準関数の仕様を理解していないんでしょ。

230 :デフォルトの名無しさん:04/12/15 13:07:44
ネットワーク関係のライブラリが欲しいんですけど、何処に行けばあるの
でしょう、なんか見つかりません

231 :デフォルトの名無しさん:04/12/15 13:12:11
君のHDの中にあるはず

232 :デフォルトの名無しさん:04/12/15 13:40:11
文字列s1、s2を引数で受け取り、s1に文字列s2が含まれているかどうか調べる関数を作成しなさい
実行結果は、含まれているなら1を、含まれていないなら0をそれぞれ返すようにしなさい。
文字列検索関数strcmpなどは使用しないこと。



これ誰かわかります?

233 :デフォルトの名無しさん:04/12/15 13:41:10
>>232
計算アルゴリズム
http://pc5.2ch.net/test/read.cgi/tech/1090227743/

234 :215:04/12/15 13:41:43
>>218,219
ずっとhは必要だと勘違いしてましたorz
>>220
こんなとこにミスがあるとは…
原因は書き忘れのみだと思い込んでました
>>222
80KBになってしまいますた鬱
rb+が正しいみたいですね
>>224
感動ゲーの中では最高傑作と名高いのでやってみることにしました
>>226
いわゆるNoCDパッチってやつです

みなさんありがとうございました。おかげで完成しました。
では心おきなくプレイしてきまつ。

235 :デフォルトの名無しさん:04/12/15 13:43:42
strstrはその「strcmpなど」に含まれるんだろうな。

236 :デフォルトの名無しさん:04/12/15 13:46:27
>>215
これはすごい

237 :との:04/12/15 14:02:00
マウスフックしてウィンドウのタイトルバーでホィールが動いたときに処理をするようなプログラムを作りたいのですがうまくいきません
右ボタンなどはWM_NCRBUTTON_CLICKでつかまえて、ヒットテストをみれば上手くいたのですがホィールはどうしたらできますか?ご存知のかたいたら教えてください

238 :デフォルトの名無しさん:04/12/15 14:06:32
WM_MOUSEWHEEL を捕まえればいいんじゃない?

239 :デフォルトの名無しさん:04/12/15 14:19:51
>>1
>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
↑これが読めない脳足りんが増えて来ましたね。

240 :230:04/12/15 15:11:07
>>231
いやHDの中も探したんですけど、ないです。
具体的にはsys/socket.hとその実行ファイルが欲しぃ。

241 :デフォルトの名無しさん:04/12/15 15:11:21
>>227
>夏季オリンピックが開催されるにもかかわらず,
日本語の使い方がおかしいと思う
>printf("%d");
printf("%d",変数)

242 :デフォルトの名無しさん:04/12/15 15:11:55
;付け忘れた

243 :デフォルトの名無しさん:04/12/15 15:12:52
「あいうえお」みたいな文字列を一文字ずつ16進数にして配列に入れて行くにはどうしたらいいですか?

244 :デフォルトの名無しさん:04/12/15 15:13:41
>>234
ICOのほうが感動するぞ。
イブバーストエラーもよかった。
弾幕ゲームも、すべての弾を避けれたときに感動するぞ。それ以外はマゾヒズム。

245 :デフォルトの名無しさん:04/12/15 17:00:53
>>232
>これ誰かわかります?
俺はわかるぞ

246 :デフォルトの名無しさん:04/12/15 17:24:01
>>232
うん、わかるわかる。

247 :との:04/12/15 18:55:47
>>238
それだとうまくいかなかった
なんかヒットテストが常に0になる
やりかたがまずいのかなあ

248 :デフォルトの名無しさん:04/12/15 19:34:51
>>247
とりあえず >1 でも嫁。

249 :デフォルトの名無しさん:04/12/15 20:32:05
夏季オリンピックは、いったい何年まで行われるのだろうか?
西暦10000年になる前に暦が変わったり、
人類そのものが絶滅するかもしれない事は考えないのだろうか?

250 :デフォルトの名無しさん:04/12/15 21:09:42
>>249
物理の問題で糸にも少しくらい重さがあるじゃないかと思ったことあるだろ

251 :デフォルトの名無しさん:04/12/15 21:15:44
戦争で中止したこともあった死ね

252 :デフォルトの名無しさん:04/12/15 21:29:16
>>250
うん、ある。
コペンハーゲン解釈も試験のための答え方は憶えたけど本心では納得してなかったりする。

253 :デフォルトの名無しさん:04/12/15 21:31:50
>>252
最近多世界解釈なら納得でき始めている。
納得しちまっていーものなのかなぁ、という不安はある。

254 :デフォルトの名無しさん:04/12/15 22:59:28
すいません。質問です。コンパイル出来なくて困ってるんですが
#include<stdio.h>
int main(void){

int num[10],i,k,j;

printf("10個の数字を入力して下さい:");
for(i=0; i < 10; i++)scanf("%d",& num[i]);

for(j=num[0]; num[0] < num[10] ;num++)
for(k=num[1]; num[1] < num[10]; num++){
if(j==k)printf("同じ数は%dです\n",j);
}
return 0;
}
9行目と10行目でエラーが出てまして、皆さんだったらどう直されますでしょうか?

255 :デフォルトの名無しさん:04/12/15 23:04:01
どうやって配列をインクリメントするんだい?

256 :デフォルトの名無しさん:04/12/15 23:06:10
なんだこれ

257 :デフォルトの名無しさん:04/12/15 23:08:24
うわっ、これはひどい

258 :エラストテネス:04/12/15 23:11:52
初心者の時は{}省略せずに毎回毎回きちんと書け。

for(j=num[0]; num[0] < num[10] ;j++){
for(k=num[1]; num[1] < num[10]; k++){
if(j==k)printf("同じ数は%dです\n",j);
}
}

259 :デフォルトの名無しさん:04/12/15 23:12:53
なんで急にこんなエラーメッセージも読めない、
基本的なことを調べようともしない奴ばっか増えたの?

260 :エラストテネス:04/12/15 23:13:38
こっちだがな
for(j=0; i<10;j++){
for(k=0; k<10; k++){
if(j==k)printf("同じ数は%dです\n",num[j]);
}
}

261 :デフォルトの名無しさん:04/12/15 23:14:55
これだと例えばエラーを直しても、例えばnum[10]=0,1,2,3,4,5,6,7,1,5のときに
 同じ数は1です
 同じ数は5です
 同じ数は1です
 同じ数は5です
とか表示されるぞ

もうちょい改良しておけ

262 :デフォルトの名無しさん:04/12/15 23:18:59
さらにいうとこうだがな
for(j=0; i<10;j++){
for(k=0; k<10; k++){
if(num[j]==num[k])printf("同じ数は%dです\n",num[j]);
}
}


263 :デフォルトの名無しさん:04/12/15 23:19:28
>>259
昔からだよ。そうだな、だいたい古代エジプトあたりからだ

264 :デフォルトの名無しさん:04/12/15 23:21:46
>>263
日本ではだいたいいつごろからだ?

265 :デフォルトの名無しさん:04/12/15 23:22:40
>>262
>>260をコピペしたら間違ってたし
× for(j=0; i<10;j++)
○ for(j=0; j<10;j++)

266 :デフォルトの名無しさん:04/12/15 23:25:01
>>264
はっきりした区分はないが、ポリネシア人との邂逅があった時期とされている

267 :254:04/12/15 23:30:46
>>255>>256 さん
レスありがとうございます。

>>255
num[0]++に、変更したところコンパイルできました。

私も皆さんのようなプログラムに近づけるよう精進致します。^^;
ありがとうございました。

268 :デフォルトの名無しさん:04/12/15 23:34:29
>>255>>256 さんの、誤りでした。すいませんでした。

269 :デフォルトの名無しさん:04/12/16 00:03:29
> 皆さんのようなプログラム
…俺たちはプログラムではないわけだが。

270 :初心者です:04/12/16 00:09:45
CとTURBO Cの違いってなんですか?
他にもPASCALとTURBO PASCALなどがあります。

根本的に違う言語なんでしょうか?

271 :デフォルトの名無しさん:04/12/16 00:11:27
>>269
トロンのノリだな
不倫、なぜ忍び込んだ

272 :デフォルトの名無しさん:04/12/16 00:13:34
>>269
君は自分がプログラムであるという事実に気づいていないようだな...

273 :デフォルトの名無しさん:04/12/16 00:16:09
>>270
君に使いこなすのは無理って点は全部共通かな

274 :デフォルトの名無しさん:04/12/16 00:16:38
>>259
人に訊くレベルにすら達していない莫迦も増えましたが、
得意げに教えたがる手合いも増えましたね。

275 :デフォルトの名無しさん:04/12/16 00:18:24
>>270
"TURBO C"や"TURBO PASCAL"はソフトの名前。
"C"や"PASCAL"は言語の名前。
比較するものではない。

276 :デフォルトの名無しさん:04/12/16 00:21:00
>>270
オートバイとCBRの違いはなんですか?
ってのと同じくらい プ な発言だぞ

277 :デフォルトの名無しさん:04/12/16 01:11:37
>>276
井上君の家のカローラと武田君の家のカローラはどこが違うんですか?
と同じレベルじゃない?

278 :デフォルトの名無しさん:04/12/16 01:13:47
>>277
それはちょっと違うんじゃ・・・

279 :デフォルトの名無しさん:04/12/16 01:27:09
託児所になっとる・・・


280 :デフォルトの名無しさん:04/12/16 02:43:23
餓鬼末

281 :デフォルトの名無しさん:04/12/16 10:31:19
>>277

「トヨタ」と「トヨタ・カローラ」ってどこが違うんですか? だ

282 :デフォルトの名無しさん:04/12/16 19:42:20
「あいうえお」みたいな文字列を一文字ずつ16進数にして配列に入れて行くにはどうしたらいいですか?

283 :デフォルトの名無しさん:04/12/16 19:47:42
>>282
一文字ずつ処理するのは必要条件なのか?

284 :デフォルトの名無しさん:04/12/16 19:57:01
>>282
>「あいうえお」みたいな文字列を一文字ずつ16進数にして

それぞれどの様な 16 進数値になればよいのだ?

285 :デフォルトの名無しさん:04/12/16 20:24:38
>>282
何がやりたいのか、いまいち分からんが「漢字コード」で検索してミソ。

286 :デフォルトの名無しさん:04/12/16 20:31:02
すいません。getcharのしつもんです。
Cでアンケートを集計したくてプログラムを書いたんですけど
うまくいきません。
一文字入力してエンターを押すと、処理が一つ跳んでしまうようです。
問題はgetchar の使い方でしょうか?
またはgetcharは使うとまずいですか?
次にソースを載せておきます。誰か原因と代替案お願いします。

287 :286:04/12/16 20:32:15
#include<stdio.h>
int main ()
{
int g, h, i = 0, j = 0, k = 0;

for (h = 1; h <= 3; h++){ //簡単の為3人分だけ数える。

//アンケートのQ1.はYes または No で答えるもの。
//Yesを y 、Noを n 、無回答を 0 で入力する。
printf ("Q1. ");
g = getchar ();
if (g == 'y'){
i++;
}
if (g == 'n'){
j++;
}
if (g == '0'){
k++;
}
}
//A1.回答表示
printf("A1.\n");
printf (" Yes = %d\n", i);
printf (" No = %d\n", j);
printf ("Mukaitou = %d\n", k);
return 0;
}


288 :デフォルトの名無しさん:04/12/16 20:35:02
>>286
邪道かもしらんが、<conio.h>をインクルードして、getch()を使ったら?
Enter押す必要もないし。

289 :デフォルトの名無しさん:04/12/16 20:42:38
>>286
なにが起こってるのかはgetcharから受け取った値をその都度表示してみれば分かるだろう。

290 :デフォルトの名無しさん:04/12/16 20:42:57
>>283
もじを数字にして暗号化したいっす

291 :デフォルトの名無しさん:04/12/16 20:45:28
>>282
char sz[] = "あいうえお";

292 :デフォルトの名無しさん:04/12/16 20:45:32
>>286
関係ないが、switchにするか、せめてelse ifでつなげ。

293 :デフォルトの名無しさん:04/12/16 20:48:09
>>290
とりあえずここを順に読んでみることを勧める。
ttp://homepage1.nifty.com/toshio-k/prog/c/

294 :286:04/12/16 20:53:25
>>288
Enterはぜひとも欲しいので・・・
>>289
y\nってことですかね。
>>292
いや、これはおはずかし・・・・

295 :デフォルトの名無しさん:04/12/16 20:58:21
>>294
何かしらんが、一回一回Enter押したいのか?
だったらscanfにすれば。

296 :286:04/12/16 21:02:04
>>295
scanf("%c\n", &g);
みたいな感じですか?

297 :デフォルトの名無しさん:04/12/16 21:04:21
入力ストリームを毎回フラッシュするという手もあるぞ。


冗長ですか・・・そうですか λ...

298 :デフォルトの名無しさん:04/12/16 21:04:37
>>296
\n入れると動作がおかしくなる。%cのみで。

299 :デフォルトの名無しさん:04/12/16 21:05:03
>>291
要件満たしてないじゃん…
  wchar_t sz[] = L"あいうえお";
こうじゃないと。

300 :デフォルトの名無しさん:04/12/16 21:05:19
>>296
http://www.kouno.jp/home/c_faq/c12.html#17

301 :デフォルトの名無しさん:04/12/16 21:05:44
>>297
入力ストリームのフラッシュって動作未定義じゃないか。

302 :286:04/12/16 21:09:10
やば、余計恥ずかしい。
>>298,300
うむ。了解です。ありがとうございました。

303 :デフォルトの名無しさん:04/12/16 21:26:25
C言語で3Dプログラムを勉強しているんですが、
サンプルのプログラム中に

>//四角形座標の最大最小値の初期化
>max_x = max_z = -1e10f;
>min_x = min_z = 1e10f;

とある"1e10f"はどのような値なのでしょうか?

304 :デフォルトの名無しさん:04/12/16 21:29:21
>>303
たしかに意味わからんな。
2進数にしたら、11110000100001111、と左右対称系になるから、
ここに何か意味があるのかも?3Dはわからんからこれ以上
何も言えないが。

305 :デフォルトの名無しさん:04/12/16 21:32:51
>>303
適当な値でしょ。

306 :デフォルトの名無しさん:04/12/16 21:32:55
>>303
http://www.bohyoh.com/CandCPP/FAQ/FAQ00082.html

307 :304:04/12/16 21:35:42
ああっ!恥かいた!0xついてないし、16進数じゃないやん!
最後のfは浮動小数点型のサフィックスだ。
1e10は、「1*10の10乗」って意味だ。

吊ってくるorz

308 :デフォルトの名無しさん:04/12/16 21:37:10
まぁまぁ・・・はやまらないで

309 :303:04/12/16 22:08:28
>307
えと

1e10 = 10^10 = 10M(100憶) Σ( ̄□ ̄


ありがとうございます。



310 :デフォルトの名無しさん:04/12/16 22:09:24
今の流行は無線LANでの首吊りですよ。

311 :デフォルトの名無しさん:04/12/16 22:26:51
>>309
計算間違い。

312 :303:04/12/16 22:47:43
あう、 MじゃなくてGか。。。

313 :デフォルトの名無しさん:04/12/16 23:37:15
>>309
1e10 で
>Σ( ̄□ ̄ 
なら、1e300 だとどうなるんだろう…

314 :デフォルトの名無しさん:04/12/16 23:48:52
>>313
グレートウォールの表面積は何平米?

315 :デフォルトの名無しさん:04/12/17 00:34:02
すいません、ものすごく基本的なことかもしれないんですけど、
変数を宣言して初期化する際に

int a = 5 * 3;

のように演算を行って初期化することは正しい行為なんでしょうか。

316 :デフォルトの名無しさん:04/12/17 00:41:09
>>315
イイヨー

317 :315:04/12/17 00:45:24
>>316
即答ありがとうございました。

318 :デフォルトの名無しさん:04/12/17 01:59:51
リンクリストを作ろうと思うんですが、
typedef struct {
    void *data;
    list *next;
} list;

と書きたいんですが「構文エラー : 識別子 'list'」とかいうエラーになります。
このような書きかたは出来ないんでしょうか。

319 :デフォルトの名無しさん:04/12/17 02:02:57
出来ない

320 :デフォルトの名無しさん:04/12/17 02:04:38
http://www.kouno.jp/home/c_faq/c1.html#14

321 :デフォルトの名無しさん:04/12/17 02:05:12
>このような書きかたは出来ない

こうすれ
typedef struct list_{
void *data;
struct list_ *next;
} list;


322 :318:04/12/17 02:11:07
できました!ありがとうございます!

323 :デフォルトの名無しさん:04/12/17 16:26:31
C言語の課題おしえてください。

直線を指定した座標から座標まで引くプログラムなんですが
ターミナルに出力するのではなくてファイルに出力するらしいです。
検索してもライン関数を使ってるのしかなくて、そのライン関数
自体の中身がわからりません。どうか教えてください。

324 :デフォルトの名無しさん:04/12/17 16:34:50
>>323
ここは課題を教えるスレじゃ無い

325 :323:04/12/17 16:36:15
そうでしたか・・・みなさんすみませんでした!

326 :デフォルトの名無しさん:04/12/17 16:44:26
現在学校でC言語のテスト中です;
どなたか名前を入力させて
その名前を10回表示するというプログラムを作成してください
なにとぞお願いします

327 :デフォルトの名無しさん:04/12/17 16:53:23
int i;
char name[128];
scanf("%s", &name);
for (i = 0; i < 10; i++)
printf("%s", name);

328 :デフォルトの名無しさん:04/12/17 17:15:12
>>326-327
いっぺん死んで。

329 :デフォルトの名無しさん:04/12/17 17:28:45
>>327
"%128s"かfgetsにしろ

330 :デフォルトの名無しさん:04/12/17 20:13:08
>>327
&nameの&は余計だな。

331 :デフォルトの名無しさん:04/12/17 20:35:48
大抵のところで、scanfはポインタを教える前に使わせるからなぁ
とりあえず&をつけろと教えられている気がする

332 :デフォルトの名無しさん:04/12/17 23:37:09
C++はなぜどこででも変数宣言できるようになったんだ?


333 :デフォルトの名無しさん:04/12/17 23:40:06
>>332
使う直前で宣言する方がわかりやすいから

334 :デフォルトの名無しさん:04/12/17 23:40:20
>>332
ちゃんとは知らんが、スコープの先頭で宣言しなきゃいけないってのが
コンパイラにとっては都合がいい(コンパイラの実装が楽)でも、
書く側にとっては辛いからじゃない?

335 :デフォルトの名無しさん:04/12/17 23:41:22
>>332
コンストラクタの実行タイミングを制御するのにいちいちブレースつけにゃならんのがダサいからだろ

336 :デフォルトの名無しさん:04/12/17 23:42:12
>>327
そんな使い方するから scanf 使いはアフォやと偏見もたれるんじゃい

337 :デフォルトの名無しさん:04/12/17 23:43:44
>>336
ちょい待て。scanfなんか、まともに動くプログラム作ろうと思ったら使わんだろ。

338 :デフォルトの名無しさん:04/12/17 23:44:09
だがそれがいい

339 :デフォルトの名無しさん:04/12/17 23:44:24
>>337
そんなことない。結構便利。

340 :デフォルトの名無しさん:04/12/17 23:46:10
無能scanf使いによる自己弁護が始まりました

341 :デフォルトの名無しさん:04/12/17 23:46:59
じゃぁみんな scanf の代わりになに使ってんノ?

342 :デフォルトの名無しさん:04/12/17 23:46:59
せめてfgetsとsscanfにしろ

343 :337:04/12/17 23:47:21
>>339
いや、めちゃくちゃちょこっとしたテストプログラム書くときだけだろ?
「まともに動くプログラム」ではない。

344 :デフォルトの名無しさん:04/12/17 23:50:46
だから何つかうんだってば。
正規表現ライブラリとか標準であればそっち使いたいけど。


345 :デフォルトの名無しさん:04/12/17 23:51:53
質問
エムアロック?マロック?

346 :デフォルトの名無しさん:04/12/17 23:53:06
>>345
エムアロック
「マロック」って言う奴は例外なく馬鹿。

347 :デフォルトの名無しさん:04/12/17 23:53:15
マロックにきまってるだろ。ちっとは考えろ。

348 :デフォルトの名無しさん:04/12/17 23:53:18
キャプテンマーロック

349 :デフォルトの名無しさん:04/12/17 23:54:08
エムアロックなんて読むやつはなぁ、
calloc をシーエーアロックなんて読むんだよ、バカ。
これはカロックだ。

350 :デフォルトの名無しさん:04/12/17 23:54:37
>>344
>>342見ろ

>>345
マァロック

351 :デフォルトの名無しさん:04/12/17 23:54:39
>>345
いきがったやつは
memory allocation
で,エムアロックだよ,なんてぬかすが,
ネイティブは普通に
マォック
って発音する(のを聞いた).
マロックでいんでない?
オレ的にはcharはキャラと言いたいけど,あれもチャーだしね.
ギタリストかよ

352 :デフォルトの名無しさん:04/12/17 23:55:05
>>349は救いようのない馬鹿
シーエーアロック?なんでaを2回読んでんだw
シーアロックだよ

353 :デフォルトの名無しさん:04/12/17 23:55:53
意見を総合すると
>>346は例外なくBAKAってことでFA?

354 :デフォルトの名無しさん:04/12/17 23:56:14
モーロン

355 :デフォルトの名無しさん:04/12/17 23:57:18
>>353
単独の対象に対して「例外なく…」って言うお前は間違いなくバカ

356 :デフォルトの名無しさん:04/12/17 23:57:19
>>352
馬鹿はお前。
malloc はもともと「エムアーアロック」って読むのが正式。
母音が2つ続くので連音して「マァロック」→「マロック」になった。

357 :345:04/12/17 23:58:30
>>346-356
かえって分からなくなりました。ありがとうございました。


358 :デフォルトの名無しさん:04/12/17 23:58:59
> malloc はもともと「エムアーアロック」って読むのが正式。
ほぉぉお。何をもって「正式」なんだか根拠を示してもらおうか。

359 :Rubyist!:04/12/18 00:01:24
楽しそうだな。

360 :デフォルトの名無しさん:04/12/18 00:02:06
>>358
Dinkin博士の「プログラマ発音史 - 技術用語の史学的考証 - 」知らんのか?
この分野の権威だぞ。

361 :デフォルトの名無しさん:04/12/18 00:02:15
やはりこういう一種の宗教問題的な,
技術的でない曖昧な話題は盛り上がるね.
人間の本質だよ,議論して答えを導き出すという.
言い争いにしかなってないかもしれねーけど,
こういうのを授業でもやりたい.

362 :デフォルトの名無しさん:04/12/18 00:03:44
>>360
権威主義馬鹿。
つーか、googleで一件もヒットしないのに、権威?
他の分野ならともかく、プログラムで?
ぷぷぷぷぷ。

363 :デフォルトの名無しさん:04/12/18 00:04:13
>>361
>やはりこういう一種の宗教問題的な,
>技術的でない曖昧な話題は盛り上がるね.
大した知識もない馬鹿でも参加できるからね


364 :356=360:04/12/18 00:05:17
真っ赤なうそだぴょーん
わーい、google で検索してやんの!

365 :デフォルトの名無しさん:04/12/18 00:06:19
>>364
ちょっとワロタ

366 :デフォルトの名無しさん:04/12/18 00:06:51
>>364
あ、そ。じゃ、エムアロックね。

367 :デフォルトの名無しさん:04/12/18 00:15:47
そして誰もいなくなった

368 :デフォルトの名無しさん:04/12/18 00:19:54
ケロッグじゃ駄目なん?

369 :デフォルトの名無しさん:04/12/18 00:21:10
pingはぺやんぐだよな

370 :デフォルトの名無しさん:04/12/18 00:22:41
sin はシンだよな

371 :デフォルトの名無しさん:04/12/18 00:23:44
で、80種類のコンパイラは?

372 :デフォルトの名無しさん:04/12/18 00:24:46
質問です。
教えてください!

373 :デフォルトの名無しさん:04/12/18 00:25:10
NullReferenceExceptionはぬるりだよな

374 :デフォルトの名無しさん:04/12/18 00:32:06
>>370
sinはサインに決まってる。
そして、cosはコカインだ。

375 :デフォルトの名無しさん:04/12/18 00:34:01
アークコカイン最強

376 :デフォルトの名無しさん:04/12/18 00:50:26
おまいらスレ違い

最高に頭悪そうな発言してください in ム板 (3)
http://pc5.2ch.net/test/read.cgi/tech/1101931660/

377 :デフォルトの名無しさん:04/12/18 01:39:12
>>376
私が行くには高級すぎて…

378 :デフォルトの名無しさん:04/12/18 01:40:16
ファイル内でstatic で定義した値を
extern で外部からアドレス参照できるようにするのはC言語動作的に
大丈夫なのでしょうか?

hoge.h
--------------------------
extern const int* gp_hoge;

--------------------------


hoge.cpp
--------------------------
static const int moge = 1;
int* gp_hoge = &moge;
--------------------------


main.cpp
--------------------------
#include "hoge.h"

int main()
{
printf("%d\n" , *gp_hoge );
return 0;
}
--------------------------


379 :デフォルトの名無しさん:04/12/18 01:44:05
>378
動作上はまったく問題ない

が、なるべく使うのはやめたほうがいい

380 :デフォルトの名無しさん:04/12/18 01:46:00
>>378
何のためにstaticをつけているのだろうか。

381 :デフォルトの名無しさん:04/12/18 01:48:25
int i;
char a[5][6];

ってカンジに宣言してて

iはいろいろ変わっていってて、ある条件下で
a[0][1]にiの値を入れたいんですが何か方法ありませんか?



382 :デフォルトの名無しさん:04/12/18 01:50:13
a[0][1] = i;

383 :デフォルトの名無しさん:04/12/18 01:51:15
>381

if ( i == "ある値" )
a[0][1] = i;

384 :381:04/12/18 01:56:32
>>382-383
そうやって代入して文字列a[0]を出力すると、
printf("%s",a[0]);では、
a[0][1]の部分がちゃんと出力できないですよね?
これを解決する方法ないですか?

385 :デフォルトの名無しさん:04/12/18 01:58:24
printf("%c",a[0][1]);

もしくは


a[0][0] = " ";
と適当に値を放り込んでから表示。

386 :デフォルトの名無しさん:04/12/18 02:19:11
a[0][0] = ' ';
だろう

387 :デフォルトの名無しさん:04/12/18 02:24:38
a[0][1] = i +'0';


388 :385:04/12/18 02:27:17
>386

_|\○ノ"  あ・・・

389 :デフォルトの名無しさん:04/12/18 03:27:28
>379
>が、なるべく使うのはやめたほうがいい

なぜ?

>380
>何のためにstaticをつけているのだろうか。

見られたくないことがあるから。
そんときgp_hogeは他を指してればいい。

390 :デフォルトの名無しさん:04/12/18 05:32:23
下のように、forループの中である条件が成立したときに、
(breakのようにforループを抜けてしまうのではなくて)
iを一つ進めてforループ中の処理の先頭に飛びたいのですが、
簡単に書く方法(命令)は無いのでしょうか。(break並に)
条件以下をswitchしてもいいのですがなんか書き方が面倒です。

for(i=0;i<1000;i++)
{


if(hoge==hoo){以降の処理をせずにiを一個進めてループ中の処理の先頭に戻る)}
  : 
  :
(色々な処理)
  :
  :
}


391 :デフォルトの名無しさん:04/12/18 05:35:43
>>390
なんかネタみたいな質問だなcontinue

392 :デフォルトの名無しさん:04/12/18 05:47:51
>>391
あ、便利なのがあったんですね。知りませんでした。ありがとうございます。

393 :デフォルトの名無しさん:04/12/18 09:07:52
Cの場合はループ中で制御変数を書き変えても大丈夫ですよね?

394 :デフォルトの名無しさん:04/12/18 09:09:37
>>393
まぁな。ただしそんなコード書く奴は馬鹿だが。

395 :デフォルトの名無しさん:04/12/18 09:13:14
ファイル内でstatic で定義した変数を
extern で外部から参照できるようにするのはC言語動作的に
大丈夫なのでしょうか?

hoge.h
--------------------------
extern const int moge;
--------------------------


hoge.cpp
--------------------------
static const int moge = 1;
--------------------------


main.cpp
--------------------------
#include "hoge.h"

int main()
{
printf("%d\n" , moge);
return 0;
}
--------------------------

396 :デフォルトの名無しさん:04/12/18 09:15:10
>>395
上で回答もらってんだろ。氏ね。
しかもcpp?馬鹿。

397 :デフォルトの名無しさん:04/12/18 09:19:27
失礼しました
ファイル内でstatic で定義した変数を
extern で外部から参照できるようにするのはC言語動作的に
大丈夫なのでしょうか?

hoge.h
--------------------------
extern const int moge;
--------------------------

hoge.cp
--------------------------
static const int moge = 1;
--------------------------

main.c
--------------------------
#include "hoge.h"

int main()
{
printf("%d\n" , moge);
return 0;
}
--------------------------

398 :デフォルトの名無しさん:04/12/18 09:31:16
>>397
hoge.h の中の extern は未解決参照としてリンカに渡されリンカが自動生成するオブジェクト
hoge.cp の中の static は内部ラベルがつくだけでリンカにはDATAセクションの一部として渡される
main.c が参照している moge は hoge.h で宣言された未解決参照で、hoge.cp で定義された moge とは別物
よって main.c の翻訳結果を実行したとき、規格合致処理系なら 0 と表示する
もし 1 と表示する処理系があったなら、その処理系は規格合致処理系ではない

399 :デフォルトの名無しさん:04/12/18 11:08:13
>>394
普通だ。それより、
>>393
for の構文を検討するように。
制御変数などというものはない。

400 :394:04/12/18 11:10:31
>>399
あ〜、おれも言い方がまずかった。
for (i = 0; i < 10; i++)
みたいな文でiを中で変更するなってことね。

> 制御変数などというものはない。
まぁ、>>393が言わんとすることは大体わかるだろ。
そんなに肩肘張らなくても…。

401 :デフォルトの名無しさん:04/12/18 11:18:39
>393の質問は、
>ループ中で制御変数を書き変えても
だよな。

>for (i = 0; i < 10; i++)
つーか、ループ中に変えてるじゃん。

402 :デフォルトの名無しさん:04/12/18 12:33:24
(;´Д`)ハァハァ
ttp://www.cppreference.com/

403 :デフォルトの名無しさん:04/12/18 12:51:53
>>400
いや、for が
for (変数=初期値; 変数を使った終了判定; 変数++)
という書式だとか思っているなら間違いだし、
変数を途中で増やそうが減らそうが何の問題もない。

404 :394:04/12/18 13:19:21
>403
いやいやいや。もちろん、あなたのおっしゃるとおりです。
が、まぁ、私の言いたいことは典型的なfor (i = 0; i < 10; i++)みたいな
イディオムにおいて、ループ中でiをいじるのは「スタイルとして」ダメでしょうという、
ただその1点のみです。
なぜfor文がこういう構文になっているのか、という問題でもありますし。

405 :デフォルトの名無しさん:04/12/18 13:26:30
>>404
あーやっと理解できた。スマソ
それなら同意。

406 :デフォルトの名無しさん:04/12/18 14:06:52
自作した二分木をコンソールに出力したいんですが
難しくて悩んでいます。きれいに木のようにしてコンソールに
描画するいい方法はないでしょうか・・・。

     8
    +-+-+
    5   10
  +-+-+
  2   6

たとえば↑こんなふうに・・・

407 :デフォルトの名無しさん:04/12/18 14:12:15
末端から必要スペースの総量を計算していけばいけると思うよ。

408 :デフォルトの名無しさん:04/12/18 14:13:08
るbyさいこう!

409 :デフォルトの名無しさん:04/12/18 14:13:09
float 型って符号部1bit, 指数部8bit, 仮数部23bitなんですよね?

float f = -1.5;
などとしたときにビットがどうなっているか知りたいのですが,
どのような方法がありますか?



410 :デフォルトの名無しさん:04/12/18 14:14:41
・fのアドレスを取得してcharのポインタに放り込む
でおk

411 :デフォルトの名無しさん:04/12/18 14:20:17
(u)int32_tとかの方がいいんじゃないか?

412 :デフォルトの名無しさん:04/12/18 14:21:58
あー、32bit決め打ちなら確かにそれでいいな

413 :デフォルトの名無しさん:04/12/18 14:22:32
unsigned long fToUL(float src)
{ return *(unsigned long*)&src; }

unsigned long x = fToUL(-1.5f);
↑x のビットを調べれば桶

キャストがいやなら union でやれば桶

414 :デフォルトの名無しさん:04/12/18 14:22:57
unsigned int flg;
float shousuu;

for(flg=0x80000000;flg;flg>>=1){
if(flg&(unsigned int)shousuu){
putchar('1');
}else{
putchar('0');
}
}

415 :409:04/12/18 14:24:18
いろいろありがとうございます
今環境がないので, 夜にでもやってみます


416 :476 ◆FIcNi4f8js :04/12/18 15:04:28
>>414-415
(unsigned int)shousuu
これはダメだよ

417 :401:04/12/18 15:51:19
>>404
未だ判らないんだけどさ、>400はループ中でiを変えてるじゃん。
それとも、forの括弧の中はループ中じゃないと言う主張?

418 :デフォルトの名無しさん:04/12/18 16:39:19

>     8
>    +-+-+
>    5   10
>  +-+-+
>  2   6

  2+
  + 5+
  6+ +
    + 8
    +
   10+

これでどうかね?


419 :デフォルトの名無しさん:04/12/18 17:15:07
char a[]="aiueo";

printf ("%s\n",a[2]);

エラーがでますがなぜですか?
予想ではuが表示されると思うのですが・・・

420 :デフォルトの名無しさん:04/12/18 17:19:01
>>419
%sを使っているからじゃないの?

421 :デフォルトの名無しさん:04/12/18 17:19:57
%c使え

422 :デフォルトの名無しさん:04/12/18 17:22:59
>>419
printf("%c\n", a[2]);

423 :デフォルトの名無しさん:04/12/18 17:27:28
×printf ("%s\n",a[2]);
○printf ("%c\n",a[2]);

printf ("%s\n",&a[2]);
printf ("%s\n",a);

この二つも試して違いを調べてみてくれ。

424 :デフォルトの名無しさん:04/12/18 17:33:36
ついでにprintf ("%s\n",a+2); もやった方がいいと思うぞ

425 :デフォルトの名無しさん:04/12/18 17:39:53
おお!!
凄いレスが!
皆さんサンクスです。
%sは先頭からって感じですねありがトン

426 :デフォルトの名無しさん:04/12/18 17:43:52
printf("%s\n",2[a]);

>%sは先頭からって感じですねありがトン
おまえはあふぉ


427 :394:04/12/18 18:38:57
>>417
それは単にあなたの揚げ足取りだと思います。
それがわかっているなら、あんな質問は出ないでしょう?

428 :デフォルトの名無しさん:04/12/18 18:50:43
>>426
ひどいこと言わないの

429 :デフォルトの名無しさん:04/12/18 18:55:06
>>426
(;´Д`)?まともに動かないだろそれ。

430 :デフォルトの名無しさん:04/12/18 19:05:25
sizeof(s[0]) == 1 ⇒ 2[s] == s[2]

431 :デフォルトの名無しさん:04/12/18 19:10:55
アドレスと値をゴッチャにしてるうちは悩みつづけそう。

432 :デフォルトの名無しさん:04/12/18 19:20:06
>>430
「sizeof(s[0]) == 1」という事実と「2[s] == s[2]」という事実が
どうつながるのか意味不明なんですけど。

433 :デフォルトの名無しさん:04/12/18 19:27:28
>>432
「2[s] と書くと、s から 2バイト後ろを指す」
とでも思ってるんでしょう。

s がどの型を指していても (void * は除く)
a[b] と b[a] は等価ですから! >>430

434 :デフォルトの名無しさん:04/12/18 19:38:21
a[b]とb[a]が等価であると言い張るなら
[a,b]と書けても何の不思議もないはずだ。違うか?

435 :デフォルトの名無しさん:04/12/18 19:40:28
違う。

436 :デフォルトの名無しさん:04/12/18 19:41:43
>>434
そこまで言うなら]a, b[でもいいじゃないか。違うか?

437 :デフォルトの名無しさん:04/12/18 19:46:05
0[a+b]ならいけるか

438 :デフォルトの名無しさん:04/12/18 19:53:29
struct DATA{
     char *str
     int num
};

この構造体について説明するときどう言えばいい?
「文字型ポインタ変数と整数型変数をメンバに持つ構造体DATA」ってのはおかしい?

439 :デフォルトの名無しさん:04/12/18 19:56:17
構成要素の説明としては普通に通じるとは思うけど
説明って何の為のものかを言うべきなんじゃないのか。

440 :デフォルトの名無しさん:04/12/18 19:56:43
>>438
charポインタとint型変数をメンバに持つ…でいいじゃん。
変に日本語にするとあいまいにならないか?
「整数型」はshort・longも含むし。

441 :デフォルトの名無しさん:04/12/18 20:00:29
>>438
「バグってます」
以上。

442 :デフォルトの名無しさん:04/12/18 20:01:16
>>419
printf("%c\n", 2["aiueo"]);

443 :デフォルトの名無しさん:04/12/18 20:02:28
> 2["aiueo"]
この書き方って相手をビビらす以外にまともな使い道ってあるの?

444 :デフォルトの名無しさん:04/12/18 20:02:30
>>427
Cでは、ループ制御は自分でしなければなりません。
whileではなくforを使うなら、ある程度判りやすく書くことが出来ます。

と言う説明でいいのでは?

445 :デフォルトの名無しさん:04/12/18 20:04:18
>>443
こっちならデバッグ用に使うんだけどね。
printf("%c\n", "abcdef"[val]);

446 :デフォルトの名無しさん:04/12/18 21:20:31
#include <stdio.h>

int main(){
int a[] = {1,100,10000},*b = a;

//アドレスの中身を++してからその値をアドレスとして参照した先の値を表示
printf("1: *b == %d\n",*b++);

//上に同じ
printf("2: *b == %d\n",++*b);

//参照先のアドレスの中身を--してから表示
printf("3: *b == %d\n",--(*b));

//アドレスの中身を--++++した値をアドレスとしてその値を表示した後その値を++
printf("4: *b == %d\n",++*(--b)++);

//*bの中身を表示
printf("5: *b == %d",*b);

優先順位だけで見るとコメント文のように実行されると思うのですが、
実際は後置インクリメントは優先順位が高いにも関わらず処理の順番
は遅くなります。
演算子の優先順位と処理の順番は別物なのでしょうか。

return 0;
}

447 :デフォルトの名無しさん:04/12/18 21:28:53
訂正します。

>>//アドレスの中身を--++++した値をアドレスとしてその値を表示した後その値を++

//アドレスの中身を--++++した値をアドレスとして参照先の中身を表示

448 :デフォルトの名無しさん:04/12/18 21:49:14
アドレスの中身ってなんだろう・・

449 :デフォルトの名無しさん:04/12/18 21:52:20
>>448 わかりにくい表現ですみません。

アドレスの中身 == メモリのアドレス先に格納されている値

という意味で使用しました。

450 :デフォルトの名無しさん:04/12/18 21:57:34
「b++」という式のを評価した場合、増加前の値だと決まっている。
*b++のような場合は先にbが増えていることもありうるが、
それとこれとは別問題。
C++で自分で++のオーバーロードやってみると、なんとなくわかるよ。

451 :デフォルトの名無しさん:04/12/18 22:02:05
評価の順番でいえば
++*(--b)++ は ++(*((--b)++))

452 :デフォルトの名無しさん:04/12/18 22:23:44
>>446
インクリメント演算子などは関数に見たてて考えたらいい。
前置の場合はインクリメントさせた自分自身が返されて
後置の場合はインクリメントするが返されるのは元の値、てなふうに

453 :デフォルトの名無しさん:04/12/18 22:39:30
open()システムコールをコールする関数があります。
その関数は諸事情によりclose()しないまま処理を終了します。
が、条件によってたまにクローズする時もあります。

再びその関数が呼ばれた時
対象ファイルがオープン状態かクローズ状態かを判定する方法ってありますか


454 :デフォルトの名無しさん:04/12/18 22:41:30
>>453
常にcloseしない(orする)ようにしろ。

455 :デフォルトの名無しさん:04/12/18 22:47:26
静的変数に記録するなり、引数と戻り値を使うなりしろ

456 :453:04/12/18 22:53:17
closeすると
@「ここまでreadした」カーソルが最初に戻ってしまうので
カーソルを記録するための処理がかなり増える
A何万回とファイルアクセスを繰り返すのでopen close openは負荷になる

上記理由から
オープン判定が可能であればopenしっぱなしが良いんだけど
判定は不可能ってことでFAですか?

457 :446:04/12/18 22:55:22
ありがとうございました。評価順位についてもう一度よく考えてみます

458 :デフォルトの名無しさん:04/12/18 22:59:04
>>453
ロックでもかけとけば?

459 :デフォルトの名無しさん:04/12/18 23:00:27
>>458

ありがとうございます。ヘヴィメタでいいですか?

460 :デフォルトの名無しさん:04/12/18 23:02:32
>>456=453
完全な解答聞きたかったら環境ごとのスレ行け。
環境に依存するのにFAは無理だろ。

標準では無理だけど


461 :デフォルトの名無しさん:04/12/18 23:05:21
openとcloseのラッパ作るとか。

462 :453:04/12/18 23:15:04
あっさりできる方法ってありそうで意外とないもんなんですね

制御の方を見直すことにします。
回答してくれた方々、どうもありがとうございました。

463 :デフォルトの名無しさん:04/12/18 23:18:26
>>457
演算子の優先順位と結合規則でぐぐれ、考える必要も無いぞw

464 :デフォルトの名無しさん:04/12/18 23:18:44
#define porta (*(int *)0x05)

ポインタの基本はある程度理解しましたが、上の意味というか書式の組み合わせがよくわからないっす。
PIC16F84マイコン用のプログラムで、I/Oポートaのレジスタ(アドレス0x05)にアクセスするのですが・・・。
なんでこれでアクセスできるようになるのかよくわからないです。

(*(int *)0x05)
↑ここに"(int *)"があるのがよくわかんないです。で、入れたことにより"* 0x05"がどういう役割を持つのかと。

とりあえず、すでに質問している自分が何言ってるのかすらよくわかりません _| ̄|○

サルな私にも理解できるように、優しく、かつ美しく、そして華やかに教えてください。
お願いしますm(__)m


465 :デフォルトの名無しさん:04/12/18 23:20:30
>>464
> ここに"(int *)"があるのがよくわかんないです。
整数をポインタにキャスト

466 :446:04/12/18 23:31:00
>>463 早速ぐぐりました。

演算子の優先順位と結合規則によって処理の順番が決定されるのですね。

ありがとうございます。

467 :デフォルトの名無しさん:04/12/18 23:37:54
VC++の質問ここでしてオッケですか?

468 :デフォルトの名無しさん:04/12/18 23:38:45
>>465

キャストでしたか・・・。始めたばかりでキャストに頭が回りませんでした。
数学的にカッコを展開してました。 _| ̄|○ 
もう一度基礎からやり直します。
どうもでしたm(__)m。


469 :デフォルトの名無しさん:04/12/18 23:39:10
わざとらしいので絶 対 にダメだ

470 :デフォルトの名無しさん:04/12/19 00:53:01
おk(ry

471 :デフォルトの名無しさん:04/12/19 01:50:44
>>462
状態を記録した構造体なり何なりをやり取りするようにするくらいしかないんじゃない?
staticな変数に記録って手もあるだろうけどリエントラントにならないし、
色々神経つかわんとならんし。

472 :デフォルトの名無しさん:04/12/19 02:08:21
ファイルハンドル用のint変数を初期値-1にしておく。
open()したら0以上になる。close()したらまた-1を格納しとけ。

473 :デフォルトの名無しさん:04/12/19 02:51:30
>>403
for?(前処理; まじ?; 再処理)
ですか?

474 :デフォルトの名無しさん:04/12/19 04:09:35
union {
    T1 t1;
    T2 t2;
} u;

で、u.t1 に値をセットしたあとに u.t2 にアクセスするとどうなるんですか?
未定義の動作ですか?

475 :デフォルトの名無しさん:04/12/19 04:18:17
>>474
http://www9.plala.or.jp/sgwr-t/c/sec16.html

476 :デフォルトの名無しさん:04/12/19 08:12:01
>>474
それを未定義にしたらunionの存在意義がなくなるぞ。

477 :デフォルトの名無しさん:04/12/19 08:21:21
どうして未定義と思ったのか興味ある。解説してよ

478 :デフォルトの名無しさん:04/12/19 10:38:44
すみません、教えてください。
floatの変数を小数点以下n桁で切り捨てるにはどうすればいいのでしょうか?
今はn桁繰り上げてintにキャストしてまたfloatに戻してn桁繰り下げ、という
ことをしてるんですが、もっと効率がいい方法ってないでしょうか?

float round(float value, int digit)
{
  int temp;
  temp = (int)(value * pow(10, digit));
  return ((float)temp) / pow(10, digit);
}

479 :デフォルトの名無しさん:04/12/19 11:08:41
>>478
sprintf()してatof()とか?

480 :デフォルトの名無しさん:04/12/19 12:08:34
>>479
m9(ry

481 :デフォルトの名無しさん:04/12/19 12:43:44
&0x0000ffff

482 :デフォルトの名無しさん:04/12/19 12:56:29
>>478
精々、pow(10, digit) を中間変数に保存するとか。
(コンパイラによっては最適化でやってくれるかも知らんが)
あとは…digit の値の範囲限定できるなら
static const double pow10[] = {1e0, 1e1, 1e2, 1e3, ...};
みたいに、表引きするとか。

483 :デフォルトの名無しさん:04/12/19 13:40:58
> それを未定義にしたらunionの存在意義がなくなるぞ。

こいつunionの存在意義を勘違いしているぼけ。


484 :デフォルトの名無しさん:04/12/19 13:42:14
> > それを未定義にしたらunionの存在意義がなくなるぞ。
> こいつunionの存在意義を勘違いしているぼけ。

たしかに

typedef union {
short word;
char byte[2];
} foo;
とかやってそうだ。で、unionを「そういうふうに使うためのもの」だと思い込んでいさそうな厨だな。

485 :デフォルトの名無しさん:04/12/19 13:43:33
> close()したらまた-1を格納しとけ。

こいつは、openとcloseの対応関係がすでに把握できないような「おわってる」ソースを
平気でかくぼけだからこういうことを言うわけだ。

もしくは、そういう「おわってる」ソースを書くぼけな会社の先輩に「そういうものだ」と
おしえられてそのまま信じ込んでいるぼけ

486 :デフォルトの名無しさん:04/12/19 13:45:47
> closeすると「ここまでreadした」カーソルが最初に戻ってしまうので
> カーソルを記録するための処理がかなり増える

っていうか、そんな不安定な状態でオープンしっぱなしってのが ぼけ
readするたびに書け!

487 :デフォルトの名無しさん:04/12/19 13:47:10
> 「b++」という式のを評価した場合、増加前の値だと決まっている。
> *b++のような場合は先にbが増えていることもありうるが、

ねーよ > ありうる
ぼけ。

Cの基本中の基本だろうが ぼけ

488 :デフォルトの名無しさん:04/12/19 13:48:52
>>483-487

まとめて書け ぼけ

489 :デフォルトの名無しさん:04/12/19 13:51:39
2つぐらい別にかいてもいいだろ? ぼけ
それにもともと別のに関することだから2つわけて書くのが当然だ! ぼけ

490 :デフォルトの名無しさん:04/12/19 13:52:41
>>487
お前はその基本すら不完全にしか知らないからそういう馬鹿回答が出るわけで。

491 :デフォルトの名無しさん:04/12/19 13:54:25
>>487
ここでも読んでなぼくちゃん
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html

492 :デフォルトの名無しさん:04/12/19 14:01:08
退散する前に、10種類のコンパイラ、いい加減に言えよ?

493 :デフォルトの名無しさん:04/12/19 14:01:26
センセー

ファイル内でしか使わない関数は全部static付けてるんですけど、
コレって何かデメリットあります?

494 :デフォルトの名無しさん:04/12/19 14:02:55
>>493
外部から無茶な使われ方せずにすむ。
名前が衝突しなくなる。

495 :デフォルトの名無しさん:04/12/19 14:04:24
>>493
ない。そうするのが普通。

496 :494:04/12/19 14:05:46
あ、デメリットか。
「後で使いたくなったとき外部から呼び出せなくなる」とか馬鹿が言いそうだが無視しろ。

497 :デフォルトの名無しさん:04/12/19 14:07:34
>「後で使いたくなったとき外部から呼び出せなくなる」とか馬鹿が言いそうだが
そんな馬鹿見たことねーよ
お前がそう最初勘違いしてただけだろ

498 :494:04/12/19 14:09:55
>>497
上でとんだ恥かいてる罵倒厨か。おつかれ。

499 :デフォルトの名無しさん:04/12/19 14:19:55
なんか知人のプログラム見たりしたらあまり使われてなかったから何かあるんじゃないかと気になってたんだ。
うん、ありがとうオマイラ ヾ(・ω・*)

500 :デフォルトの名無しさん:04/12/19 14:42:18
> ファイル内でしか使わない関数は全部static付けてるんですけど、
> コレって何かデメリットあります?

ない。積極的につけろ。

せいぜい、処理系によっては、リンク後のmapファイルに関数名がでてこないただの
uniqueな番号になってしまうものもある。程度。(たがいはファイル名と関数名をつないで
数字をつけたもの程度になるだけだけど)

501 :デフォルトの名無しさん:04/12/19 14:44:24
> ここでも読んでなぼくちゃん
> http://www.st.rim.or.jp/〜phinloda/cqa/cqa7.html

とりあえずそのURLだしておけばにげられると思ったぼけか ;-)

だが

> *b++のような場合は先にbが増えていることもありうるが、

が明らかなぼけなのは、そのペイジ見ても同様。

502 :デフォルトの名無しさん:04/12/19 14:47:13
>>501
またえらく遅いレスだな。必死になって調べてましたか?
では、説明してもらおうかね。

503 :デフォルトの名無しさん:04/12/19 14:49:27
> またえらく遅いレスだな。

まってたのかー
えらく必死だね ;-)

504 :デフォルトの名無しさん:04/12/19 14:50:09
また伝説を作るのかい。

505 :デフォルトの名無しさん:04/12/19 14:50:36
>>503
いや、そんな返しいらんからさ、早く説明してごらん、ぼくちゃん。

506 :デフォルトの名無しさん:04/12/19 14:50:56
あ、わかった! きっと 502 は

> *b++のような場合は先にbが増えていることもありうるが、

なんていう知ったかぶりをしてしまった張本人で、それをごまかそうと必死なのか!
なるほど。

507 :デフォルトの名無しさん:04/12/19 14:52:29

while(1)
printf("ぬるぽ");


508 :デフォルトの名無しさん:04/12/19 14:52:43
>>504
なに?こいつ、前もこんなことしてんのか?
かまうだけ無意味?

>>506
お前からはまともなレスは一切来ないな。
それで会社では「こんな終わってるコード書くなよな〜」なんて後輩いびってるわけ。
屑ですね。ぷ。

509 :デフォルトの名無しさん:04/12/19 14:52:48
じゃあ、答えかかないほうが、長くひっぱれておもしろそうだな ;-)

というわけで、ほかのひとも答え(彼のボケを確実に指摘してしまうような)を
かかないでください。
ご協力おねがいします。

510 :デフォルトの名無しさん:04/12/19 14:53:13
ということにしたいのデスウォンドンペリンカーン

511 :デフォルトの名無しさん:04/12/19 14:53:30
>>507
lintでエラーでるよ。
for (;;) にしろ。

512 :デフォルトの名無しさん:04/12/19 14:54:16
いくらごまかしても、君の特徴はくっきりはっきりぴっかぴか。

513 :デフォルトの名無しさん:04/12/19 14:54:45
日下部圭子のマンコに挿入

514 :デフォルトの名無しさん:04/12/19 14:55:12
なんでwhile(1)だめなん?
定数使ってるから?

515 :デフォルトの名無しさん:04/12/19 14:55:23
>>513
いや、日下部ならもうちょっとマシなこと言うぞ。

516 :デフォルトの名無しさん:04/12/19 14:56:27
ふふ。

> *b++のような場合は先にbが増えていることもありうるが、

これで何時間ひっぱれるかな ;-)
がんばれば20時間ぐらいひきずりまわしてあそべるかな ;)
1週間は無理か。

しったかぶりをしてしまって、必死になってしまっている厨が、
ひーひーいって、脈拍があがっている状態を長く保たせたほうがおもしろいよね。
で、
かれが「ふう、これでごまかしきれた」と思ったころに、また
「 *b++のような場合は先にbが増えていることもありうるが、」と
ひとこと書くだけでいいのです。
ごきょうりょくおねがいします ;-)

(そうすれば、また必死になってあばれるでしょうから^^)

517 :デフォルトの名無しさん:04/12/19 14:57:08
なるほど今週のお題か > 『 *b++のような場合は先にbが増えていることもありうるが』

518 :デフォルトの名無しさん:04/12/19 14:57:27
こわがりスキー

519 :デフォルトの名無しさん:04/12/19 14:57:33
さすがに1週間はむりだろ? 「本日の」ぐらいでは?

520 :デフォルトの名無しさん:04/12/19 14:58:03
ものすごくわかりやすい自作自演だなw

521 :デフォルトの名無しさん:04/12/19 14:59:07
彼専用のIDが表示されているかのような自作自演

522 :デフォルトの名無しさん:04/12/19 14:59:14
ふえているコンパイラーを10個あげろ?

もしくはその挙動が不定や未定義であるという記述を規格にみつけろ?

いまごろひっしこいて規格をしらべてるのかな。
あ、標準規格とか読むぐらいのまともなやつならそんなまぬけなこと言わないか。
せいぜいgoogleしまくってる程度だろうなあ。(でもぜったいにみつからないだろうが。
増えているような場合は)

523 :デフォルトの名無しさん:04/12/19 14:59:31
で、10種類は?

524 :デフォルトの名無しさん:04/12/19 15:00:07
> いや、日下部ならもうちょっとマシなこと言うぞ。

かれはいまヨーロッパ旅行中のはず。
fjに書いてあった。

525 :デフォルトの名無しさん:04/12/19 15:00:27

「おいすー^^」

「あ、キチたん インしたお!」

「よーし、今週も1スレ潰すぞー^^」

「おー^^」

526 :デフォルトの名無しさん:04/12/19 15:00:58
>>524
fjがまだ機能していることに驚いた

527 :デフォルトの名無しさん:04/12/19 15:01:06
その前は何だったっけ・・・・・・多すぎて思いだせん

528 :デフォルトの名無しさん:04/12/19 15:03:04
まあ、あばれている彼の目的は、
自分が
「 *b++のような場合は先にbが増えていることもありうるが、」
などとまぬけなしったかぶりをしてしまったことを
葬り去るためなんだろうけど。

どうせ匿名なのになんで、そんなに必死になるのだろうか?

529 :デフォルトの名無しさん:04/12/19 15:03:35
>>528
一人でやっててくれ(^^

530 :450:04/12/19 15:05:50
*b++のような場合は先にbが増えている、ということはありませんでした。
手元のgcc、bccで試しましたがいずれも結果は私の考えが間違っていた
ことを示しておりました。もう二度とあのようないい加減なことは書きませんので
ご勘弁ください。

531 :デフォルトの名無しさん:04/12/19 15:06:33
>>528
こいつは先に増えていることは在りえないとさっさと証明すれば終わることなのに、
何をこんなに粘着しつづけているのか。

532 :デフォルトの名無しさん:04/12/19 15:07:18
>>531
暇でしょうがないだけだろ

533 :デフォルトの名無しさん:04/12/19 15:07:57
終わっちゃった

534 :デフォルトの名無しさん:04/12/19 15:08:28
数学ができないプログラマは何を証明すればいいかわからない

535 :デフォルトの名無しさん:04/12/19 15:09:57
>>530
ついに証言を偽造する始末。
厨必死すぎw

536 :デフォルトの名無しさん:04/12/19 15:10:46
>>535
はいはい、もう終わったからねー、粘着しないで下さいゴン中山きんにくんせいや

537 :デフォルトの名無しさん:04/12/19 15:20:32
>>530
さっさとそう認めてあやまればいいのにね。
なんであんなに暴れるんだろう。

538 :デフォルトの名無しさん:04/12/19 15:21:16
え、今日のおやつ、こんだけ?

539 :デフォルトの名無しさん:04/12/19 15:21:25
> こいつは先に増えていることは在りえないとさっさと証明すれば終わる

あのー...証明もなにもCの基礎の基礎だとおもうぞ。
i = 1 + 2; で i に3が入っていることを証明するよりむずかしい。

540 :デフォルトの名無しさん:04/12/19 15:24:37
え? クサカベせんせいの真似をしているつもりだったわけ?

わたしは直接習ったことあるけど。
そんなに ぼけ ぼけ 言っているのはきいたことないぞ。

それとも、たまたまわたしのクラスが優秀だっただけ?


541 :デフォルトの名無しさん:04/12/19 15:25:59
>>539
ANSI-C規格が証明であり基礎だろう

542 :デフォルトの名無しさん:04/12/19 15:27:18
いまどきANSI-Cなんていういいかたするやつがぼけ

543 :デフォルトの名無しさん:04/12/19 15:27:53
ANSIみればbが先に増えるわけねーことは一目瞭然。
っていうかANSI以前からそうだし。

544 :デフォルトの名無しさん:04/12/19 15:28:35
っていうか、そんな「基礎中の基礎」をANSI規格がうんぬんいわなきゃいけないから
厨っていわれるんだろうに。

545 :デフォルトの名無しさん:04/12/19 15:30:35
日曜だねぇ。
中高生はもう冬休みなのか?

546 :デフォルトの名無しさん:04/12/19 15:31:22
中高生以下ののうみそしかないやつがなんかいってるー

547 :デフォルトの名無しさん:04/12/19 15:33:56
自作自演て難しいんだな。

548 :デフォルトの名無しさん:04/12/19 15:34:12
*b++ 程度の基本中の基本でまちがえたのが、よほどくやしかったんだね。

549 :デフォルトの名無しさん:04/12/19 15:34:49
っていうか、そこわかってないで「C使ってる」とはいえないもんな。

550 :デフォルトの名無しさん:04/12/19 15:35:43
きょうは「*b++のような場合は先にbが増えている」をつまみに
酒が1升ぐらい飲めそうだな。

551 :デフォルトの名無しさん:04/12/19 15:36:31
厠必死スキー

552 :デフォルトの名無しさん:04/12/19 15:37:20
おお、絵に描いたような自作自演。

553 :デフォルトの名無しさん:04/12/19 15:39:12
どれとどれがおなじ? > 552


554 :デフォルトの名無しさん:04/12/19 15:39:57
それにしてもここレベル低いなあ。

555 :デフォルトの名無しさん:04/12/19 15:40:20
見るまでもわかるだろw

556 :デフォルトの名無しさん:04/12/19 15:40:24
printfの戻り値は見たほうがいいのでしょうか?

557 :デフォルトの名無しさん:04/12/19 15:42:00
>>556
黙れ

558 :デフォルトの名無しさん:04/12/19 15:44:20
>>555
イミフ

559 :デフォルトの名無しさん:04/12/19 15:45:17
>>558
直す前に押し

560 :デフォルトの名無しさん:04/12/19 15:48:16
>>559
よく有

561 :デフォルトの名無しさん:04/12/19 16:02:56
で、今日あおっていたのは、void氏の弟子なんですか?

562 :デフォルトの名無しさん:04/12/19 16:07:53
日曜日だってのに、えらいスレ進行速いなぁおい。
引きこもってないで遊びに行きなさい。

…ん?おぢさんは仕事中だ。orz

563 :デフォルトの名無しさん:04/12/19 16:16:41
562もかなりのこわがりすぎーだな。

564 :478:04/12/19 18:23:58
>>479
>>482
レスありがとうございます。
乏しい知恵を絞ってやっと思いついた方法なんですが、ひょっとして
もっといい方法があって、自分だけ回りくどいことをしてるのかな、と
思ってました。
方法自体はそれほどとんでもなくおバカなわけではないんですね、
安心しました。

565 :デフォルトの名無しさん:04/12/19 18:46:43
>>564
浮動小数点数に対して、切り上げとか切り捨てとかを
真剣に考えようとする事そのものが、かなりおバカだとは思うけどな。


566 :デフォルトの名無しさん:04/12/19 22:06:51
>>565
煽るだけか?

567 :デフォルトの名無しさん:04/12/19 22:08:58
>>566
そうだが、何か?

568 :566:04/12/19 22:15:06
いや、なんでもない。
忘れてくれ。

569 :デフォルトの名無しさん:04/12/20 00:34:20
「b++」という式のを評価した場合、増加前の値だと決まっている。
*b++のような場合は先にbが増えていることもありうるが

プ


570 :デフォルトの名無しさん:04/12/20 00:36:45
入力バッファをクリアする際にfflush(stdin)を使うのは間違っていると、
ある本に書いてありましたが、入力バッファを消すにはどのようにしたら
良いのでしょうか。


571 :デフォルトの名無しさん:04/12/20 00:38:15
読み捨て

572 :デフォルトの名無しさん:04/12/20 00:44:39
clrstdin();

573 :570:04/12/20 00:50:54
>>571 >>572 

\nになるまで読み捨てるか、clrstdin();を使用するのですね。
これからはそのようにします。ありがとうございます。

574 :570:04/12/20 01:03:22
>>572 今試してみたのですがclrstdin();がコンパイルできませんでした。

stdio.hにないのかと思い辞書で調べましたが、clrstdin()はありませんでした。
そこでgoogleで「clrstdin」で検索をかけたのですが1件もヒットしません。

どのような関数なのか教えてくださいませんか?お願いします。

575 :デフォルトの名無しさん:04/12/20 01:09:40
>>574
clrstdinは標準ライブラリ関数には含まれていないから諦めろ。

576 :570:04/12/20 01:13:19
>>575 はい、諦めます。教えて下さりありがとうございました。

577 :デフォルトの名無しさん:04/12/20 02:12:04
>>567
失せろ。

578 :デフォルトの名無しさん:04/12/20 06:57:39
> 「*b++のような場合は先にbが増えていることもありうるが」

ふふ

579 :デフォルトの名無しさん:04/12/20 09:53:52
570じゃないけど、rewind(stdin)はどないな感じなんですか?

580 :デフォルトの名無しさん:04/12/20 10:49:39
>579
>571-576みたいな感じ。

581 :デフォルトの名無しさん:04/12/20 14:26:06
>>578
kita-

582 :385:04/12/21 00:17:56
質問です

関数の外に書いた変数宣言は、どのタイミングで領域を確保するのでしょうか?

583 :582:04/12/21 00:18:47
名前消すの忘れてた ○| ̄|_

584 :デフォルトの名無しさん:04/12/21 00:22:33
>>582
最初

585 :582:04/12/21 00:23:17
というと、exeを実行した時点ででしょうか?

586 :デフォルトの名無しさん:04/12/21 00:25:31
簡単なソースでアセンブリソース見て見れ。

587 :582:04/12/21 00:34:07
ごめんなさい、アセンブラわかんないです
デバッガなどで調べてみます

ありがとうございました

588 :デフォルトの名無しさん:04/12/21 01:40:22
「b++」という式のを評価した場合、増加前の値だと決まっている。
*b++のような場合は先にbが増えていることもありうるが


589 :デフォルトの名無しさん:04/12/21 01:50:39
>>588
もうそのネタはいいから。

590 :デフォルトの名無しさん:04/12/21 04:51:25
で、10種類は?

591 :デフォルトの名無しさん:04/12/21 06:31:28
すみませんが教えて下さい。
下の様なプログラムを組んだところ、「関数は値を返すべき」という忠告が出ました。
どこか間違ってますでしょうか?分かる方、ご教授の程お願いします。

#include <stdio.h>

int beki(int a,int b);

main(){
int x,y,z;

x=2;
y=3;

z=beki(x,y);

printf("%dの%d乗は%dです。",x,y,z);

}

int beki(int a,int b){
int zz,i;
zz=1;

for(i=0;i<b;i++){

zz=zz*a;

}
return zz;
}

592 :デフォルトの名無しさん:04/12/21 06:39:34
main

593 :デフォルトの名無しさん:04/12/21 06:43:56
>>591
>どこか間違ってますでしょうか?
あんたがプログラミングをしようと思うこと。

594 :デフォルトの名無しさん:04/12/21 06:48:11
生き方

595 :デフォルトの名無しさん:04/12/21 07:13:22
分かりました。ありがとうございました。

596 :デフォルトの名無しさん:04/12/21 07:33:28
>>591
マジレスすると、main()の戻り値が省略されているので、intを返すとみなされている。
main()の最後に return 0; でも付ければ警告は消えるだろ。

597 :デフォルトの名無しさん:04/12/21 09:55:36
時間を使わないで乱数を使いたい場合はどうしたらよいでしょうか?

598 :デフォルトの名無しさん:04/12/21 09:57:45
rand()の種のことだろうか・・・

599 :デフォルトの名無しさん:04/12/21 10:02:48
>>598
そうです
種をまきたいんですが
time.hが使えないんですよ

600 :デフォルトの名無しさん:04/12/21 11:26:46
>>599
何らかの方法で毎回変わる値を作ればいい。
起動回数でも何でもいい。

601 :デフォルトの名無しさん:04/12/21 12:36:14
起動回数なんてどうやって汁ですか?
ぐぐってもわかりません

602 :デフォルトの名無しさん:04/12/21 12:44:52
>>601
ファイルに作るなりフラッシュに書き込むなりすればいい。
詳細は環境依存。

他にも、状況によって変化していく様な、
どこかのメモリ領域の内容を種にするという方法もある。

とにかく、藻前自身が何らかの方法で毎回変化する値を実装すればよいのだ。

603 :デフォルトの名無しさん:04/12/21 13:12:26
マイクから周囲の雑音を取り込んでSeedにする!(・∀・)

604 :デフォルトの名無しさん:04/12/21 14:27:21
srand((unsigned)argv[0]);とかいいんじゃない?
他にも適当なローカル変数のアドレスを種にするのもまたよろし。

605 :デフォルトの名無しさん:04/12/21 15:01:10
void initialize_random_number()
{
int seed;
printf("乱数の系列を初期化します。\n");
printf("乱数のシード(任意の正の整数):");
scanf("%d",&seed);
if(seed<1)seed=1;
srand(seed);
}

の中で乱数のシードという意味がわかりません。

606 :デフォルトの名無しさん:04/12/21 15:15:08
>>605
コンタクトレンズ

607 :デフォルトの名無しさん:04/12/21 15:37:07
うっ! Delphi

608 :デフォルトの名無しさん:04/12/21 17:20:02
ふつうプロセスIDだろ > たね

609 :デフォルトの名無しさん:04/12/21 18:17:32
いやらしい

610 :デフォルトの名無しさん:04/12/21 19:14:39
> return 0; でも付ければ

ふつうEXIT_SUCCESS

611 :デフォルトの名無しさん:04/12/21 19:23:05
>>610
>ふつうEXIT_SUCCESS

それ、素人。


612 :デフォルトの名無しさん:04/12/21 19:31:30
いいえ。プロはみんなそれ

613 :デフォルトの名無しさん:04/12/21 19:31:53
(しかも、うちのOSは正常終了が0じゃない)

614 :デフォルトの名無しさん:04/12/21 19:38:30
> (しかも、うちのOSは正常終了が0じゃない)
誰も聞いてないです :-)

615 :デフォルトの名無しさん:04/12/21 19:55:16
>>599
大抵、/dev/randomみたいな乱数作ってくれる仕掛けがあるから、それで初期化しろ。

616 :デフォルトの名無しさん:04/12/21 19:56:39
>>612
nmitaみたいに害毒を垂れ流すのはそろそろよしてくれんか。

617 :デフォルトの名無しさん:04/12/21 20:28:52
>>614
別に構わんが

618 :デフォルトの名無しさん:04/12/21 22:11:20
データをy=exp(bx)で近似するときのa,bを求めるプログラムです。
x[i],y[i]にはデータが入っています。

bの値がかなり大きく出てきてしまいます。

x1 = x2 = y1 = xy = 0;
for(i=0;i<n;i++)
{
x1 += x[i];
x2 += x[i]*x[i];
y1 += log(y[i]);
xy += x*log(y[i]);
}
b = (n*xy-x1*y1)/(n*x2-x1*x1);
a = exp((y1-b*x1)/n);


619 :デフォルトの名無しさん:04/12/21 22:15:00
xy += x*log(y[i]);
このへん?

620 :618:04/12/21 22:22:43
>>619
すいません、どういうふうに変えればよいのでしょうか?
正直、どこが間違っているのかわからないんですが。

621 :デフォルトの名無しさん:04/12/21 22:24:34
どうでもいいけどaってなんや

622 :618:04/12/21 22:26:24
>>621
すいません。
「y=a*exp(bx)で近似する。」の間違いでした。

623 :デフォルトの名無しさん:04/12/22 00:59:28
回答期待age

624 :デフォルトの名無しさん:04/12/22 01:32:42
データの指数関数への当てはめを直線への当てはめに還元するやり方ね、
俺もやったことあるんだけど、かなりデータ数が多いか、最初からまとまった
データが得られていないとうまくいかない。そのときは仕方がないから
MathematicaのFindfit使っちゃった。

625 :デフォルトの名無しさん:04/12/22 06:58:42
xy += x[i]*log(y[i]);
こうかな?

626 :デフォルトの名無しさん:04/12/22 08:59:18
おっぱいが大きい人が好みなのですが、どうすればよいでしょうか?

627 :デフォルトの名無しさん:04/12/22 11:48:15
char buffer[32];
strncpy(buffer, "AAA", 3);
strncat(buffer, "               ", 25);
strncpy(buffer, "BBB", 3);

スペースを25個追加する時に、いちいち"    "と
記述しないといけないんでしょうか?
うまい方法があったら教えて下さい。

628 :デフォルトの名無しさん:04/12/22 11:48:30
>>626
頭悪スレに逝ってください。

629 :デフォルトの名無しさん:04/12/22 11:53:23
>>627
char buffer[32];
char *p = buffer;
int i;
for(i=0;i<3;i++) *p++='A';
for(i=0;i<25;i++) *p++=' ';
for(i=0;i<3;i++) *p++='B';
*p = '\0';

630 :デフォルトの名無しさん:04/12/22 12:20:54
char buffer[32]="AAA               BBB";

631 :デフォルトの名無しさん:04/12/22 12:25:54
>>627
よくみたら最後がstrncpyじゃん
ひっかけ?
char buffer[32]="BBB";

632 :627:04/12/22 13:08:39
strncat(buffer, "BBB", 3);
が正しかったです。ひっかけじゃないです。

>>629さんを参考にコードを作ってみました。
ありがとうございました。

char buffer[32];
getSpace(31, (char *)buffer);

void getSpace(int icount, char *p)
{
  for(int i=0;i<icount;i++)*p++=' ';
  *p++= 0;
  return;
}

633 :デフォルトの名無しさん:04/12/22 15:15:17
>>627
char buffer[32], *p = buffer;
strncpy(p, "AAA", 3);
memset(p += 3, ' ', 25);
strncpy(p += 25, "BBB", 3);
*(p += 3) = '\0';

634 :デフォルトの名無しさん:04/12/22 15:19:35
sprintf(p, "AAA%25sBBB", "");

635 :デフォルトの名無しさん:04/12/22 15:44:01
●クルマが自転車にはねられた!9台目
http://hobby7.2ch.net/test/read.cgi/car/1103695847/

636 :デフォルトの名無しさん:04/12/22 16:50:41
C言語のacceptのエラー処理で、

while (1){
 struct sockaddr_in client_sin;

 memset((void *)&client_sin, 0, sizeof(client_sin));
 len = sizeof(client_sin);
 accepted_socket = accept(listening_socket, (struct sockaddr *)&client_sin, &len);

 if (accepted_socket == -1) {
  if (errno != EINTR && errno != ECONNABORTED) {
   perror("accept");
   exit(1);
  }
  continue;
 }

 break;
}

と、書いてみたのですが、
acceptの正しいエラー処理がわかりません。

どのような処理を施せばよいでしょうか。

637 :デフォルトの名無しさん:04/12/22 17:18:26
>>636
acceptはC標準にはありません。以上。

638 :デフォルトの名無しさん:04/12/22 17:27:48
まぁ、ネットワークプログラミングスレ行きかな。
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
ネットワークプログラミング相談室 Port12
http://pc5.2ch.net/test/read.cgi/tech/1102427855/

639 :デフォルトの名無しさん:04/12/22 19:02:34
すいません
InvalidateRectで全画面描画すると
凄いチカチカするんですが
これはもうどうしようもないんでしょうか?

640 :デフォルトの名無しさん:04/12/22 19:05:38
>>639
>>1を注目して読んでみよう。

641 :デフォルトの名無しさん:04/12/22 19:18:16
>>639
DoubleBufferは?

642 :デフォルトの名無しさん:04/12/22 19:18:55
>>639
InvalidateRectってそういうことするためのものだ。
範囲が狭ければクリップ範囲を指定すれば?

643 :デフォルトの名無しさん:04/12/22 21:08:54
#include <stdio.h>

char my_tbl[10] = {
0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x0a,
} ;

int main( void ) {

char* data ;
data = my_tbl ;
printf( "%d\n" ,sizeof(data) ); //★
return 0 ;

}

★の所で、10というサイズを得たいのですが、なにか良い方法は無いでしょうか?
ポインタが指し示す先のmy_tblのサイズを得たいのです・・・
無理でしょうか?

644 :デフォルトの名無しさん:04/12/22 21:12:03
>>643
不可能

645 :デフォルトの名無しさん:04/12/22 21:12:15
無理

646 :デフォルトの名無しさん:04/12/22 21:28:57
マジっすか

647 :デフォルトの名無しさん:04/12/22 21:34:55
うん

648 :デフォルトの名無しさん:04/12/22 21:42:34
領域越えてるよ
文字列は最後に\0が入るから
それだと11バイトを入れてる

649 :デフォルトの名無しさん:04/12/22 21:44:41
>>648
釣れますか?

650 :デフォルトの名無しさん:04/12/22 22:00:30
aからbまでの最短距離を求めるプログラムを作ろうとしています。

  ●→●→● b
  ↑/↑/↑
  ●→●→●
  ↑/↑/↑
 a ●→●→●

条件が

 @図で見ると●が等間隔に見えるが、実際は等間隔ではない。
 A/は斜め上のみ移動可能とする。
 B進める方向は、右、上、斜め上の3方向のみ。

です。参考になるプログラムを探しているのですが、巡回セールスマン問題
というプログラムを見つけたのですが、やりたい事と少し違う?感じがします。
このプログラムを解くのに参考になるWebページを知っている方、
又は、良い検索キーワードを知っている方が居ましたら教えてください。
よろしくお願いします。

651 :デフォルトの名無しさん:04/12/22 22:02:23
>>650
・ダイクストラのアルゴリズム
・隣接リスト表現(adjacency matrix)

652 :デフォルトの名無しさん:04/12/22 22:04:00
>>650
ちなみに、「巡回セールスマン問題」とは、すべての点を周り尽くす最短距離とその経路を
求める問題で、NP問題、すなわち、全数検査をしないと求まらない問題に分類されている。

653 :デフォルトの名無しさん:04/12/22 22:04:28
>>650
男なら総当りだ。

654 :デフォルトの名無しさん:04/12/22 22:05:09
あ、ごめん、adjacency matrixは正しい日本語訳は「隣接行列」だったわ。
どちらにしろ、それで解けるから。

655 :デフォルトの名無しさん:04/12/22 22:16:40
>>650
●での最短距離と直前の●を求めて行けば解決


656 :デフォルトの名無しさん:04/12/22 22:17:37
>>650
どうぞ。
http://www.me.sophia.ac.jp/or/lab/ishizuka/OC/spath_00.html

657 :650:04/12/22 22:19:13
わたしは女です。o(`ω´*)o
勝手に変な私を想像しないでください。

658 :デフォルトの名無しさん:04/12/22 22:19:52
あーそうだ。ついでに
「有向グラフ」もぐぐっとけ。要するに、あれだ、aからbとbからaの「重み」が違うって事。
一方通行を隣接表現してしまうと一方通行の表現が面倒になるので、通常は
逆方向を、最長経路よりも長いであろう値(99999999とか)にする。

659 :デフォルトの名無しさん:04/12/22 22:20:04
キモ

660 :653:04/12/22 22:20:26
>>657
おっと失礼、女性でしたか。
では改めて変な想像させてもらうよ。

661 :650:04/12/22 22:31:33
おお、もうレスが。

>>651さん
>>653さん
>>655さん

ありがとうございます。さっそく調べます。
>>657さん。想像に釘さして申し訳ありませんけど、自分九州男児ですから。(つД`)スマソ

662 : ◆bGJcuGhzXI :04/12/22 22:41:51
cvd

663 :デフォルトの名無しさん:04/12/22 23:29:26
>>650
最短距離が見付からなくとも死にはしない。

664 :デフォルトの名無しさん:04/12/22 23:32:26
>>663
うっせハゲ

665 :デフォルトの名無しさん:04/12/22 23:35:36
今ふと思ったんですが、

#include "hoge1.h"
#include "hoge2.h"

とかってなってたら、必ず hoge2.h が hoge1.h の後に取り込まれるんですか?
なんか優先順位的なものがあるような気がしました。

666 :デフォルトの名無しさん:04/12/22 23:36:12
ありません

667 :デフォルトの名無しさん:04/12/22 23:45:32
>>665
includeというものは
その位置に、そのファイルの内容を入れるという意味だ
優先もクソも無い

668 :デフォルトの名無しさん:04/12/22 23:55:30
hoge1.h の内容が
#define foo 1
int fuga;
だとして

int func(void)
{
#include "hoge1.h"
fuga = foo;
return fuga;
}



int func(void)
{
#define foo 1
int fuga;
fuga = foo;
return fuga;
}

と同じです

669 :デフォルトの名無しさん:04/12/22 23:58:59
頼むからincludeする順番を指定されるようなヘッダファイルを書かないでくれよ。

670 :デフォルトの名無しさん:04/12/23 00:01:18
インクルードガード

671 :デフォルトの名無しさん:04/12/23 00:06:48
double pow(double,double)べき乗関数を使おうと考えているのですが、
調べると
>数学関数によって定義域エラーが検出されると、
>errnoにEDOMの値が設定される。
>値域エラーが検出された場合は、
>errnoにERANGEの値が設定される。
>このとき数学関数はHUGE_VALの値を返す。(errno.h参照)
http://www.geocities.co.jp/SiliconValley-Bay/5543/mahou/c/math.html

がありました。
質問;
定義域エラーは関数に入る前に制限をすればいいと思いますが、
範囲エラー(値域エラー)について判断するプログラムをどうかけばいいのか
をご教授ください。よろしくお願いします。





672 :デフォルトの名無しさん:04/12/23 00:09:23
>>671
if(errno==ERANGE)

673 :デフォルトの名無しさん:04/12/23 00:10:24
>>652
惜しい!「全数検査をしないと求まらない(と思われている)問題」だ
そんなこと、どうでもいいんですけどね

674 :デフォルトの名無しさん:04/12/23 00:13:58
>>671
関数にエラーかどうか判断してもらえばいいじゃん。
それが嫌なら、適当な値で線引きしとけ。

675 :668:04/12/23 00:27:27
もし、書いちゃったとしたら、優先順位を変更するような
命令はあるんですか?

676 :デフォルトの名無しさん:04/12/23 00:31:01
ない。

677 :デフォルトの名無しさん:04/12/23 00:42:31
何をそんなに気にしているのか分からん。

678 :デフォルトの名無しさん:04/12/23 00:54:11
インクルードの話が出たので・・・
例えば hoge.h で宣言される関数が stdio.h を使用する場合、
hoge.hの中でstdio.hをインクルードするべきですか?
それともhoge.c、およびhoge.hで宣言される関数を使うソースで
インクルードファイルを羅列するべきですか?
(すべてのヘッダに多重インクルードガードがされてる前提。)

679 :デフォルトの名無しさん:04/12/23 00:56:13
>>678
FILEとかを引数に持つのなら stdio.hをincludeするしかないだろ。

680 :デフォルトの名無しさん:04/12/23 00:58:23
>>678
ん?たとえばhoge.hにvoid func(void);ってプロトタイプが宣言されていて、
そのfunc()(定義はfunc.cにあるとする)内部でprintfやら何やら使って
いたとしても、

> hoge.hの中でstdio.hをインクルードするべきですか?
> それともhoge.c、およびhoge.hで宣言される関数を使うソースで
> インクルードファイルを羅列するべきですか?

↑どちらも必要ないぞ。そのへんはわかってる?

681 :デフォルトの名無しさん:04/12/23 01:00:15
ヘッダは全てそれ単体でincludeできるようにするのがアタリマエだろ。
「先にxxx.hをincludeしておいてください」とかやられたらかなわん。

682 :680:04/12/23 01:07:52
訂正
×:定義はfunc.cにあるとする
〇:定義はhoge.cにあるとする

683 :デフォルトの名無しさん:04/12/23 04:10:22
別に設計思想て言うか好きで良いんじゃね?

個人的には単体includeで作るが
会社のは単体ヘッダだよ。
つまり、ヘッダにヘッダをincludeするなって意味だね。
必要な定義等がある場合、まさしく先にincludeが必要ってなる。

理由は他環境に移植や、ライブラリの保守や可読性とか…
例えば
多重インクルードガードがされていて、
目的のヘッダが何処で実際に展開されているのか分り難いとかを防ぐとか…
include先のヘッダに、更にincludeがしてあって、
そヘッダもincludeがしてあって…と延々となっていて
それが、多重インクルードガードで実際にどうなってるか分らないとかね。


684 :デフォルトの名無しさん:04/12/23 07:58:06
プリプロセッサで処理すればいいだけでは?

685 :デフォルトの名無しさん:04/12/23 08:41:55
>>678
ヘッダ内で、#ifdef使って、再定義を回避する。

686 :デフォルトの名無しさん:04/12/23 08:45:18
>>685については、
http://www.wakhok.ac.jp/~kanayama/C/03/node112.html

687 :デフォルトの名無しさん:04/12/23 09:39:04
>>683
アホ会社だ…

688 :デフォルトの名無しさん:04/12/23 09:56:25
#pragma once

689 :デフォルトの名無しさん:04/12/23 10:24:39
>>688
C99以降はよく知らんが、そんなの仕様にあったっけ?

690 :デフォルトの名無しさん:04/12/23 10:32:01
>>683
// hoge.h
struct hoge { };

// hage.h
struct hoge* hage();

// hige.h
void hige(struct hoge*);

// hogo.h
#define hogo() hige(hage())

// main.c
#include "hogo.h"
main()
{
hogo(); // pass, but undefined behavior
}

よくあるケースだが、hogo マクロを使うだけな場面で
hogo マクロの実装詳細にいちいち立ち入らないと
必要なヘッダや引用すべき順序がわからないのは
巨大で複雑なソースとの付き合い方として苦しくねいか?

別にマクロを使ってるからどうのってわけじゃなく、
#include "hige.h"
main()
{
hige(); // error
}
でも同じことだよな

691 :デフォルトの名無しさん:04/12/23 15:12:23
> FILEとかを引数に持つのなら stdio.hをincludeするしかないだろ。

こいつぼけすぎ。
べつに先にstdio.hをインクルードしtればいいじゃん。

692 :デフォルトの名無しさん:04/12/23 15:14:07
> ヘッダ内で、#ifdef使って、再定義を回避する。

こいつもおおぼけ、それが678の行っている「多重インクルードガード」のことだろうが ぼけ

693 :デフォルトの名無しさん:04/12/23 15:15:04
FILEを引数に持つのなら止むを得んが、
普通FILE*なので何もインクルードする必要なし。

694 :デフォルトの名無しさん:04/12/23 15:15:37
> hogo マクロを使うだけな場面で
> hogo マクロの実装詳細にいちいち立ち入らないと
> 必要なヘッダや引用すべき順序がわからないのは

いや、そんな実装がそもそもまぬけ


695 :デフォルトの名無しさん:04/12/23 15:16:46
> 普通FILE*なので何もインクルードする必要なし。

こいつぼけ。たとえポインターでもincludeしてないときはエラーだ。

696 :デフォルトの名無しさん:04/12/23 15:20:13
C言語なら俺俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090652323/
すいません、間違えてうえのスレに投稿してしまいました。こちらで質問にお答えいただけないでしょうか?
689からの投稿です

697 :デフォルトの名無しさん:04/12/23 15:36:28
>>696
向こうのスレにレスがついているようだが

698 :デフォルトの名無しさん:04/12/23 15:43:06
C言で、ある文字列を同じ座標に繰り返し出力させたいのですが
どうしたらいいでしょうか?教えてください
エスケープシーケンスはOSの関係上使えませんでした

699 :デフォルトの名無しさん:04/12/23 15:44:05
>>694
それはあんたの実装とやらを聞いてからでないと
同意も反駁もしようがないな

700 :デフォルトの名無しさん:04/12/23 15:44:55
うちはまともな実装なので、必要なヘッダーふぁいるは1つかせいぜい2つだな

701 :デフォルトの名無しさん:04/12/23 16:04:18

                |
                |
                |
                |
     /V\        ,J >>700
    /◎;;;,;,,,,ヽ
 _ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
  ヾソ:::::::::::::::::.:ノ
   ` ー U'"U'



702 :デフォルトの名無しさん:04/12/23 16:24:41
>>698
環境を言わないとどうしようもない

703 :デフォルトの名無しさん:04/12/23 16:26:37
環境を言われても誘導しかできないな、このスレでは

704 :デフォルトの名無しさん:04/12/23 16:39:41
>>699
三田典玄みたいな害毒を垂れ流す奴に餌をやるのはよしてくれ。

705 :デフォルトの名無しさん:04/12/23 16:45:03
すいません、教えてください。

ファイルから16bitのPCMデータをfreadで2byteずつ読んできて、
上位ビットを bit-high(char), 下位ビットを bit-low (char)に
入れました。これを10進の -32768 〜 32767 に戻して、
すこしこねまわして、最後に再び byteに戻してファイルに
書きたいんですけどうまくいきません。

実はFortranでの数値計算が専門で、Cの知識は厨房レベル
です。ですが・・・ とうしてもなんとかしたいので教えてください。

よろしくお願いします。

706 :デフォルトの名無しさん:04/12/23 16:46:14
>>705
どううまくいかないのか分からないと(ry

707 :デフォルトの名無しさん:04/12/23 16:52:30
>>705 です。

long high-10d, low-10d, signal;
char bit-high, bit-low;
...

high-10d = (long)bit-high;
low-10d = (long)bit-low;
signal = high-10d * 256 + low-10d;
...

とかやって10進にしようかとやってみましたがダメダメでした。
FFTとか、GAとかは得意なんですが、Cはこんなあほレベルなんです。
ほんとすいません。


708 :デフォルトの名無しさん:04/12/23 16:52:42
> 上位ビットを bit-high(char), 下位ビットを bit-low (char)に
上位バイト・下位バイトっていいたいのか?

709 :デフォルトの名無しさん:04/12/23 16:53:49
> long high-10d, low-10d, signal;
> char bit-high, bit-low;

変数名がムチャ。


710 :デフォルトの名無しさん:04/12/23 16:54:17
そもそもCって変数名に「-」使えたっけ?
規格では[a-zA-Z_]だけだった気がするんだが

711 :デフォルトの名無しさん:04/12/23 16:54:41
>>707
なにがダメだったのかよくわからんが、
それだと文法エラーにならんか?

712 :デフォルトの名無しさん:04/12/23 16:54:47
かぶった orz
ついでに数字を入れ忘れた(´・ω・`)

[a-zA-Z_][a-zA-Z1-9_]か

713 :デフォルトの名無しさん:04/12/23 16:55:45
>>708

あ、そうです。間違えました。すみません。上位8bit, 下位8bitと考えても
いいですね。ちなみに、エンディアンとか、昨日覚えたぐらいのレベルです。
ポインタとか、構造体は知ってます。

あー ほんとにダメダメですね。

714 :デフォルトの名無しさん:04/12/23 16:56:54
文法エラーの件は。。。 実際には違う変数名を使っています。

715 :デフォルトの名無しさん:04/12/23 16:57:12
>実はFortranでの数値計算が専門
これも怪しいもんだな…

716 :デフォルトの名無しさん:04/12/23 16:58:04
とりあえず、charじゃなくて、unsigned charにしてみれ。

717 :デフォルトの名無しさん:04/12/23 16:58:33
>実はFortranでの数値計算が専門

一応、学位持ちです。論文も多数あります。

718 :デフォルトの名無しさん:04/12/23 16:59:49
> -32768 〜 32767 に戻して
あと、↑がしたんだったら、signalはshortの方がいいんじゃないの?

それ以外に、エンディアンだの符号拡張だのいろいろ問題がありそうだが、
何がしたいのかはっきりせんから、レスも適当だが。

719 :デフォルトの名無しさん:04/12/23 17:01:10
Cでは変数の中に入ってる数字が10進か16進かでの区別はないよ


720 :デフォルトの名無しさん:04/12/23 17:02:46
ファイルのフォーマットは?

721 :デフォルトの名無しさん:04/12/23 17:06:48
>>718
符号付きの整数を上下8bitずつに分解して処理するということが
そもそも何の意味があるのかさっぱり見当つかんのよな。

722 :デフォルトの名無しさん:04/12/23 17:08:16
>>705 です。ご迷惑をおかけします。

したいことは、WAVファイルの音楽データに、自作の演算(FFTなど)をかけて
エフェクト処理したいだけです。正直、10進数をプログラム上で演算する知識
しか持ち合わせていないので、2byteでファイルから読んできたデータを、
どうやって10進数にするか? それをどうやって2byteにもどしてファイルに
書き込む処理をするか? が知りたいのです。

fread, fwrite を使ってステレオ → モノラル変換するようなサンプルプログラム
を入手したので、データを読んで書く、というような操作は一応できています。
波形を弄くろうとしたら・・・ ダメダメというわけです。

複素数や特殊関数の演算はしょっちゅうでも、longだintだcharだのは、
Fortranの数値計算にはほとんど使わないので、専門以外のことは
このぐらいの知識しかないんですよ・・・ すいません。

>>720 ファイルのフォーマットは。。。 バイナリだろう、としかわかりません。





723 :デフォルトの名無しさん:04/12/23 17:08:20
8ビット2チャンネルじゃないのか?

724 :デフォルトの名無しさん:04/12/23 17:10:45
>>722
読み込めばそのまま10進で扱えますYO

int a = 0xff; // 16進で入れる
a += 10; // 10進で演算

エンディアンが違うなら上位下位の入れ替えが必要だけど

725 :デフォルトの名無しさん:04/12/23 17:15:09
そもそも16bitでfreadせずに、char単位で読み書きすればいいだけの話じゃないの?

726 :698:04/12/23 17:17:26
>>702
環境は、VC++6.0で
OSはXPです

おねがいします

727 :デフォルトの名無しさん:04/12/23 17:17:41
>>724
すいません、C言語のエンディアンコードって何処に載っているのでしょうか?
ちなみにWavに関する質問者とは別人です

728 :デフォルトの名無しさん:04/12/23 17:18:01
>>725

>そもそも16bitでfreadせずに、char単位で読み書きすればいいだけの話じゃないの?

いいえ、逆なんです。入手したサンプルソースが、1byte(char)単位で読むプログラム
だったんですよ。fread 使って 16bit (2byte)単位でで直接ファイルから読めるんですか?

 ※わたしはそれぐらいCは無知なんです・・・

だったら話は簡単なんですけど。

729 :デフォルトの名無しさん:04/12/23 17:18:51
こんな感じ?ファイルのフォーマットがわからんから、lowとhighの
読み込み順序を逆にしなければいかんかもしらんけど。

unsigned char low;
unsigned char high;
short signal;

fread(&low, 1, 1, fp);
fread(&high, 1, 1, fp);

signal = (short)(high << 8 | low);


730 :デフォルトの名無しさん:04/12/23 17:19:47
>>722
http://www.kk.iij4u.or.jp/~kondo/wave/

731 :デフォルトの名無しさん:04/12/23 17:20:23
> fread 使って 16bit (2byte)単位でで直接ファイルから読めるんですか?

読めます

732 :デフォルトの名無しさん:04/12/23 17:23:48
>>729

ご丁寧にありがとうございます。今日は自宅で、Linuxがないので
明日に職場で試してみます。

>>730

私もそこは見てみました。ですが・・・ 素人には難しいですね。

>>731

Thanks !!!

733 :デフォルトの名無しさん:04/12/23 17:46:48
>>728
>※わたしはそれぐらいCは無知なんです・・・
「Cは」?「プログラミング基礎は」じゃないか?

734 :698=726:04/12/23 18:17:12
分からないのでおねがいします。

735 :デフォルトの名無しさん:04/12/23 18:19:28
>>734
http://pc5.2ch.net/test/read.cgi/tech/1101393155/

736 :デフォルトの名無しさん:04/12/23 18:21:09
>>734
Cだけでは不可能
つまりスレ違い

737 :デフォルトの名無しさん:04/12/23 18:54:40
>>736
そうですか・・・失意体前屈

回答ありがとうございます

738 :デフォルトの名無しさん:04/12/23 19:00:06
どんな下手なCGでもかまいません。
オーロラの3DCGをVC++6.0で描いてください。
誰か私を助けてください(つ_T)

それとプロジェクトの設定のとこのMidlって何か教えてください・・・orz

739 :デフォルトの名無しさん:04/12/23 19:27:38
>>738
>>1

740 :デフォルトの名無しさん:04/12/23 20:12:08
>>729 でお教え頂いたのですが、

high の8bit (char) と low の8bit (char)を10進に変換する方法は、
highをビットシフトして、lowとの論理和をとる・・・

signal = (short)(high << 8 | low);

はお教え頂いてわかりました。演算した結果(signal)を
再び上下8bitにわけるには

high = ((unsigned char)signal) >> 8 ;
low = ( high << 8 ) & (unsigned char)signal ;

でいいですか? いろいろすみませんです。

741 :デフォルトの名無しさん:04/12/23 20:18:12
>>740
high = (unsigned char)(((unsigned)(signal & 0xff00)) >> 8);
low = (unsigned char)(signal & 0x00ff);

742 :デフォルトの名無しさん:04/12/23 20:18:56
high = (unsigned char)(signal >> 8);
low = (unsigned char)signal;

743 :デフォルトの名無しさん:04/12/23 20:23:29
>>742
signedの変数を右シフト…か。

744 :742:04/12/23 20:36:23
ぇsignedだったのか・・・反射的にレスしちまって前見てなかった・・・orz

745 :デフォルトの名無しさん:04/12/23 20:49:00
>high = (unsigned char)(((unsigned)(signal & 0xff00)) >> 8);
>low = (unsigned char)(signal & 0x00ff);

high は、signal を 255.0 とで&とって.。。。右シフト、了解です。わかりました。
low は0.255と&ですね。相変わらずわたしは論理積と論理和がわかってなかった・・・

でも、変数の範囲を考えると、>>742 さんのやり方でも切れるんですね。
勉強になりました。

なお、ちなみに私、low high がそれぞれ "unsigned char" でいいのか悪いのか、
わかってません。high のほうは signed でないといけないような・・・
そこだけ注意してやってみます。


746 :デフォルトの名無しさん:04/12/23 20:51:51
>>745
>high のほうは signed でないといけないような・・・
馬鹿タレ。
lowとhighはsignalを作るための部品でしかないから
unsignedで何の問題も無い。合成した結果がsignedならいいんだろ。

747 :デフォルトの名無しさん:04/12/23 20:53:27
>>746

すいません。ありがとうございました。
しかし、この板すごいっすね〜 感心しました。

748 :デフォルトの名無しさん:04/12/23 20:54:51
scanf関数を使って、入力待ちの時に、エンターキーだけで
入力終了させるようにするにはどうしたらいいですか
教えてください

749 :742:04/12/23 20:54:55
>>742のはsignalがunsignedという条件ではうまくいくけど
signalがsignedだとうまくいかない。あしからず

750 :デフォルトの名無しさん:04/12/23 20:56:17
>>749
うまくいかないっていうか、「うまくいく保証がない」だよね

751 :デフォルトの名無しさん:04/12/23 20:57:08
>>748
…無理だと思うが…。方法があったら俺も知りたい。
環境が許すなら、getch()を使えばいいだけだが。


752 :デフォルトの名無しさん:04/12/23 21:07:59
>>749 >>750

あとは大丈夫だと思います。やってみます。ありがとうございました。

753 :デフォルトの名無しさん:04/12/23 21:27:35
今、特定のメモリ領域からビット数を指定してデータを
取得するコードを書いてます。
メモリからリードする際に4バイト固定かつ4バイトアラインが存在する
という条件があり、ビット指定は
「オフセットxxBit目からyyBit分」
という指定をされます。オフセットは0から始まります。

例えば、21bit目から95bitリードしろという指定が来ると
int a[4]を用意してa[0]の21ビット目からa31ビット目,a[1],a[2],
a[3]の0ビット目から19ビット目にデータがリードされます。

これを、int b[4]を用意し、b[0],b[1],b[2]の0ビット目から30ビット目に
詰めるように格納したいのですが、楽にやる方法が考え付きません。
どなたかご教授お願いします。


754 :デフォルトの名無しさん:04/12/23 21:34:26
>>753
効率無視していいのなら、1bitずつコピーするのが楽。

755 :デフォルトの名無しさん:04/12/23 21:34:33
>>753
logical_shift_left(array, size, count); みたいな関数作っといて
とりあえずシステムテスト
後でアセンブラでその関数をチューニング

あ? 「楽に」だっけ
シラネーヨ

756 :753:04/12/23 21:51:11
>>754
書いているものの特性上、ある程度処理効率を考える必要があるため
1bitコピーはなるべく避けたいと思っています。
言葉が足りなくて申し訳ありません。

>>755
シフトでやろうと考えたのですが、いい考えが浮かびませんでした。
おっしゃっている関数が具体的にどういう感じのコードを記述すればいいか、
教えていただけませんか?
「楽に」というのは言葉のあやです。かれこれ2時間ぐらい悩んでいるので・・・

757 :デフォルトの名無しさん:04/12/23 21:54:23
> b[0],b[1],b[2]の0ビット目から30ビット目に
なんで31ビット目だけ使わないの?

758 :753:04/12/23 22:02:46
>>757
例では、要求が95ビットだけのため、
31ビット目はどのような値でも変わらないからです。

自分の書き方がマズかったでしょうか?
b[0],b[1]は32ビット全部使うんです。
でb[2]は31ビット目は上記の理由で必要ないということです、

759 :デフォルトの名無しさん:04/12/23 22:03:31
>>756
どういう感じって、ごくオーソドックスに
a[i]=a[i]>>n|a[i+1]<<(31-n);
とか書いときゃええやん、どーせ C だし

C で書いている以上は実行時のサイクル数は保証外
サイクル数を保証させたければアセンブラかハード

760 :753:04/12/23 22:23:22
>>759
なるほど、そのコードなら確かにできますね。
普通に思いつかなかった。。。疲れてるのかなw

処理効率については、サイクル数を厳格に保証しなくてはならない
ほどハードなシステムではないので、そこまで気にはしてないのですが、
ハードとの絡みがあり、ある程度は高速に処理させたいという要求がありまして。
かといってハード側でアライン関係の処理をするとセレクタが増大するため
おいしくないとのことでソフト側でやってたりするんですが・・・



761 :デフォルトの名無しさん:04/12/24 03:12:24
#include    <stdio.h>

int main( void )
{
    typedef struct {
        int  data1 ;
        struct hoge {
            int data2 ;
        }a[30];
    }HOGE ;

    HOGE test[2] ;

    printf( "%d\n", sizeof(test[0].a[0].data2) ) ;

}

こんなことしようとしてるんですが、見辛いですかね?
実際現場でこんな感じのやり方してる人いますか?

762 :デフォルトの名無しさん:04/12/24 03:17:12
少し寝ようと思いますので、即レスはできませんが、
なにかアドバイスがあればよろしくお願いします。

763 :デフォルトの名無しさん:04/12/24 03:24:10
> 規格では[a-zA-Z_]だけだった気がするんだが

「気がする」とかいってるあたりがだめすぎ

764 :デフォルトの名無しさん:04/12/24 03:26:16
> Cだけでは不可能

なわけねーだろ。十分可能だ。

765 :デフォルトの名無しさん:04/12/24 08:10:41
実行ファイルのpathを特定したいのですが何かいい方法あれば教えてください。
同じディレクトリの設定ファイルを読みたいのですが。

環境依存だったらDOSでお願いします。
コンパイラはLSIC試食版で。

766 :デフォルトの名無しさん:04/12/24 08:13:41
argv[0]

767 :デフォルトの名無しさん:04/12/24 08:13:44
argv[0]

768 :765:04/12/24 08:15:15
ちょっと試してみます。

769 :765:04/12/24 08:19:22
できました。
環境依存しないのは難しいですか?

770 :デフォルトの名無しさん:04/12/24 09:11:46
>>1のリンク先は読んだかね?
http://www.kouno.jp/home/c_faq/c19.html#31

771 :デフォルトの名無しさん:04/12/24 09:31:23
>>748>>751#include <stdio.h>
int main(void)
{
int ch;
char ss[10];
puts("入力");
printf("->");scanf("%c", ss);
/*[enter]のみ入力*/
printf("d=%d, x=%x\n", ss[0], ss[0]);
return 0;
}

772 :デフォルトの名無しさん:04/12/24 09:35:43
> 環境依存しないのは難しいですか?

sprintf(buf, "which %s", argv[0]);
system(buf);

773 :デフォルトの名無しさん:04/12/24 09:38:10
> printf("%d\n",sizeof(test[0].a[0].data2)) ;

なんのためにタグつけてんだ ぼけ
sizeof(hoge.data2) でいいだろ

774 :デフォルトの名無しさん:04/12/24 09:40:18
>>772
依存し捲くった挙句に完全じゃない。

775 :762:04/12/24 10:20:14
はい、そうします。

776 :デフォルトの名無しさん:04/12/24 14:30:35
#include<stdio.h>
int hoge(int *);
int main(void){
int i;
int *pi;
pi = &i;
i = 5;
printf("%d %d\n", i, hoge(pi));
return 0;
}
int hoge(int *pi){
return *pi * 2;
}

結果として 10 10 が欲しいのですが、5 10 と表示されます。
ご教示ください。

777 :デフォルトの名無しさん:04/12/24 14:37:59
i=hoge(pi) か hoge(*i)

778 :デフォルトの名無しさん:04/12/24 14:50:13
>>776
何をしたいのかが解らん…
hoge() の中で i を書き換えたいなら
  return *pi *= 2;
だが、そうしたからって
>printf("%d %d\n", i, hoge(pi));
ここの評価順によっては 5 10 だ。

779 :デフォルトの名無しさん:04/12/24 14:53:37
#include<stdio.h>
int hoge(int *);
int main(void){
int i = 5
int *pi = &i
printf("%d %d\n", hoge(pi), i);
return 0;
}
int hoge(int *pi){
*pi *= 2;
return *pi;
}

>>777
どうもです。
ちょっと変更してみました。
int *papa;
int mama;
papa = &mama;
*papa = 5;
でmamaの内容も変わるようにiの内容も変わると思ったのですが…


780 :デフォルトの名無しさん:04/12/24 14:56:24
>>778
おっしゃるとおりです。>>779で評価順を変えました。
それでもiは期待値10にならないです。

781 :デフォルトの名無しさん:04/12/24 14:56:41
>>779
関数の引数の評価順は決まっていないので、それに依存するプログラムを
書くと結果は不定のふるまいとなる。

782 :デフォルトの名無しさん:04/12/24 15:01:05
>>779
↓のを試してみ

int main(void){
int i;
int *pi;
pi = &i;
i = 5;
hoge(pi);
printf("%d\n", i);
return 0;
}
void hoge(int *pi){
*pi *=2;
}

783 :デフォルトの名無しさん:04/12/24 15:04:36
>>782
おお、ありがとうございます。10になりました。どうしてだーー!!!!??

784 :デフォルトの名無しさん:04/12/24 15:25:22

お世話になっております

VC++でMFCのプロジェクトを作っているんですが、
CSVファイルを読み込んで、1カラムずつ
取得してファイルの最後まで読み込むというロジックをつくりたいんです

@ Readfile で、 file のEOF 検出ってできますでしょうか?
A 1カラムずつの取得ってどうやるんでしょうか?
   readfile だと、バイト取得しかできないのでしょうか?

2点お願いします


785 :デフォルトの名無しさん:04/12/24 15:29:22
>783
>781 の言う通り。
そのコンパイラでは、引数の評価順は
「左から」でも「右から」でもなかった、という事。

>784
激しくスレ違い。
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/l50


786 :デフォルトの名無しさん:04/12/24 15:32:31
ごめんなさい スレ違いでした

787 :デフォルトの名無しさん:04/12/24 15:45:51
>>783
もうちょっと調べるなり考えるなりしような

      *pi *=2   これはpiの中身の"値を2倍している"
return *pi *=2    これはpiの中身の" 値を2倍にした「数値を返している」 "

788 :デフォルトの名無しさん:04/12/24 16:26:52
>>787
これで期待値を得ることができました。
調べたところ引数の評価順は右からのようです。
もうちょっと調べるなり考えるなりしような

#include<stdio.h>
int hoge(int *);
int main(void){
int i = 5
int *pi = &i
printf("%d %d\n", i, hoge(pi));
return 0;
}
int hoge(int *pi){
return *pi *= 2;
}



789 :デフォルトの名無しさん:04/12/24 17:13:55
>>787
なんかおかしいぞ。日本語がおかしいだけだと思いたいけど……
      *pi *=2   piの中身の"値を2倍している
return *pi *=2    上に加えて、その値を返している

>>788
知らんけどその評価順は、printfの仕様なの?仕様でない場合、そういうのを実装依存といって
ほかの環境でエラーを起こす危険が高いから、書いてはいけないものとされてる。
まあ学校の宿題とかだったらわざわざ細かいこと気にしないでいいよ

790 :デフォルトの名無しさん:04/12/24 17:14:25
ファイル名を、元のファイル名+拡張子のように変えるにはどうすればいいんでしょうか?
例えば、temp.exeをtemp.exe.bakのように変えるような場合です。
ファイル名は引数から取得させているので、rename関数ではできませんでした。
rename(argv[1],argv[1]".bak")でできると思ったのですが…

791 :デフォルトの名無しさん:04/12/24 17:24:23
>>789
>仕様でない場合、そういうのを実装依存といって
ほかの環境でエラーを起こす危険が高いから、書いてはいけないものとされてる。

家の環境での評価順です。ひとつ勉強になりました。
ちなみに、これは会社の宿題なんですorz

792 :デフォルトの名無しさん:04/12/24 17:24:30
>>790
そういう連結の仕方はできない。
C++ではrename(argv[1], (std::string(argv[1]) + ".bak").c_str());とすればいいのだがここはCスレ、
Cならこうすればいい。
char *buf = malloc(strlen(argv[1]) + 1 + 4); //1は'\0'、4は".bak"の文字数
if (buf)
{
    strcat(strcpy(buf, argv[1]), ".bak");
    rename(argv[1], buf);
    free(buf);
}

793 :790:04/12/24 17:53:11
>>792
おおおー鮮やか
dクスです

794 :デフォルトの名無しさん:04/12/24 19:12:13
>>791
会社の宿題なら、なおさらの事、実行結果が実装依存になるようなプログラムは
書かない方がいい。減点の対象になるはず。

i = i++; のようなのは、実装依存では済まず、「未定義」とされている。unspecifiedより
なお一層厳しいundefinedだ。

795 :デフォルトの名無しさん:04/12/24 19:58:50
enumの中の名前が激しくグローバルなのはKの責任ですか?Rの責任ですか?

796 :デフォルトの名無しさん:04/12/24 20:12:10
どっかのコンパイラメーカー

797 :デフォルトの名無しさん:04/12/24 20:55:29
>>794
俺の入った会社にはCの仕様をまともに理解してるやつが一人もいないんですが・・・。

798 :デフォルトの名無しさん:04/12/24 21:02:39
>>797
・さっさと見切りつける
・それこそが自分の存在価値と心得る

究極の選択


799 :デフォルトの名無しさん:04/12/24 21:10:14
>>797
おまいも?

800 :デフォルトの名無しさん:04/12/24 21:10:50
>>799
言うまでもなく。

801 :デフォルトの名無しさん:04/12/24 21:25:17
ここはそんな会社にしか使ってもらえないクズどもの巣窟ですか?

802 :デフォルトの名無しさん:04/12/24 21:34:25
クレタ族はうそつきだ

803 :デフォルトの名無しさん:04/12/24 21:36:04
ゲーデルの不完全性定理

804 :デフォルトの名無しさん:04/12/24 22:02:34
>>802
違う。
クレタ族が言った。「クレタ族はうそつきだ。」

805 :デフォルトの名無しさん:04/12/24 22:07:54
クレタ族にはうそつきも正直者もいる

806 :デフォルトの名無しさん:04/12/24 22:42:02
クレタ人は嘘つきだとクレタ人が言った。

807 :デフォルトの名無しさん:04/12/24 22:46:50
おれおれ、クレタ人なんだけどさ、ちょっと嘘ついてくんない?

808 :デフォルトの名無しさん:04/12/25 00:06:23
やっぱり、向こうが本スレなのか

809 :765:04/12/25 01:22:30
>770 >772 >774

遅くなりました。レス有難うございます。
依存するらしい,という話はFAQで見たようです。すっかり忘れていました。
whichを自分で書くぐらいの労力を払うしかないようですね。。。

810 :デフォルトの名無しさん:04/12/25 04:14:38
エクセルとかワードってC言語で作られているの?
それとも、ちがう言語?

811 :デフォルトの名無しさん:04/12/25 04:37:10
enumはある意味defineよりまし、ぐらいにしか使えないのよねえ。


812 :デフォルトの名無しさん:04/12/25 04:38:35
> = i++; のようなのは、実装依存では済まず、「未定義」とされている。unspecifiedより
> なお一層厳しいundefinedだ。

ほほう。そういうしったかぶりくんは「unspecified」はどう訳すの? ;-)

813 :デフォルトの名無しさん:04/12/25 05:24:44
ミニ三田はいらんから

814 :デフォルトの名無しさん:04/12/25 07:48:43
テキストファイルを1行ずつ読み込むときは
fopen、fgets を使えば簡単ですが、一番後ろの
行からさかのぼって1行ずつ読み込むにはどのように
すればよいでしょうか。

ちなみにテキストの行数は50000行程度、サイズにして8MB程度
のもので、使えるメモリはそう多くはない(2〜3MB程度)という
条件があります。

815 :デフォルトの名無しさん:04/12/25 08:35:06
>>810
MFCとは別のMSのクラスライブラリを使っているらしいからC++だろう。

816 :デフォルトの名無しさん:04/12/25 09:03:10
fin = fopen("text.txt", "r");

for(i=0;fgets(ss, 256, fin) != NULL;i++){
}
fclose(fin);

for(k=i;k>=0;k--){
fin = fopen("text.txt", "r");
for(j=i;j>=0;j--){
fgets(ss, 256, fin);
}
puts(ss);
}

817 :デフォルトの名無しさん:04/12/25 09:03:51
fcloseが抜けてた
付け足しといて

818 :デフォルトの名無しさん:04/12/25 09:12:48
816は見ない方が良い

819 :デフォルトの名無しさん:04/12/25 09:16:25
cに限らず、現行のファイルシステムは「一文字読んだらポジションが一つ進む」仕組みだから
「最後から読む」「最後の行から読む」のは難しい。

まあ、メモリも多くないみたいだし、
fgetsで行頭を記録しながら空読みして
seekしながらfgetsで一行読み込んで表示するってのが無難かな。

820 :デフォルトの名無しさん:04/12/25 09:27:15
>>814
ランダムアクセスっぽいことが必要になるなら
適さないファイル編成を何とかすることから始める
テキスト→バイナリ変換したりインデックスファイル作ったり

821 :814:04/12/25 09:46:04
みなさんのおっしゃっておられる事がよく理解できませんが、
816のを利用したら目的とするものが一応できましたので、
今回はそれで満足します。

スレ汚し失礼しました。

822 :デフォルトの名無しさん:04/12/25 09:49:49
スゲー

823 :デフォルトの名無しさん:04/12/25 11:45:30
813は答えられなくて、ごまかしたつもり ;-)

824 :デフォルトの名無しさん:04/12/25 11:47:23
fgetsしたのをputsしてるので行がつながる

825 :デフォルトの名無しさん:04/12/25 11:49:02
後ろの行から読むときは、常識的にpopen("rev")だろ!

826 :デフォルトの名無しさん:04/12/25 11:50:33
mmapして逆から改行検索すりゃいいだけ

827 :デフォルトの名無しさん:04/12/25 11:53:02
> mmapして

メモリー足りないので無理です。

828 :デフォルトの名無しさん:04/12/25 12:02:09
SEEK_ENDから
ftell()しながらgetchar()して
いっこ(ふたつ?)ずつさかのぼっていって
\nがきたら
そのポジションのつぎから
fgets()

?だめかな?

829 :デフォルトの名無しさん:04/12/25 12:32:58
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buf[BUFSIZ];
FILE *fp;
long ofs, curpos;
if (argc != 2) {
printf("usage %s [file to open]\n", argv[0]);
exit(0);
}
if ((fp = fopen(argv[1], "r")) == NULL) {
perror("fopen()");
exit(0);
}
fseek(fp, -2, SEEK_END);
for (ofs = ftell(fp); ofs > 0; fseek(fp, ofs, SEEK_SET)) {
int c;
if ((c = fgetc(fp) == '\n')) {
curpos = ftell(fp);
fgets(buf, BUFSIZ, fp);
fputs(buf, stdout);
ofs = curpos -1;
}
ofs -= 2;
}
fgets(buf, BUFSIZ, fp);
fputs(buf, stdout);
fclose(fp);
}

830 :デフォルトの名無しさん:04/12/25 12:46:28
#include <stdio.h>

int main(int argc, char **argv)
{
  FILE *fp;
  char buf[256];
  char cmd[256];

  sprintf(cmd, "rev %s", argv[1]);
  if ((fp = popen(cmd, "r")) == NULL) {
    fprintf(stderr, "error\n");
    exit(1);
  }
  while (fgets(buf, 256, fp) != NULL)
    fputs(buf, stderr);
  pclose(fp);
}


831 :デフォルトの名無しさん:04/12/25 12:47:48
> そのポジションのつぎから
> fgets()
> ?だめかな?

おい、ぼけ。fgetsしたらまたその末尾の改行までいってしまうだろ

832 :デフォルトの名無しさん:04/12/25 12:48:19
え?誰に聞けって?おい誰?うわぁ〜〜

833 :デフォルトの名無しさん:04/12/25 12:51:43
quoted-printableエンコード&デコードしたいのですが
アレってテキストファイル用なんですか?

つうか、今のとこんな感じです
char[] moji="=80=CC=82=3D";
~s/=(..)/sprintf("%08b",$1)/eg



834 :デフォルトの名無しさん:04/12/25 14:08:59
> quoted-printableエンコード&デコードしたいのですが

しちゃだめ

835 :デフォルトの名無しさん:04/12/25 14:16:14
ふつうuuencodeかxxencodeのどちらか。base64も禁止

836 :デフォルトの名無しさん:04/12/25 18:02:17
>815
なんでそうなるの?
>816
死んだ方がいいですよ。
>819
死んだ方がいいですよ。
>820
死んだ方がいいですよ。
>821
814は私です。偽者はやめてください。


837 :デフォルトの名無しさん:04/12/25 18:08:57
>836
>814は私です。偽者はやめてください。
そういうことか。てことは、821=816なわけね。

838 :デフォルトの名無しさん:04/12/25 18:10:26
>>837
違います。私が本当に本物です。

839 :デフォルトの名無しさん:04/12/25 18:15:07
>826
それでいいや。さんきゅー

840 :デフォルトの名無しさん:04/12/25 21:33:04
まぁ、マジレスするとtailのソースでも見とけと。

841 :デフォルトの名無しさん:04/12/25 21:41:15
>840
アホ

842 :デフォルトの名無しさん:04/12/25 21:56:38
>840
どこで見れるの?

843 :デフォルトの名無しさん:04/12/25 21:57:19
>842
アホ

844 :デフォルトの名無しさん:04/12/25 22:05:02
>843
えー、だってC言語なら俺に聞けって言うからさー

845 :デフォルトの名無しさん:04/12/25 22:08:20
なぁ、お前らちょっとテストしていい?

846 :デフォルトの名無しさん:04/12/25 22:08:55
いいよ

847 :デフォルトの名無しさん:04/12/25 22:09:24
strcpyとmemcpyってどう違うの?

848 :デフォルトの名無しさん:04/12/25 22:10:15
>846
popenとnotepad.exeの関係は?

849 :デフォルトの名無しさん:04/12/25 22:12:27
>846
ファイルとメモリマッピングという用語を使って小論文を書け。

850 :デフォルトの名無しさん:04/12/25 22:14:48
俺の名前を言ってみろ

851 :デフォルトの名無しさん:04/12/25 22:21:20
>>847
引数がちがう

852 :デフォルトの名無しさん:04/12/25 22:21:40
>851
他には?

853 :デフォルトの名無しさん:04/12/25 22:24:09
メモリに'\0'があった際に停止するか否か

854 :デフォルトの名無しさん:04/12/25 22:25:21
memcpyにはNULLチェックがない

855 :デフォルトの名無しさん:04/12/25 22:26:11
>>853
バイナリモードだったら同じだけどな。

856 :デフォルトの名無しさん:04/12/25 22:26:57
>855
ウソつきはっけーん!!

857 :デフォルトの名無しさん:04/12/25 22:28:51
>853-854
他には?

858 :デフォルトの名無しさん:04/12/25 22:29:55
関数名が違う( ´,_ゝ`)

859 :デフォルトの名無しさん:04/12/25 22:30:50
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

860 :デフォルトの名無しさん:04/12/25 23:06:22
>840
そんなクソ遅いコマンドのソースを参照しろというのは
一体どういった意図によるものなのでしょうか。

861 :デフォルトの名無しさん:04/12/25 23:07:11
>859
誰に言ってるの?答えられないのなら素直にそう書けばいいのに。

862 :デフォルトの名無しさん:04/12/25 23:10:01
>861
アホ。頭悪すぎてそれすら気付かない奴なんだから相手するなって。


863 :デフォルトの名無しさん:04/12/25 23:17:07
>>861
答えてる馬鹿たちに向かってですが、気に障りました?

864 :デフォルトの名無しさん:04/12/25 23:19:09
で模範解答は?

865 :デフォルトの名無しさん:04/12/25 23:19:46
つか、雑談も煽りも他所でやれや餓鬼共

866 :デフォルトの名無しさん:04/12/25 23:20:34
>864
バーカ。簡単にあきらめてんじゃねーよ。

867 :デフォルトの名無しさん:04/12/25 23:20:59
なんかさー、俺が書き込むといつも荒れるよなー、このスレ。

868 :デフォルトの名無しさん:04/12/25 23:21:43
うわ、自意識過剰な馬鹿がいる

869 :デフォルトの名無しさん:04/12/25 23:26:54
>868
え?俺のせいじゃなかったってこと?ならよかった。

870 :デフォルトの名無しさん:04/12/25 23:58:32
>>868
いいや、俺が全部悪いんだ。
みんな!スレが荒れたのは俺のせいだ!
責めるなら、この俺を責めてくれ!


871 :デフォルトの名無しさん:04/12/26 00:20:28
>>870
死ねよ

872 :デフォルトの名無しさん:04/12/26 01:10:50
読み込んだファイルのバイト数を知りたいんですが

while(!feof(fp)){
file_length++;
}
のようにfeof関数を使うと正しくバイト数が
分かりません。
どのように書けばいいですか?


873 :デフォルトの名無しさん:04/12/26 01:14:50
>>872
そりゃ読まなきゃいつまで経っても EOF にゃならんわ。

874 :デフォルトの名無しさん:04/12/26 01:17:33
>>873
省略しましたが、ファイルの内容は読んでます。
バイトが0x1Aの地点でfeofによりwhile文を抜ける
んですけど、どう書けば正しいですか?
宜しくお願いします。

875 :デフォルトの名無しさん:04/12/26 01:20:12
>>874
ftell

876 :デフォルトの名無しさん:04/12/26 01:20:23
feof()は最後を読み終わった直後にもう一度読もうとするとオhルが返る

fseek()とftel()使え

877 :デフォルトの名無しさん:04/12/26 01:26:47
お前らマルチに親切ですね。

878 :デフォルトの名無しさん:04/12/26 01:36:50
>>877
オマエモナー

879 :デフォルトの名無しさん:04/12/26 01:40:43
ありがとうございます。

880 :デフォルトの名無しさん:04/12/26 03:33:16
>>874
>バイトが0x1Aの地点でfeofによりwhile文を抜ける 
根本的に町ガッ取る。
つか、この20年以上前の仕様が
なんで未だに引き継がれているのか…

881 :デフォルトの名無しさん:04/12/26 04:01:55
ファイルの終わりにそんなもんはついてません。

882 :デフォルトの名無しさん:04/12/26 04:03:10
ぼけ ファイルの終わりにそんなものはついてない。


883 :デフォルトの名無しさん:04/12/26 04:05:42
> > メモリに'\0'があった際に停止するか否か
> バイナリモードだったら同じだけどな。

こいつおおぼけ。 strcpyやmemcpyにバイナリーモードなどない ぼけ

884 :デフォルトの名無しさん:04/12/26 04:46:46
>>881-882
何も言い直さなくとも…

今やファイルサイズはバイト単位で持ってる環境が殆どだけど
CP/M 時代は、ファイルサイズはセクタ単位でしか持ってなくて
テキストファイルの最後に 0x1A を付加する習慣があったのよ。
で、当時を知らないハズの連中が今でも「0x1A が付いてくる」と
思ってるってーのは、何処かで嘘をばら撒いてる莫迦がいるんじゃ
ないかと思ってな。

885 :デフォルトの名無しさん:04/12/26 05:24:30
デジャヴを感じる…
つい1スレ前に似たような事なかったか?<EOFについて

886 :デフォルトの名無しさん:04/12/26 06:11:13
>877
マルチの何が悪いのかも分かっていないくせによく言うよなー、お前も

887 :デフォルトの名無しさん:04/12/26 06:28:30
http://f29.aaa.livedoor.jp/~retoroup/gazoubbs/src/1104009880336.gif
上の画像に長方形の黒く塗りつぶしたような文字ありますよね?
これを1文字読み込んだときに判別するにはどの関数使えばいいのか教えてください。
あとこれをコピペしても「」←こんな感じでしか表示できませんよね?
どうやって出力すればいいか教えてください。お願いします

888 :デフォルトの名無しさん:04/12/26 06:36:10
WinXP上でプログラミングしているんですが
実行すると必ず表示されるコマンドプロンプト画面を非表示にする事って出来るのでしょうか?
要するに実行しても何も表示されない様にしたいんです。

889 :デフォルトの名無しさん:04/12/26 07:38:41
>>887
それはフォントがそのコードの字体を持っていない文字で、
四角になるか・になるかはフォントが決められる。
(フォント自体が通常の文字と同じように字体を用意しているので
バツや星印でもいいはず、見たことないけど)

つまり正確にやりたいんだったら今使っているフォントが
そのコードの文字をもっているか調べることになるんだが、
普通はisprint() || is漢字の1バイト目かを調べれば大体いいんじゃないか?

890 :デフォルトの名無しさん:04/12/26 10:06:54
>>889
ありがとうございます。フォント変えたら表示できました

891 :デフォルトの名無しさん:04/12/26 10:49:24
>888
me だけど prompt $で消えたよ。カーソルは残ってるけど。
てかCで?

892 :デフォルトの名無しさん:04/12/26 11:14:13
え?

893 :デフォルトの名無しさん:04/12/26 11:21:51
>>886
へぇ(嘲笑)

894 :デフォルトの名無しさん:04/12/26 12:04:34
>>891
プロンプトを消したいとは誰も書いてないよ。

>>888
スレ違い。Win32APIスレかVCスレへ。

895 :デフォルトの名無しさん:04/12/26 13:14:25
昨日初めて彼女とCしました

896 :デフォルトの名無しさん:04/12/26 13:54:30
私語だよオサーン。

897 :超級初心者:04/12/26 14:22:38
基本情報処理に向けてCを勉強しています。
やさしいCで最低レベルの基礎を一応覚えたので次に進みたいのですが、
応用編と書いてある書籍はいきなり難しくなっていてなんともしがたい状況です。
通常はどういった勉強をしていくのでしょうか?

898 :デフォルトの名無しさん:04/12/26 14:25:11
>>897
あなた本当にやさしいC全部読んだの?載っている問題は全部解いた?

899 :超級初心者:04/12/26 14:26:55
はい、載っている問題は全部解けました。

900 :デフォルトの名無しさん:04/12/26 14:42:39
>>899
具体的にどこが分からないの?

901 :超級初心者:04/12/26 14:45:50
C言語によるプログラミング(応用編)を読んでいくのですが、
しだいに何を目的としている用法なのか、というか何をしているのか
わからなくなってしまうのです。
現在はポインタ完全制覇でポインタに絞って勉強していはいますが、
これでいいのかどうか・・。
リファレンス本も持っているのですが、引いても書いてある使い方が理解で
きないのです。例えば、
void *memcpy(void *to, const void *from, size_t n);
char strncat(char *str1, const char *str2, size_t n);
とか書いてあっても、
*to?const?size_t?それって何を書くの??
という感じです。

902 :デフォルトの名無しさん:04/12/26 14:51:42
>>901
to は仮引数名だろうが、そんくらい「やさしいC」には書いてなかったのか
それから、const や size_t についての説明がない本なら見限ることも考えろ

903 :デフォルトの名無しさん:04/12/26 14:52:00
今更で悪いが標準Cってなんだ?>>1よ。


904 :デフォルトの名無しさん:04/12/26 14:56:43
to, from, n はmemcpy関数内で使われる変数名であり気にしなくていい

注視するところは
1. ()内の変数の型 void *, const void *, size_t
2. memcpy の手前にある void *

つまりmemcpyに void *, const *void, size_t を順に3つとも放り込めば(1.)
void * 型の変数が得られる(2.)

strncatも同様
1. ()内の char *, const char *, size_t
2. char * ←これ抜けてる

905 :デフォルトの名無しさん:04/12/26 14:57:04
読んで勉強した気分になってる病

906 :デフォルトの名無しさん:04/12/26 15:01:21
>何を目的としている用法

例えば str〜 は文字配列を扱う、って事だけだが?

907 :超級初心者:04/12/26 15:02:26
>>902
*toではなくvoid *と書くべきでした、すみません。
目的とするプログラムがないので、どこから手をつければいいのか・・
という感じなんです。しかも用例には知らない関数がバカバカでてきますし。
それを調べて覚えても、結局どういった場合に使うのかわかっていないので
それを使ったプログラムを書く練習ができないような状態です。

908 :デフォルトの名無しさん:04/12/26 15:02:29
気分だけならいいけど
理解したと豪語するのは止めてほしいな

さらにいうと、そんなので開発に参加し(ry

909 :デフォルトの名無しさん:04/12/26 15:03:15
>>903
ISOが定めたC言語の標準規格

910 :デフォルトの名無しさん:04/12/26 15:04:25
>>903
ISO/IEC 9899:1999

911 :デフォルトの名無しさん:04/12/26 15:05:16
かぶった_| ̄|○

912 :デフォルトの名無しさん:04/12/26 15:05:34
>>907
向いてないよ

913 :超級初心者:04/12/26 15:05:53
>>904
>つまりmemcpyに void *, const *void, size_t を順に3つとも放り込めば(1.)
>void * 型の変数が得られる(2.)

この文を理解できない時点でまずいですよね・・orz
でもご丁寧にありがとうございます。

914 :デフォルトの名無しさん:04/12/26 15:07:05
void*ってことはどんな型のポインタでも渡せるってこった

char a, b;
memcpy(&a, &b, 1);

int a, b;
memcpy(&a, &b, sizeof(int));

915 :デフォルトの名無しさん:04/12/26 15:09:43
>908
>さらにいうと、そんなので開発に参加し
どう見てもまだ学生か何かだろうに、そんな発言をするお前の方が異常。

916 :超級初心者:04/12/26 15:10:11
>>914
なるほど!すごくわかりやすいです。ありがとうございます。


917 :デフォルトの名無しさん:04/12/26 15:10:24
もし学生じゃなかったら首吊ってやるよ。

918 :デフォルトの名無しさん:04/12/26 15:11:19
いったい何を読んでたんだ?

919 :デフォルトの名無しさん:04/12/26 15:11:20
>914
intの場合はsizeofしているのにcharではしないのはどうしてですか?

920 :デフォルトの名無しさん:04/12/26 15:11:47
>>919
打つのがダルかったから

921 :デフォルトの名無しさん:04/12/26 15:12:09
>918
何だったとしても、はなから質問に答える気のないお前には
全く関係ない。失せろ。

922 :デフォルトの名無しさん:04/12/26 15:12:17
>>915
>>897のこと限定で言っているわけではないのが理解できないのか…

923 :デフォルトの名無しさん:04/12/26 15:12:58
>920
そんな奴が人に教えようとするなよ。
つか、そういう理由じゃねーだろうが。
それもわからんで人に教えようとするな。

924 :デフォルトの名無しさん:04/12/26 15:13:22
>922
は?

925 :デフォルトの名無しさん:04/12/26 15:14:21
>922
いるよなー、こういう奴。自分の言葉が全く足りてないくせに
理解してもらえないとかいっちょまえにほざいちゃってな。
協力会社でそういう人間は片っ端からはずしてるよ。
社員でもたくさんいるけどこっちは簡単にはずせねーんだよなー

926 :デフォルトの名無しさん:04/12/26 15:14:22
>>919
sizeof(char)は1だから

927 :デフォルトの名無しさん:04/12/26 15:15:17
>926
あなたは誰ですか?

928 :デフォルトの名無しさん:04/12/26 15:15:37
>865-926は俺の自演って気付いてる奴いる?

929 :デフォルトの名無しさん:04/12/26 15:16:36
偉そうに質問に答える奴は社名と所属部署を晒してから
ってルールな、今から。

930 :デフォルトの名無しさん:04/12/26 15:16:50
>>925
妄想乙

931 :デフォルトの名無しさん:04/12/26 15:17:50
>>928
キヅイテルヨ コノヤロー( ´∀`)σ)Д´)

932 :超級初心者:04/12/26 15:19:05
>>926
ではその部分は例えば
sizeof()でも、実際のその数値でも良いということでしょうか?

933 :デフォルトの名無しさん:04/12/26 15:19:18
会社でまともに組める奴が育たないのが良くわかるスレだ

934 :デフォルトの名無しさん:04/12/26 15:20:29
>>925
いるよなー、こういう奴。
煽りが失敗しても引っ込みがつかなくて
どうしても相手を陥れようとがんばる椰子w

935 :超級初心者:04/12/26 15:21:15
自分としてはどんな言い方であれ、答えていただけるだけで御の字です・・。

936 :デフォルトの名無しさん:04/12/26 15:24:20
>925>934は自演。なんでそう言い切れるか分かる奴いるか?

937 :デフォルトの名無しさん:04/12/26 15:25:32
>>936
おまえが知障だからか?

938 :デフォルトの名無しさん:04/12/26 15:26:27
>937
惜しい!俺の自演だからだよ。

939 :デフォルトの名無しさん:04/12/26 15:27:15
>>935
まずsizeof()をリファレンスで引け
それが返す変数の型はどんなものなのかも


940 :デフォルトの名無しさん:04/12/26 15:27:25
やべー。このスレの書き込みで俺が書いたのカウントしてみたら
725個もあるよ。

941 :939:04/12/26 15:28:28
すいません。わたしとちくるってました。訂正します。

まずsizeof()をリファレンスで引いて頂けますか?
それが返す変数の型はどんなものなのかも調べるといいと思います。
あ、分かりにくい日本語ですいません。

942 :デフォルトの名無しさん:04/12/26 15:28:28
俺は216個目…(´・ω・`)

943 :デフォルトの名無しさん:04/12/26 15:28:31
あれ?
漏れの書き込み、268個あるけど...

944 :デフォルトの名無しさん:04/12/26 15:29:04
次スレなしってことでいい?

945 :デフォルトの名無しさん:04/12/26 15:29:25
>943
それはあなたが数えることすらできないからですよ。

946 :デフォルトの名無しさん:04/12/26 15:30:13
>943
キモ

947 :超級初心者:04/12/26 15:37:35
>>941
はい、えっと自分のリファレンスには
sizeof(式) 式の結果のオブジェクトが占有するバイト数
sizeof(型) 型名で示される型が占有するバイト数
とありました。

948 :デフォルトの名無しさん:04/12/26 15:40:13
>>944
スレタイかえて続けろよ

949 :デフォルトの名無しさん:04/12/26 15:50:20
>>1に書いてあるコンパイラって全部フリーなんですか?

950 :デフォルトの名無しさん:04/12/26 15:50:56
>>947
sizeof(char)は無条件で1だと書いてないのか?

951 :デフォルトの名無しさん:04/12/26 15:53:54
>>949
>>1にコンパイラは1つも書いてないです :-)

952 :超級初心者:04/12/26 15:54:01
>>950
そーですね・・・書いてないようです。
というか>>947も何度か引いて見つけたもので、
sizeof演算子というところには、
オブジェクトの寸法を取得する
としか書いてありません。
「C言語によるプログラミング-スーパーリファレンス-」
という本なのですが、いまいちなのでしょうか??

953 :949:04/12/26 15:58:18
>>2でした。
フリーなんですかね?

954 :デフォルトの名無しさん:04/12/26 16:04:29
>>952
間違いではないんだけど…
型のサイズは環境によって違うことがあるから、
>>950の例外を除いては、即値を書かない方がいい

955 :デフォルトの名無しさん:04/12/26 16:05:50
>>953
リンク先のページを読めよ

956 :超級初心者:04/12/26 16:11:30
>>954
char以外の型の場合は値で書かない方が良い、ということですね。
intやdoubleの領域の確保が環境に依存するとは知りませんでした。
ありがとうございます。

957 :デフォルトの名無しさん:04/12/26 16:11:41
>>952
ある処理系でたまたまそうなのか、規格で決まっていることなのかを確認するなら、見る本を間違っている

958 :デフォルトの名無しさん:04/12/26 16:15:51
少し長いですが、ソースを張ります。質問次に書きます。お願いします。
int main(void){
FILE *fpR,*fpG,*fpB,*fpOUT;
unsigned char tmpR,tmpG,tmpB;

fpR = fopen("R.raw","rb");
fpG = fopen("G.raw","rb");
fpB = fopen("B.raw","rb");
if(fpR == NULL || fpG == NULL || fpB == NULL){
printf("ERROR: inputfile not found \n");
exit(1);
}
fpOUT = fopen("OUT.raw","wb");
if(fpOUT == NULL){
printf("ERROR: outputfile could not make\n");
exit(1);
}
while(tmpR = fgetc(fpR) != EOF){
tmpG = fgetc(fpG);
tmpB = fgetc(fpB);
fputc(tmpR,fpOUT);
fputc(tmpG,fpOUT);
fputc(tmpB,fpOUT);
/*testprint*/printf("%d %d %d\n",tmpR,tmpG,tmpB);
}
fclose(fpR);
fclose(fpG);
fclose(fpB);
fclose(fpOUT);
return 1;
}

959 :958:04/12/26 16:16:22
このプログラムは、R,G,Bの単色のRAWを三枚あわせて、カラーのRAW画像を作ろうと思い書いたものです。
が、出来上がる画像は
「Rの値ががすべて1」の画像になってしまいます。
元の画像に問題があるのかと思い、R,G,B三枚とも同じ画像でテストしてみましたが、
やはりRの値がすべて1の画像になってしまいます。
printfのテストでも、R=1で出力されてしまいます。
どこがおかしいのでしょうか教えていただけないでしょうか。
よろしくお願いします。

960 :超級初心者:04/12/26 16:17:10
>>956と書きましたが、使い終えたと思っていた「やさしいC」に
型のサイズは環境による
と記載されていました、すみません。
char型は1になることはK&Rに載っていました。




961 :デフォルトの名無しさん:04/12/26 16:18:41
while(tmpR = fgetc(fpR) != EOF){
あやすい

962 :デフォルトの名無しさん:04/12/26 16:21:07
return 1;

963 :958:04/12/26 16:21:33
>>961
ありがとうございます!!
そこでした。
while(1){
tmpR=fgetc(fpR);
if(tmpR==EOR)break;
.
.
.
}
に直したらちゃんと動きました。

964 :958:04/12/26 16:23:58
>>961
と思ったら、これではループを抜けなくなってしまいました。
ループを抜けるにはどうしたらよいのでしょうか。

965 :デフォルトの名無しさん:04/12/26 16:24:51
EORってなんだよ

966 :デフォルトの名無しさん:04/12/26 16:26:03
int

967 :958:04/12/26 16:29:03
>>965
EOFの間違えでした。


968 :デフォルトの名無しさん:04/12/26 16:29:13
while(./**/(tmpR = fgetc(fpR))/**/ != EOF){
括弧できちんとくくれ
変な感じがしてもこっちの方が間違いが少ない。

969 :デフォルトの名無しさん:04/12/26 16:32:12
fgetcやgetcharを受けるのはint型の値にしろ
EOFを返してきた時にEOFはint型の値と決まっている。

970 :958:04/12/26 16:38:44
>>968
>>969
ありがとうございます。教えていただいたとおりに

int tmpR,tmpG,tmpB;
while((tmpR = fgetc(fpR))!=EOF){
..
..
fputc((unsigend char)tmpR,fpR);
..
..
}
としたら、Rにちゃんと値も入り、ループも抜けられるようになりました。

いろいろと教えていただきありがとうございました。

971 :デフォルトの名無しさん:04/12/26 16:47:45
> に直したらちゃんと動きました。

ぼけ なおしかたがちがうだろ

> while(tmpR = fgetc(fpR) != EOF){
これを
> while ((tmpR = fgetc(fpR)) != EOF) {

こうなおすんだよ。空白もきちんとあけろ! ぼけ




972 :デフォルトの名無しさん:04/12/26 16:48:30
しかもこの場合の「tmp」って名前は不適切だなあ

973 :デフォルトの名無しさん:04/12/26 16:59:01
fgetcの戻り値を受ける変数をcharやunsigned charにするなよ ! ぼけ

974 :デフォルトの名無しさん:04/12/26 16:59:52
正常終了のときに1をかえるなよ ぼけ!

975 :デフォルトの名無しさん:04/12/26 17:00:45
#include <stdio.h>
#include <stdlub.h>

void cant(char *);

int main(void)
{
  FILE *rfp, *gfp, *bfp;
  FILE *outfp;
  int r, g, b;

  if ((rfp = fopen("R.raw", "rb")) == NULL)
    cant("R.raw");
  if ((gfp = fopen("G.raw", "rb")) == NULL)
    cant("G.raw");
  if ((bfp = fopen("B.raw", "rb")) == NULL)
    cant("B.raw");
  if ((outfp = fopen("OUT.raw", "wb")) == NULL)
    cant("OUT.raw");


976 :デフォルトの名無しさん:04/12/26 17:01:21

  while ((r = fgetc(rfp)) != EOF) {
    g = fgetc(gfp);
    b = fgetc(bfp);
    fputc(r, outfp);
    fputc(g, outfp);
    fputc(b, outfp);
  }
  fclose(rfp);
  fclose(gfp);
  fclose(bfp);
  fclose(outf);
  return EXIT_SUCCESS;
}


977 :デフォルトの名無しさん:04/12/26 17:02:46


void cant(char *name)
{
  fprintf(stderr, "ERROR: can't open %s.\n", name);
  exit(EXIT_FAILURE);
}


978 :デフォルトの名無しさん:04/12/26 17:03:35
エラーを標準出力に書くな! ぼけ

カンマの後ろは空白あけろ! ぼけ

) { の間もだ! ぼけ

979 :デフォルトの名無しさん:04/12/26 17:05:36
ぼけぼけうるさいぞぼけ

980 :デフォルトの名無しさん:04/12/26 17:05:54
これ、r以外のgとbはrと同じサイズなので、途中でエラーでないっていう前提のロジックになってる
けど、どうせそういう前提なら
    g = fgetc(gfp);
    b = fgetc(bfp);
    fputc(r, outfp);
    fputc(g, outfp);
    fputc(b, outfp);
この部分は
    fputc(r, outfp);
    fputc(fgetc(gfp), outfp);
    fputc(fgetc(bfp), outfp);
こう書けよな。で余分な変数の宣言2つも消す

981 :デフォルトの名無しさん:04/12/26 17:08:12
通常の関数ではprintf()みたいにつなげて書くのに
if文とかの場合はif () {みたいに空白を入れるのはなぜですか?
あと
if () {
;
}

if ()
{
;
}
はどちらが適してますか?

982 :デフォルトの名無しさん:04/12/26 17:12:53
>>980
たった数バイトケチってまで可読性落とすのよくない

983 :デフォルトの名無しさん:04/12/26 17:13:31
>>981
そんなのどっちでもいい

984 :デフォルトの名無しさん:04/12/26 17:14:48
バカばっかり。

>981
プロジェクトや客先のコーディング規約があればそれに従う。
あとは好み。

985 :デフォルトの名無しさん:04/12/26 17:15:36
>>983
空白は必要ない && {前の改行は必要ない
ってことですか?

986 :デフォルトの名無しさん:04/12/26 17:16:07
>980
間違ったことを教えるなよ。
どうせそういう前提なら、じゃなくて、エラーチェックをするように
勧めるべきだろうが。



一言。アホ。

987 :デフォルトの名無しさん:04/12/26 17:16:52
>>980
自分の頭がそこまで悪い理由を考えたりしてる?

988 :デフォルトの名無しさん:04/12/26 17:17:37
>>984
ははぁ、そういうことなんですね。

989 :デフォルトの名無しさん:04/12/26 17:19:31
> 間違ったことを教えるなよ。
> どうせそういう前提なら、じゃなくて、エラーチェックをするように

いいや、正しい。

990 :デフォルトの名無しさん:04/12/26 17:20:24
> 通常の関数ではprintf()みたいにつなげて書くのに
> if文とかの場合はif () {みたいに空白

このぼけ if分は「通常じゃない関数」だとでも思ってるのだろうか?

991 :デフォルトの名無しさん:04/12/26 17:22:03
> はどちらが適してますか?

前者はカーネルスタイル(k&rスタイル)
後者はオールマンスタイル(bsdスタイル)
まあ、どっちにもまだ慣れていないで
これからなんだったら前者をすすめておく。

まちがってもgnuスタイルやWhiteSmithスタイルにそまらないように!

992 :デフォルトの名無しさん:04/12/26 17:22:54
cのプログラムは

int main(void){}
こう書いても

int main(void){
}
こう書いても結果はおなじ

993 :デフォルトの名無しさん:04/12/26 17:23:00
> あとは好み。

ほんきでこう思い込んでいるんだとしたら、かなりのあほ

994 :デフォルトの名無しさん:04/12/26 17:23:34
> こう書いても結果はおなじ

-gついてるとちがう

995 :デフォルトの名無しさん:04/12/26 17:24:08
>>990
えーと、すいません。
空白を入れない関数が多いのでそれらを空白を入れる関数と比較して
「通常の」というふうに言っただけです。
と、いうことでなぜif, for, whileなどの後には空白を入れるんですかね?


996 :デフォルトの名無しさん:04/12/26 17:24:53
> 空白を入れない関数が多いので

こいつぼけ、入れる関数もあるのかよ!

> 空白を入れる関数と比較して

そんなものはねーよ!

997 :デフォルトの名無しさん:04/12/26 17:25:22
本気でifやwhileを「関数」だと思っているらしいぞ! このおおぼけ

998 :デフォルトの名無しさん:04/12/26 17:26:05
自分が使ってるコーディングスタイルを初心者に押し付けるスレはここですか

999 :デフォルトの名無しさん:04/12/26 17:26:43
1000

1000 :デフォルトの名無しさん:04/12/26 17:26:48
根本的におもいちがいしてるなあ > なぜあけるのとあけない関数があるのか

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

201 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)