トップページ⇒tech
1001コメント237KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

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

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

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

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺に聞け! Part 82
http://pc5.2ch.net/test/read.cgi/tech/1087049069/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさんNGNG
【コンパイラ】
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/

【ライセンスや機能などに問題あり】
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
0003デフォルトの名無しさんNGNG
宿題:
 ぼるじょあがC/C++の宿題を片づけますYO! 25代目
  http://pc5.2ch.net/test/read.cgi/tech/1087929711/

環境依存:
 【初心者歓迎】C/C++室 Ver.7【環境依存OK】
  http://pc5.2ch.net/test/read.cgi/tech/1086373839/

猿:
 【独習C】猿62【猿C言語教室 part7】
  http://pc5.2ch.net/test/read.cgi/tech/1083765346/
GCC:
 GCCについて part3
  http://pc5.2ch.net/test/read.cgi/tech/1072484422/
0004デフォルトの名無しさんNGNG
前スレ >>998 スゲー笑った。
しかも突っ込む機会すら与えない場所だし。
0005デフォルトの名無しさんNGNG
1000で突っ込まれてるけどな
0006デフォルトの名無しさんNGNG
5ゲット 乙
0007デフォルトの名無しさんNGNG
orz
0008デフォルトの名無しさんNGNG
>>1さんお疲れ様です。

前スレ989です。
どうも分からないのですが、
真ん中(count==5)は、その状態の時だけ{}の中が実行されるという意味ではないのですか?

countに5が代入されてしまうのですか?
0009デフォルトの名無しさんNGNG
int count;
for(count=0; count<=5; count) {
    if (count==5) printf("count==%d",count);
}
0010デフォルトの名無しさんNGNG
そりゃif文だ。
forのそれはループの終了条件、
故にtrueになった時点でループから抜け実行されない
00119NGNG
俺もやっちまった orz
0012デフォルトの名無しさんNGNG
>>10
お前もやっちまったw
0013デフォルトの名無しさんNGNG
count = 5 → countに5を代入。式全体は5。
count == 5 → countが5ならtrue(1)。
=と==は別物
0014デフォルトの名無しさんNGNG
int count; 
for(count=0; count<=5; count++) {
    if (count==5) printf("count==%d",count);
}
0015デフォルトの名無しさんNGNG
for(count=0; count<=5; count++);
printf("count==%d",count);
0016デフォルトの名無しさんNGNG
>>15
いやそれだったら count<5 でしょw
俺もそれでいんでね?とか思ったけど
0017デフォルトの名無しさんNGNG
あ、そらそうや
0018デフォルトの名無しさんNGNG
あれだな
テニスでいうとドロップショット打たれましたみたいな。
野球で言うとチェンジアップ打たれましたみたない。

お前ら間違えすぎ
0019デフォルトの名無しさんNGNG
>>10
えっとつまり、count==6にすればいいということですか?

include <stdio.h>
void main()
{

int count;

for(count=0; count==6; count++){
printf("abc\n");
}
}
今度はこれで試してみようとしたらvoidが構文エラーになってしまいました。。
0020デフォルトの名無しさんNGNG
お前ら
いま
輝いてるぞ。
0021デフォルトの名無しさんNGNG
メシでも食って風呂入って、それから考えてみな。
0022デフォルトの名無しさんNGNG
考える前に知識を
0023デフォルトの名無しさんNGNG
>>19
うざいから、もう氏ねよ。
0024デフォルトの名無しさんNGNG
#include <stdio.h>

main(void)
{
int count;
for(count=0; count<=5; count++){
printf("abc\n");
}
return 0;
}
0025デフォルトの名無しさんNGNG
>>19
C言語を使えるようになることはないと思う。あきらめれ。
0026デフォルトの名無しさんNGNG
>>19
自分のスレでやれよ
0027デフォルトの名無しさんNGNG
>>24
ありがとうございます。forのことを勘違いしてたみたいです。
「countが5の時だけ表示」とするのはforだけじゃできないんですね。

#include <stdio.h>

main(void)
{
int count;
for(count=0; count<=6; count++){
if (count==5){
printf("%d\n",count);
}
}
return 0;
}

で出来ました。みなさんありがとうございました。
では。
0028デフォルトの名無しさんNGNG
a = 5;

代入って言い方、変じゃない?
代入かなぁ? って思うよ。
あと、"function"を「関数」って言ったりも変。
全然関数になってないfunctionもあるし。
数学の時の訳を、そのまま使っちゃってるのかな?
元は何て言葉だったのかな? 代入って。
0029デフォルトの名無しさんNGNG
for(count=0;count<=6;if(count==5)printf("%d\n",count);count++);
ほら、for だけで、できている(ように見えるだろ)。
0030デフォルトの名無しさんNGNG
>>28
変なら替わりになんて言葉を使ったらいいんだ
0031デフォルトの名無しさんNGNG
>>28
http://jiten.www.infoseek.co.jp/Kokugo?qt=%C2%E5%C6%FE&sm=1&pg=result_k.html&col=KO&sv=DC
0032デフォルトの名無しさんNGNG
それは一体何言語のソースですか
0033デフォルトの名無しさんNGNG
>>29
全然出来てない
0034デフォルトの名無しさんNGNG
しまった・・・・orz
for(count=0;count<=6;if(count==5)printf("%d\n",count),count++);
0035デフォルトの名無しさんNGNG
お前、アフォかバカかどっちだ?
0036デフォルトの名無しさんNGNG
>>28
電波はここで→http://etc2.2ch.net/denpa/
003734NGNG
アフォです。
0038デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void) {
    int count;
    for(count=0;count<=6;if(count==5)printf("%d\n",count),count++);
    return 0;
}

In function `main':
5: error: syntax error before "if"
0039デフォルトの名無しさんNGNG
for(count=0; (count==5)?printf("%d\n", count),0:1; count++);
だろ。
0040デフォルトの名無しさんNGNG
初歩的ですが教えてください。
ファイルをオープンするというのは内部的には何をやっている
のでしょうか?まさかメモリに読み込んじゃいないですよね?
0041デフォルトの名無しさんNGNG
内部とは?
0042デフォルトの名無しさんNGNG
>>40
ファイル管理システムに「開いたよ」というのを登録してる。
0043デフォルトの名無しさんNGNG
>>40
Oh!Yes!とかパイ乙が何か色々してる。
0044デフォルトの名無しさんNGNG
stdio.h に構造体 FILE の定義が書いてあるよ
0045デフォルトの名無しさんNGNG
int true()
{
 return 1;
};

int false()
{
 return 0;
};

void *null()
{
 return (void *)0;
};

0046デフォルトの名無しさんNGNG
int n, m = 5;
if ( n = m ) { ; }
とやるとif内の評価式はどうなるんでしょうか?n = mが正常に終了したとして 1になるのか、それとも n = mの式自体の値として5でしょうか?
0047デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void) {
    int n, m = 5;
    printf("(n = m) == %d", n = m);
    return 0;
}

$ ./a.out
(n = m) == 5
0048デフォルトの名無しさんNGNG
m = 0 にしてやってみたら分かるやんけ
0049デフォルトの名無しさんNGNG
質問が初歩過ぎてつまらない。
こんな序盤で人にきいてばっかいるなよ。
先ずはマニアル読めよ。
0050デフォルトの名無しさんNGNG
age房はロクな書き込みしてないようだがな。
005146NGNG
>>47-48さん
ありがとうございます。ちょっと手を変えてテストすれば分かることでしたね。
0052デフォルトの名無しさんNGNG
>>49
いいトコをうpしれ
0053(・`ω´・)NGNG
>>40

kernel2.6系fsがext2なら
 open(2)
 sys_open
 filp_open
 dentry_open #ext2ならこの中で
 generic_file_open
0054デフォルトの名無しさんNGNG
おじゃまします。。
自分でMPIの勉強をして来いといわれたので、
Windows上で動くバーチャルマシンのようなものを
探しているのですが、いいものをご存知でしょうか?
よろしくおねがいします。。
0055デフォルトの名無しさんNGNG
>>54
ワラタ
005640NGNG
>>42
レスどうもです。
なるほど。それでもしかして排他制御とかできるんですかね。
0057デフォルトの名無しさんNGNG
#include <stdio.h>
int main(){char a[99],b[99],*e="+-*/",*f;int s=0,c;float m=0,n;while(1){printf(
"%f :",m);fgets(a,99,stdin)?0:exit(0);if(sscanf(a,"%s",b)>0){if(sscanf(b,"%f",
&n)>0){m=s?c?c-1?c-2?m/n:m*n:m-n:m+n:n;s=0;continue;}else{if(!b[1] && (f=strchr
(e,*b))){s=1;c=f-e;continue;}}}*a-'q'?0:exit(0);puts("Input errror (type 'q' t"
"o exit)");}}
このプログラム以前作ってもらったやつだが、コンパイルできん。
コピペじゃいかんのか?
初心者で全然わからん
0058デフォルトの名無しさんNGNG
ハーマオイニーたんカワイイ
0059デフォルトの名無しさんNGNG
>>53
犬厨は環境依存スレにGO
0060デフォルトの名無しさんNGNG
>>57
ここは暗号解読スレじゃないよ
0061デフォルトの名無しさんNGNG
#include <stdio.h>
#if 0
int main(){char a[99],b[99],*e="+-*/",*f;int s=0,c;float m=0,n;while(1){printf(
"%f :",m);fgets(a,99,stdin)?0:exit(0);if(sscanf(a,"%s",b)>0){if(sscanf(b,"%f",
&n)>0){m=s?c?c-1?c-2?m/n:m*n:m-n:m+n:n;s=0;continue;}else{if(!b[1] && (f=strchr
(e,*b))){s=1;c=f-e;continue;}}}*a-'q'?0:exit(0);puts("Input errror (type 'q' t"
"o exit)");}}
#else
int main(){return 0;}
#endif

これならコンパイルできるぞ
0062デフォルトの名無しさんNGNG
>>57
コンパイラが腐ってるんだろ。うちではコンパイル通った
0063デフォルトの名無しさんNGNG
>>61
サンクス。そっちでやってみる
>>62
悪い、もう一回やってみるよ
0064デフォルトの名無しさんNGNG
>>63
そっちのやるとコンパイラが壊れるぞ。
0065デフォルトの名無しさんNGNG
>    m = s ? c ? c - 1 ? c - 2 ? m / n : m * n : m - n : m + n : n;
こんな書き方見たことない・・・
多分内側から順番に展開されると思うんですけど、最終的にどうなるんですか?
    m =     s ? m + n:
            c ? m - n:
        c - 1 ? m * n:
        c - 2 ? m / n:
                n;
インデント崩れると思いますので↑エディタにコピペして見てください
0066 NGNG
>>65
それちがう。

if (s) {
 if (c) {
  if (c - 1) {
   if (c - 2) {
    m = m / n;
   }
   else {
    m = m * n;
   }
  }
  else {
   m = m - n;
  }
 }
 else {
  m = m + n;
 }
}
else {
 m = n;
}

と同じ。
0067デフォルトの名無しさんNGNG
 m =    s ?    c ? m - n:
          c - 1 ? m * n:
          c - 2 ? m / n:
    m + n: n;
三項演算子で展開するのはここまでが限界かな。
0068デフォルトの名無しさんNGNG
#define __TEXT(q) L##q
となっている場合に__TEXT("hoge")はどのような展開をされるんですか?
また、ここでの##とはどういう意味を持つのでしょうか?
Googleで検索しにくい(記号を含むため)ので、どうかご教示下さい.
0069デフォルトの名無しさんNGNG
>>68
http://black.sakura.ne.jp/~third/programming/c/c42.html
0070デフォルトの名無しさんNGNG
>>61
コンパイルできたが、実行してもできん
電卓のシュミレーターなんだが
0071デフォルトの名無しさんNGNG
>69
トークン連結演算子と言うんですね。ありがとうございます
0072デフォルトの名無しさんNGNG
if文でbreakは使ってもいいんですか?
おしえてください。
0073デフォルトの名無しさんNGNG
if文から抜けるってこと
0074デフォルトの名無しさんNGNG
hyouka(int point){
if(point>10){return('A');break;}
if(point>=7){return('B');break;}
if(point>=4){return('C');break;}
if(point<=3){return('D');break;}
}
この関数は正常に実行されますかね?
0075デフォルトの名無しさんNGNG
break文について書いてある入門書を読むことをお勧めする。
007672,74NGNG
ごめんなさい
char hyouka(int point){
if(point>10){return('A');break;}
if(point>=7){return('B');break;}
if(point>=4){return('C');break;}
if(point<=3){return('D');break;}
}
の間違いです。
で、これは実行されますかね?
0077デフォルトの名無しさんNGNG
基本的に、breakはループから抜けるために使うのですよ。
普通は、while, for文などから抜けるために使用します。
returnは、関数から抜けるのに使用します。
はっきり言って、>74のプログラムはおかしいと思います。
0078デフォルトの名無しさんNGNG
for(i = 0; i < 2; i++) {
switch(i) {
case 0: break;
}
}
007972,74,76NGNG
入門書を読んだのですがあまりif文中にbreakを使っている例がなくて
こまってます。
でも使っちゃいけないともかいてないのでさらに困るわけです。
008072,74,76,79NGNG
>>77
サンクスです。
今日のテスト激しく減点のヨカーン・・・(TT)
0081デフォルトの名無しさんNGNG
>>76
なんでふつーにswitchつかわんの?
0082デフォルトの名無しさんNGNG
>76
の場合だと、
char hyouka(int point){
if(point>10){return('A');}
if(point>=7){return('B');}
if(point>=4){return('C');}
if(point<=3){return('D');}
}
で十分では?
returnが実行された時点で、
hyoukaという関数を抜けるので、
breakはまったく意味がないと思います。
0083デフォルトの名無しさんNGNG
おまえ、コンパイルしてみてから来いよ。
008472,74,76,79NGNG
>>82
言われてみれば確かに・・・elseも必要ないみたいですね。
>>83
今日テストがあって(ペーパー)今家に帰ってきたんですが、
家ではできないんですよ。
なんとかすりゃできるのかも知れませんが初心者なもんで・・
0085デフォルトの名無しさんNGNG
>>79
K&R訳書版第二版281ページ
0086デフォルトの名無しさんNGNG
ここからは

C言語ならK&Rに聞け! Part 83

に改編しました
0087デフォルトの名無しさんNGNG
>>79
明らかに釣りだな

おまえ要するに break/goto を使っちゃいけない
理由を誰かに聞かれて返答できなくて
本読んでもわからなくて、
ここへ聞きに来たんだろ

で、ご予算は?
008872,74,76,79NGNG
K&R プログラミング言語C
ってうちの教授が推奨してました。
ちなみに僕は 「定本 明解C言語 入門編」
を持ってます。
ま、どうでもいいですよね。
0089デフォルトの名無しさんNGNG
>79
その入門書はかぎりなくへぼいような気がする。。。
他の入門書を買うことをおすすめする。
009072,74,76,79NGNG
>>87
違います。いや、ほんとに。
0091デフォルトの名無しさんNGNG
>>88
みつまジャパン発見
0092デフォルトの名無しさんNGNG
fgetcとgetcの違い、使い分けがあれば教えていただけませんか?
009372,74,76,79NGNG
>>81
スイッチでもいいんですが、ifを使いたかったんです。
理由は、switchよりもifを先に習ったので。
0094デフォルトの名無しさんNGNG
>>92
stdinをfgetcするのがgetc。
0095デフォルトの名無しさんNGNG
ここだとswitchかえって面倒

0096デフォルトの名無しさんNGNG
K&R原書はCの開発者本人が書いた仕様書付きの書籍で
我々が言っているK&Rはその原書をベル研に出向していた人が訳した本

K&R以外のCの本はパチもん
0097デフォルトの名無しさんNGNG
最後の
>if(point<=3){return('D');}
は、
return('D');
でいいんだろ。
0098デフォルトの名無しさんNGNG
>>97
>言われてみれば確かに・・・elseも必要ないみたいですね。

彼(彼女?)はきっとこれをelseだと解釈しているみたい
009992NGNG
>>94
ん〜、よく分からん
両方こういう書き方でfpから1文字入力。戻り値は正常なら入力された文字、エラーならEOFですよね
int getc(FILE *fp)
int fgetc(FILE *fp)

stdinが関係ありそうなのはgetsとfgetsじゃないんですか?
0100デフォルトの名無しさんNGNG
>>76
何のために break したがってるのかがわからん。
010172,74,76,79NGNG
ですよね。
でもいろいろわかりました。
ありがとうございました。
0102デフォルトの名無しさんNGNG
同じエラー処理を延々何度も書き連ねるよりもgotoを使ったほうが余程良い
0103デフォルトの名無しさんNGNG
>>92
getcはマクロを使って実装されているかもしれない。
そのため、
・副作用のある引数を渡した場合に予期しない状態になるかもしれない
・getcの関数ポインタを取得できないかもしれない
(ほかに影響があるかもしれないけど)
通常使う分にはどちらを使ってもかまわないと思うけど、どちらかと言うと
fgetcの方が安心かも。
0104デフォルトの名無しさんNGNG
92 ではないが、マクロのgetc を使う利点ってのはなんだろ?
どこにも過去の互換性などという言葉がでてこないから、
なにかあるがために、マクロのgetc と関数のfgetc がある
わけだよね。 あんで?
0105デフォルトの名無しさんNGNG
は?fgetcはFILE(ファイルだったりstdin/outだったり)から読むんでしょ
0106デフォルトの名無しさんNGNG
うわ、違うジャン

使わないものは忘れるのね(逃
0107デフォルトの名無しさんNGNG
>・副作用のある引数を渡した場合に予期しない状態になるかもしれない
>・getcの関数ポインタを取得できないかもしれない
ここらへんって標準ライブラリの仕様として何か規定があるの?
それとも一切縛りなし?
0108デフォルトの名無しさんNGNG
手元の解説書には、「マクロとして実装される場合があることを除き、getcはfgetcと等価」と書いてある。
0109デフォルトの名無しさんNGNG
よく聞くのは、関数呼び出しよりもマクロの方が速いからという理由。
ベンチとったこと無いから分からんが、今じゃほとんど変わらないのでは
という気もしなくは無い。
0110デフォルトの名無しさんNGNG
call 〜 retのオーバーヘッドが気になる場合にはgetc()のほうがいいかも。
ループ内で数億回まわしたら差が体感出来るかもしれない。
0111デフォルトの名無しさんNGNG
#define getc(a) fgetc(a)
かもしれない。
011292NGNG
初心者は何も考えずfgetc使っとけ、ってことでいいですか?
0113デフォルトの名無しさんNGNG
>>112
標準入力を扱うんであれば普通にgetcでいいと思うよ。
0114デフォルトの名無しさんNGNG
>>113
getchar と勘違いしてない?
0115デフォルトの名無しさんNGNG
>>114
ゲットカーってよむの?
0116デフォルトの名無しさんNGNG
>>109-110
昔は16ビットのCPUでクロック12MHzとか言ってたわけで。
マクロと関数の速度差を身をもって体験した奴も多かったんじゃないかな。
今となっては、仰せのとおりで。
0117デフォルトの名無しさんNGNG
ゲットチャーってよむんだよ、ばーか。
0118デフォルトの名無しさんNGNG
ゲッチャーだろ
0119デフォルトの名無しさんNGNG
キャラじゃなくて?
characterのcharだろ?
0120デフォルトの名無しさんNGNG
ゲットシャーだお
0121デフォルトの名無しさんNGNG
プログラムのビデオ見せられたとき
char は 「キャー」と読んでたので
ゲットキャーじゃねーの?
0122デフォルトの名無しさんNGNG
>>119
じゃあ fgets() は げっとす か?
0123デフォルトの名無しさんNGNG
>>121
ネイティブな発音だとゲッキャーくらいになるのかね?
0124デフォルトの名無しさんNGNG
>>121
Cのビデオなんて、
あなたはHな人ですね。
0125デフォルトの名無しさんNGNG
>>122
エフゲッツでしょ
0126ダンディNGNG
呼んだ?
0127デフォルトの名無しさんNGNG
お帰りください
ttp://pc5.2ch.net/test/read.cgi/tech/1086391838/l50
0128デフォルトの名無しさんNGNG
> 旧MacOSは改行コードが\rだった。

これはうそ。いまのMacOSでもAqua側のアプリケイションでかけばふつうに0x0dです。
そういえば、昔懐かしいOS/9も0x0dですね。MC68000用が出たところまでは覚えてる
んだけどその後どうなったのだろう?

> CP/M-86は改行コードが\r\nで、ファイル末尾のレコードは\x1bが詰められていた。

CP/Mにかぎらず、汎用機系は多かったね。末尾の0x1aは、テキストファイルにかぎった
もので、ディレクトリーにファイルサイズが書いてなかったので、セクターブロック単位
でしか、「ここが終わり」がわからなかっただめです。

> MS-DOSもファイル末尾に\x1bが付加されているのが普通だった。

これは大うそ。MS-DOSでそんなものをつけるのは、edlin.exeだけです。
(あとは、それをみて勘違いした日本のごく一部のソフトだけ。)
0129デフォルトの名無しさんNGNG
> 943 :デフォルトの名無しさん :04/06/25 14:28
> K&Rを真似てvoid mainにしたら散々こき下ろされますタ。

こいつもウソつき。そんなことは書いてない。
0130デフォルトの名無しさんNGNG
あっそ
0131デフォルトの名無しさんNGNG
> 全然関数になってないfunctionもあるし。
> 数学の時の訳を、そのまま使っちゃってるのかな?

もとの英語でも数学用語の流用的に「function」と「assign」を使っているのだから、
「函数」「代入」「添字」と訳すのは「正しい」

まあ、化学で、酸と塩基が結合してできる「塩」(えん)は、
英語ではなんていうか知ってるか?
0132デフォルトの名無しさんNGNG
なんか誤爆されまくりの様相
0133デフォルトの名無しさんNGNG
一日中張り付いてるわけにもいかないからひとまず前スレに突っ込み入れてるんでしょう
>>128は少し参考になった。Cとはほとんど関係ないけど
0134デフォルトの名無しさんNGNG
ありがとうございます。正しく空白をあけたらコンパイルできました。
#include <stdio.h>

int main()
{
  char a[99], b[99], *e = "+-*/", *f;
  int s = 0, c;
  float m = 0, n;

  while (1) {
    printf("%f :", m);
    fgets(a, 99, stdin) ? 0 : exit(0);
    if (sscanf(a, "%s", b) > 0) {
      if (sscanf(b, "%f", &n) > 0) {
        m = s ? c ? c - 1 ? c - 2 ? m / n : m * n : m - n : m + n : n;
        s = 0;
        continue;
      }
      else {
        if (!b[1] && (f = strchr(e, *b))) {
          s = 1;
          c = f - e;
          continue;
        }
      }
    }
    *a - 'q' ? 0 : exit(0);
    puts("Input errror (type 'q' to exit)");
  }
}
0135デフォルトの名無しさんNGNG
> K&R訳書版第二版281ページ

やーい > 訳本

へぼ
0136デフォルトの名無しさんNGNG
> よく聞くのは、関数呼び出しよりもマクロの方が速いからという理由。

いまどきinline関数で実装するのがふつうだろぼけ > gets
0137デフォルトの名無しさんNGNG
>>135
つーかおまいはあれか。キーボードスレ荒らしてた阿呆か。
0138デフォルトの名無しさんNGNG
最近、どーでもいい所に出てきて荒らす奴は全員生越に見えてきた。やばいねー。
0139デフォルトの名無しさんNGNG
ogo氏は先週亡くなりました。
0140デフォルトの名無しさんNGNG
え、本当?うわーい、犬板のスレ見てこよう。
0141デフォルトの名無しさんNGNG
えらそうにK&Rのページ数言ってるのがいいのだが、
それが訳本のほうだというのが、かなりはずかしい ;-)
0142デフォルトの名無しさんNGNG
貴様は日下部かと
0143デフォルトの名無しさんNGNG
ちゃんぺ
0144デフォルトの名無しさんNGNG
函数は「function」の音訳だ。
なるべく発音が似るように
0145デフォルトの名無しさんNGNG
犬板から生越のスレが消えてた!残念!
0146デフォルトの名無しさんNGNG
unsigned short a, b;

a = b - 1;
のような場合でも、右辺は一旦intに格上げされるんですか?
VCで-W4でコンパイルするとウォーニング出るんですけど。
0147デフォルトの名無しさんNGNG
ウォーニングきたー
0148デフォルトの名無しさんNGNG
ようするに技術的な内容には答えられないやつなのね
0149デフォルトの名無しさんNGNG
VC2003 /W4
警告でません
0150デフォルトの名無しさんNGNG
>>131
> まあ、化学で、酸と塩基が結合してできる「塩」(えん)は、
> 英語ではなんていうか知ってるか?
base
0151デフォルトの名無しさんNGNG
>>135
原書で読めよ…
0152デフォルトの名無しさんNGNG
ついでに言えばVMwareスレを荒らしてたのもおまいか。

って流石にアレは馬鹿すぎたから違うな…。
0153デフォルトの名無しさんNGNG
構造体のメンバ値を構造体定義時に決めることは出来ませんか?
struct hoge { int n = 0; };というようにしたいのですが、これではコンパイルエラーが出ます。
0154デフォルトの名無しさんNGNG
strlenはなんて読む?
ストアレンが大半かな?
0155デフォルトの名無しさんNGNG
ランタイムライブラリとWIN32APIの特徴って何?
APIがDLLであるってだけですか?
また、マルチスレッドなプログラムではAPIは使えないって見たけど、
それはなぜですか?
0156デフォルトの名無しさんNGNG
>>155
> ランタイムライブラリとWIN32APIの特徴って何?
さあ
> マルチスレッドなプログラムではAPIは使えないって見たけど、それはなぜですか?
排他処理の問題
0157デフォルトの名無しさんNGNG
Win32APIはスレッドセーフだよ
0158デフォルトの名無しさんNGNG
>>155
WIN32APIスレで聞いた方がよかったような

 ランタイムライブラリ
ANSIで定められたもの+αを収録。なのでWindowsでない環境でも殆どは同じ関数がある。
 WIN32API
ANSI C/C++はWindowsのコマンドプロンプトみたいな文字列しか入出力できない環境を想定していているから
ウィンドウ・マルチスレッドなど、Windows環境限定だったりOSとして用意しておいた方がよさそうな物だったりが中心。
0159デフォルトの名無しさんNGNG
>>136
getcの話してんだろボケ
0160デフォルトの名無しさんNGNG
>>153
struct hoge {
 int n;
 int b;
} hage[]={{0,1},{1,2}};
0161デフォルトの名無しさんNGNG
%をstdoutに出力したいのですが,どうすればいいのでしょうか….
printf("文字列%文字列");
printf("文字列\%文字列");
では,いずれも無理なのですが…。
0162デフォルトの名無しさんNGNG
%%
0163161NGNG
>>162 ありがとm(__)m
0164デフォルトの名無しさんNGNG
> strlenはなんて読む?
> ストアレンが大半かな?

なんで「str」が「すとあ」なんだ?
じゃあstrcmpやstrstrもそう読むのか?

なんかstrore.hでもインクルードしそうだな。

> base
それは塩基だろ
0165デフォルトの名無しさんNGNG
> getcの話してんだろボケ

getcの話にきまってるだろ
0166デフォルトの名無しさんNGNG
アセンブラスレに、今時アセンブラなんてなんの意味があるんですか?
とかぬかすドキュンが絶えず流れこんでくるんだが、おまえらどうにかしろよ。
最近じゃアセンブラもかけないCプログラマがいるっていう話らしいからな。
全部おまえらのせい。
0167デフォルトの名無しさんNGNG
読み方と言えばブラシハンドル(HBRUSH)を
ハブラシって読んでる。脳内では。

口には出せないが…
0168デフォルトの名無しさんNGNG
>>165
ハァ?
何いってんの?
よく読んでみろよ
0169デフォルトの名無しさんNGNG
>>161,162

printf("%s", "文字列%文字列");

第一引数にベタ書きするなよボケ。
0170デフォルトの名無しさんNGNG
読む読まないは関係なく、getcの話に決まってるだろ。
getcはいまどきinline関数で実装するのが常識。マクロにはしない
0171デフォルトの名無しさんNGNG
> 第一引数にベタ書きするなよボケ。

ふつうする。
0172デフォルトの名無しさんNGNG
たまに
printf(s);
とか見かけるとさすがにそれはないんじゃないかと思う。
0173デフォルトの名無しさんNGNG
>>170
ハァ?
だから>>136 はgetsの話してるだろ

0174デフォルトの名無しさんNGNG
putsでいいじゃん。
0175デフォルトの名無しさんNGNG
printf(a, b);はよくやるけどなあ
0176デフォルトの名無しさんNGNG
printf("%s\n", "HELLO, WORLD.");
0177デフォルトの名無しさんNGNG
>>174
改行なしputs作れよボケ。
0178デフォルトの名無しさんNGNG
putsは改行するところがいいんだろ
0179デフォルトの名無しさんNGNG
puts(char *s)
{
printf("%s", s);
}
0180デフォルトの名無しさんNGNG
ベタ書きのクセがついてるプログラマがフォーマットストリングバグの温床
0181デフォルトの名無しさんNGNG
マクロかどうかなんて関係あっちゃいけねえんだよ
マクロにすることによって

 原 仕 様 が 守 れ な い

ようなら、それはベンダの責任範囲に属するバグだ

ユーザ側でするべきことはコンパイラのバグに対するのと同類の対策であり
決してそれが正しいと思ってはならない
0182デフォルトの名無しさんNGNG
> マクロかどうかなんて関係あっちゃいけねえんだよ
> マクロにすることによって
> 原 仕 様 が 守 れ な い

っていうか、もともとのCのgetcはマクロで実装されてただろ
0183デフォルトの名無しさんNGNG
#define puts(s) fputs(s, stdout)
0184デフォルトの名無しさんNGNG
goto使う時点で設計ミスだな。
僕一人では何もできないよママン・・・か?w
0185デフォルトの名無しさんNGNG
>>182
お前の言う「もともとのC」とは何のことだ
0186デフォルトの名無しさんNGNG
>>180
printf(szStr);とかは駄目だが、printf("String");は別に良いだろ。
0187デフォルトの名無しさんNGNG
>>186
おれもそう思う
何が危険かがわかってないやつほど
#define OK (0)
return (OK);
とか書くのと同じ

ただし、リテラルを埋め込みで使うこと自体に
別な意味で抵抗がある場面もある
0188デフォルトの名無しさんNGNG
キチガイにマジレスはいらない。
0189デフォルトの名無しさんNGNG
>>188 は、誰に噛み付いているのかも示せないチキン君
0190デフォルトの名無しさんNGNG
どうしてプログラマってみんな
パチンコが嫌いなの?
何か理由があるのかな?
0191デフォルトの名無しさんNGNG
>>190
論理的に負けるのが分かってるからじゃない?
0192デフォルトの名無しさんNGNG
>>181
仕様では
「基本的にはfgetsと同等だけど、マクロで実装されてるかもしれないから注意してね」
だろ。
0193デフォルトの名無しさんNGNG
煙が立ち込める環境が嫌い
うるさいの嫌い
何より、そんな金ない
0194デフォルトの名無しさんNGNG
>>192
何で口語に訳す必要があるんだ? 原文がなからだろ、どーせ
0195デフォルトの名無しさんNGNG
>>190
そんなんやってる時間がない。
0196デフォルトの名無しさんNGNG
>>192
テメエわざとか?
getsとfgetsの話だって言ってんだろボケ!
0197デフォルトの名無しさんNGNG
>>192
テメエわざとか?
getsとfgetsの話だって言ってんだろボケ!
0198デフォルトの名無しさんNGNG
>>196
おお、それは見落としていた
確かにそうだ

どっちにしても同じことだが
0199デフォルトの名無しさんNGNG
>>198
バカか?とっくに気づいてたぞ。
0200デフォルトの名無しさんNGNG
このスレには、cとsの区別が付かない人が多いようですね(藁
0201デフォルトの名無しさんNGNG
> 何が危険かがわかってないやつほど
> #define OK (0)
> return (OK);

で、何が危険なの?
どっちもまあ括弧はいらないが、つけて「危険」だとは思えない。
(前者は(-1)とか(c + 1)とかなら括弧は必須だろうし、後者の場合は、まあ長いときに
見やすくするために括弧つける程度だろうなあ)
0202デフォルトの名無しさんNGNG
> お前の言う「もともとのC」とは何のことだ

ベストセラーの本の名前では?
0203デフォルトの名無しさんNGNG
portable Cのころもマクロだったなあ
0204デフォルトの名無しさんNGNG
>>201

>で、何が危険なの?
(・∀・)ニヤニヤ

>見やすくするために
プププ
0205デフォルトの名無しさんNGNG
>>202
名指しできない時点で終わったな
ばいばい
0206デフォルトの名無しさんNGNG
たしかに「おまえ」じゃあ名指しにはならんな。
0207デフォルトの名無しさんNGNG
>>204
初心者の俺に是非教えてくれ
0208デフォルトの名無しさんNGNG
CやC++で括弧のすぐ内側に空白あけるやつってVB厨あがりらしいんですが、
VBではそういうふうに書くのが流行っているのですか?
わたしがVBを使ったことがあるのはかなり昔で、そのころはそんなのは見たことなかったのですが...
0209デフォルトの名無しさんNGNG
何で仕様に書いてあることをそのまま理解できないやつばかり難だ。
0210デフォルトの名無しさんNGNG
おいしいよね > なん
0211デフォルトの名無しさんNGNG
>>209
仕様書なんか読んでないアマだから
0212デフォルトの名無しさんNGNG
>>210
志村、後ろ後ろ!
と真顔で言うタイプだな
0213デフォルトの名無しさんNGNG
仕様書みたけど
#define HOGE (0)
が危険だなんて書いてなかったぞ
0214デフォルトの名無しさんNGNG
>>206
おまえ、スレよんでないだろ。
0215デフォルトの名無しさんNGNG
古いですね、もうすれ5の時代ですよ > すれよん
0216デフォルトの名無しさんNGNG
でもいまどきのgetcはマクロなんかで実装しませんよ。
inline関数なら、べつに引数の副作用なんか気をつけなくても平気でしょ?
0217デフォルトの名無しさんNGNG
gets/putsは、改行とりのぞいて/改行つけくわえて くれるから便利だよね。
fgets/fputsほどは使わないけど。(getsがすごく危険なので)
0218デフォルトの名無しさんNGNG
おなじまくろでもgetcharなら使うけど、
getcがマクロ実装のとき、つかわないですよねfgetcにしちゃう。
0219デフォルトの名無しさんNGNG
#undef
0220デフォルトの名無しさんNGNG
(getc)
0221デフォルトの名無しさんNGNG
>>216
そんなんいちいち気にしてられるか。
0222デフォルトの名無しさんNGNG
ごまかしたいからといって、そんなこといっても無駄です > 221
0223デフォルトの名無しさんNGNG
>>186
何故いけないの?szStrに%が混入しても分かりにくいから?

>>187
可読性を下げる(本人は上げようとしてるつもり)以外に悪い理由は?
0224デフォルトの名無しさんNGNG
>>223
変態の相手はごめんだ
あっちいけ しっしっ
0225デフォルトの名無しさんNGNG
お、224はかなり都合がわるくなってきたな? ;-)
0226デフォルトの名無しさんNGNG
個人的には、OK=0と決め打ちされるのは嫌。
0227デフォルトの名無しさんNGNG
size_tはいいが、
ptr_diffって名前が長すぎると思わない?
0228デフォルトの名無しさんNGNG
> 個人的には、OK=0と決め打ちされるのは嫌。

はあ? こいつバカか...
0229デフォルトの名無しさんNGNG
きめないからdefineするんだろうが
0230デフォルトの名無しさんNGNG
fopen(filename,"r+");
でファイルから読み込みを行って,その次に書き込みを行おうとするときに
fopenやfflushを使用しないとうまくいかないというのは何故でしょうか.
0231デフォルトの名無しさんNGNG
>>227
Win32APIプログラミングやればWIN32_FIND_DATA型なんてのも出てくるからもう慣れた
0232デフォルトの名無しさんNGNG
OK(というか、正常終了)時には0以外を返したいこともあるじゃん。
0233デフォルトの名無しさんNGNG
>>225
ほう、俺が都合が悪くなったらそんなに嬉しいか
あんたに出来ないことをやってくれるスーパーマンでも現れたか?
0234230NGNG
fopenやfflush
訂正
fseekやfflush
0235デフォルトの名無しさんNGNG
>>224
あのー、ここは質問スレなんですけど。変態初心者の巣ですよ。

>>223の後者のほうは
#define BEGIN {
#define END }
if (hoge) BEGIN
.....
END
と同様なんじゃないかと。アホかと思う書き方だがなんとか読んで読めなくはない。
ただ唯一違うのは、関数が正常値として0を返す物だと決めてかかってること?
0236230NGNG
もうひとつ質問なのですが,
元々あったファイルに別の内容を挿入したいのですが,fopenでmodeにr+を
指定すると,元々あったデータが上書きされて消えてしまって困っているのですが
解決策は何かあるのでしょうか?
ちなみにファイルに出力したいのはstdinの内容でそのフォーマットは特に決まって
おりません.
0237デフォルトの名無しさんNGNG
>>230
http://www.kouno.jp/home/c_faq/c12.html#30
この辺のこと?
0238230NGNG
>>237
ありがとうございました.
どうやら私がやろうとしていることは無理なようでね.
別の方法を考えます.
0239デフォルトの名無しさんNGNG
K&R日本語版、p176の install函数って正しいですか?
/* 見つからなかった */時の、登録手続きが変な気がするのですが。
0240デフォルトの名無しさんNGNG
マルチになりますが、すいません
C言語をCASL�Uに書き換え可能なソフト知ってる?
0241デフォルトの名無しさんNGNG
アセンブラ… (;´Д`) ハァハァ
http://pc5.2ch.net/test/read.cgi/tech/1087897801/128
0242デフォルトの名無しさんNGNG
目的が一目瞭然だな。
しかし、
0243デフォルトの名無しさんNGNG
>>240
お前はプログラムングにむいてないから、
なるべく早い段階で手を引いた方がいいよ。
0244デフォルトの名無しさんNGNG
struct hoge *phoge;
int i;
for(i = 0; i < 10; i++)
 ++phoge = (struct hoge *) malloc(sizeof(struct hoge));

というようなコードをgccでコンパイルすると、左辺が異常としてハネられます。

for(i = 0; i < 10; i++) {
 ++phoge;
 phoge = (struct hoge *) malloc(sizeof(struct hoge));
}

のようにポインタのインクリメントとメモリ割り当てを別々に行うと大丈夫です。
最初の書き方に曖昧な点は無いと思うんですが、何がいけないのですか?
出来れば一行にすっきりまとめたいと思うのですが…。
0245デフォルトの名無しさんNGNG
プログラマってどうして
韓国が嫌いな人が多いんですかね?
私の知り合いのプログラマもみんなして
韓国が嫌いとか言っているのですが。
0246デフォルトの名無しさんNGNG
氏ね
0247デフォルトの名無しさんNGNG
>>245
プログラマは韓国が発祥の地だからですよ
0248デフォルトの名無しさんNGNG
集団強盗スリしたり飲酒して車暴走させて人撥ねまくったり
勝手にコード拾って組み込んだり(しかもGPL!!)無能だし
いったい韓国人はどうなってるんだ。
0249デフォルトの名無しさんNGNG
>>244
for(i = 0; i < 10; i++, phoge++)
 phoge = (struct hoge *) malloc(sizeof(struct hoge));

でいいじゃん。
0250デフォルトの名無しさんNGNG
>>244
そもそも、そんなプログラムを書いたらだめだ。
0251デフォルトの名無しさんNGNG
>>244
 ++phoge = (struct hoge *) malloc(sizeof(struct hoge));

あなたを意図にわからん

というのと同じくらい無茶苦茶だ
0252デフォルトの名無しさんNGNG
phoge = malloc(sizeod(struct hoge) * 10);
でいいんじゃねーの?
0253デフォルトの名無しさんNGNG
×sizeod
○sizeof
0254デフォルトの名無しさんNGNG
Shift+BSで前の書き込みを呼び出すのはなんとかしてくれ。せめてオプションにして欲しい。
HHKを使ってるんでほんの少しのタイプミスで書き込み全部消えちゃう。。。
仕方ないから長文を書くときは他のエディタで編集してコピペしてるけど、これじゃ2chブラウザの意味半減。。
0255デフォルトの名無しさんNGNG
ウホッ!はげしく誤爆
0256デフォルトの名無しさんNGNG
>>254
チョコラBB?
0257244NGNG
返答ありがとうございます。

>>249
malloc()の左辺でやるのは無理ということでしょうか?

>>250-251
動的に数の決まる構造体にメモリを割り当てつつそれらを初期化する関数を書いているんですが、
こういう場合普通はどうするものなんでしょうか。単純に二つ以上の文に分割するものですか?

>>252
上に挙げた理由で、それは難しいです。
phoge = malloc(sizeof(struct hoge) * countNeededStructures());
というようにすれば出来なくはないと思いますが、この場合あまり意味がありません。
と言ってしまえば一文に詰め込むのにもたいした意味は無いんですけど…。
0258デフォルトの名無しさんNGNG
>>244
お前がやりたいのは↓じゃねーか?

struct hoge *phoge[10];
int i;
for(i = 0; i < 10; i++)
 phoge[i] = (struct hoge *) malloc(sizeof(struct hoge));
0259デフォルトの名無しさんNGNG
>>258
あーあ、こたえちゃった。芋づる釣りシュウリョー。
0260デフォルトの名無しさんNGNG
>>258
それをやるなら>252でも同じ。

ほんとに動的にメモリ確保するなら、リスト構造とかで管理しなきゃだめだ。
0261デフォルトの名無しさんNGNG
>>257
>phoge = malloc(sizeof(struct hoge) * countNeededStructures());
>というようにすれば出来なくはないと思いますが、この場合あまり意味がありません。

なぜ意味がないのか言ってみろ。
0262デフォルトの名無しさんNGNG
お前らコミュニケーション下手すぎ
0263デフォルトの名無しさんNGNG
for の終了条件を 10 とハードコーディングしている時点で、動的とはいえない。
0264244NGNG
>>260
一応、領域をポインタ列として確保することでリスト構造のようなものを目指しているんですが、それが間違いの元なのかもしれません。

>>261
最初に必要となる構造体数を数えずに「まだ構造体が必要か?」「要る」「じゃ、割り当てる」という方向性を取っているから、です。
つまり、必要となる構造体数を数え上げるのに必要な時間・空間コストをケチるために必要性判定と割り当てを並行してやっています。


>>263
余計な部分を省いて論点"インクリメントしたポインタへのmalloc()が許されないのは何故か?"を明確にするつもりでした。
実際のコードでは構造体が必要かどうかの条件判定をしています。
0265244NGNG
書き込み途中で送信してしまいました。

最初に必要となる構造体数を数えずに「まだ構造体が必要か?」「要る」「じゃ、割り当てる」という方向性を取っているから、です。
つまり、必要となる構造体数を数え上げるのに必要な時間・空間コストをケチるために必要性判定と割り当てを並行してやっています。
+予め必要数を計算する方式にすると、計算に使ったデータ(構造体初期化に使う)の保存場所として別に領域群を確保する必要が出る等、
+更に煩雑化してしまいますので、出来れば避けたいのです。そういう状況に陥る事自体がおかしいのかもしれませんけど、残念ながら
+他の解決法を思いつきませんでした。
0266デフォルトの名無しさんNGNG
>>265
普通に考えられる方法はは2つ。

1.>>258 のように、あらかじめポインタの配列を確保しておき、その配列にmallocで確保した領域へのポインタを入れていく。
2.リンクリストと、その処理関数をつくり、確保した領域へのポインタをnodeに持たせて管理する。
0267デフォルトの名無しさんNGNG
244のコードからは
> 必要となる構造体数を数え上げるのに必要な時間・空間コストをケチるために必要性判定と割り当てを並行してやっています。
の片鱗もうかがえないのだが。
0268デフォルトの名無しさんNGNG
> #define BEGIN {
> #define END }
> と同様なんじゃないかと。

だーかーらー...そんな定義するのはアホだってば、
2行めが違ってるじゃん。
0269デフォルトの名無しさんNGNG
> for(i = 0; i < 10; i++)

空白あけろ ぼけ

> phoge[i] = (struct hoge *) malloc(sizeof(struct hoge));

空白あけるな ぼけ
0270デフォルトの名無しさんNGNG
> アセンブラ… (;´Д`) ハァハァ

妹の名前はコンパイラ
0271デフォルトの名無しさんNGNG
> HHKを使ってるんでほんの少しのタイプミスで書き込み全部消えちゃう。。。

もったないのでわたしにください。
0272デフォルトの名無しさんNGNG
> つまり、必要となる構造体数を数え上げるのに必要な時間・空間コストをケチるために必要性判定と割り当てを並行してやっています。

それが「動的メモリー割り当て」の醍醐味ってもんだろ?
0273244NGNG
>>266
割り当てられた各構造体に力関係や順序関係は必要無いため、リンクリストの特徴である"データの挿入・削除の容易性"
を使う必要は無いと判断しました。一方で単純に数決め打ちでのポインタ列確保で無駄にメモリを消費する必要も、
オーバーフローの危険性を持たせる必要も無いと考えました。ポインタに使うメモリ等微々たるものですので、どちらかというと
オーバーフローを気にした結果です。

丁寧にお答えいただいておいて申し訳ないのですが、>>264に書いた通りそれは枝葉の部分です。
>>267も同様です。
0274デフォルトの名無しさんNGNG
>269



> さらに、プログラムの書き方に関する見解は所詮見解にすぎない。" 書き方論争(style wars)"に引きずり込まれても、たいてい何も産み 出さない。
0275デフォルトの名無しさんNGNG
struct phoge** hoge;
int i;

hoge = malloc(sizeof(struct hoge*)*10);
for(i = 0; i < 10; i++){
*(hoge++) = malloc(sizeof(hoge));
}

がやりたいのか?
0276デフォルトの名無しさんNGNG
>>273
あのさ >>244 は、ポインタ配列確保せずに phoge をインクリメントしている。
つまりは宣言も確保もしていないメモリ領域を破壊するプログラムだってことわかってる?

struct *phoge; で確保されるのはポインタ変数1つだけ。
一つしか確保していないのに、インクリメントしたらどこへ行くと思ってんの?
0277デフォルトの名無しさんNGNG
>>244
かっこつけてメモリの消費とか、オーバーフローとか言う前に
とりあえず基礎からやり直したほうがいいと思う。
0278デフォルトの名無しさんNGNG
>  ++phoge = (struct hoge *) malloc(sizeof(struct hoge));
> 書き方に曖昧な点は無いと思うんですが、何がいけないのですか?

おまえぼけすぎ。「左辺値」ってものがまったくわかってない。

phoge++ = (struct hoge *)malloc(sizeof(struct hoge));
って書いてためしてみろよ! (mallocの前に空白あけるんじゃないぞ!)
0279デフォルトの名無しさんNGNG
訂正
×struct *phoge;
○struct hoge *phoge;
0280244NGNG
>>275-276
まさにその通りでした。ポインタ自体の領域確保を怠っていました。
しかし必要なポインタの数も最初から分かっていない場合はどうすれば良いのでしょうか。
今ひとつ理解出来ていないので少し考えてみます。

>>278
残念、同じ結果です; error: invalid lvalue in assignment
0281デフォルトの名無しさんNGNG
>>280
>しかし必要なポインタの数も最初から分かっていない場合はどうすれば良いのでしょうか。

だからリストつかえよ。
0282デフォルトの名無しさんNGNG
>>280
>>266 の 2.
0283デフォルトの名無しさんNGNG
>>280
最初からわかってないのなら、適当に引数で受けるようにすればよかろう。
一度確保した後に追加するような場合には reallocなどを使ってサイズを
変更するか、リスト構造あたりを使えばよい。
0284デフォルトの名無しさんNGNG
リスト構造ってなんだかわかっていないんでわ。
リンクリストとかで検索かけたほうが良いとおもわれ。
0285244NGNG
>>281-283
なるほど! 疑問が氷解しました。realloc()でサイズを変更するリスト構造を使ったほうがスマートに出来そうです。
ありがとうございました。

>>284
構造体内に次の構造体へのアドレスを格納してチェーン式に構造体群を繋ぐ方法だと考えていますけど、間違ってますかね。
0286デフォルトの名無しさんNGNG
>>285
>realloc()でサイズを変更するリスト構造

ハァ?
0287244NGNG
>>286
改行削除で消しすぎました;;
realloc()でサイズを変更するより
リスト構造を〜
と書いていました。すいません。
0288デフォルトの名無しさんNGNG
reallocではパフォーマンが悪い場合が少なくないことも覚えておこう。
0289デフォルトの名無しさんNGNG
> realloc()でサイズを変更するリスト構造
神コロさんみたいに合体させるなよ。コーヒー噴出しちゃったじゃないか。
0290デフォルトの名無しさんNGNG
>>289
こんばんわrealloc初心者です。
今年新卒で記念に初めてreallocを使おうと思っているのですが
俺の尻の穴に貴方の野太いちんぽぶち込んでくれませんでしょうか?
今が旬のオススメrealloc使用法なんかを教えて欲しいです。
よろしくお願いいたします。
0291デフォルトの名無しさんNGNG
連結リストつかえ!
0292デフォルトの名無しさんNGNG
> 構造体内に次の構造体へのアドレスを格納してチェーン式に構造体群を繋ぐ方法だと考えていますけど、間違ってますかね。

質問する前に、ちゃんとCの入門書ぐらい読めよ ぼけ
0293   ↑NGNG
ごちゃごちゃヌカすだけで質問に答えられないage厨
0294デフォルトの名無しさんNGNG
>>293
そうだな
0295デフォルトの名無しさんNGNG
>>292
質問と確認は違うだろう。
>>293
sageてるだけで、やってる事は余り変わら内気ガス。
0296デフォルトの名無しさんNGNG
で、まだ質問には答えてないなw
0297デフォルトの名無しさんNGNG
そりゃ、ここの住人はレベルが低いからな
0298デフォルトの名無しさんNGNG
>>297
ここ==2ch
0299デフォルトの名無しさんNGNG
freopen("hello.txt", "w", stdout);
freopen("hello.txt", "w", stderr);
fputs("hello\n", stdout);
fputs("bye\n", stderr);

これを実行してから hello.txt の中を見ると「bye」しかありません。
"hello.txt" のかわりに "con" にすれば「hello」も表示されるのですが、
なぜでしょうか?
0300デフォルトの名無しさんNGNG
ファイルポインタが同じ位置を指すから
0301デフォルトの名無しさんNGNG
>>293
NGワードに登録しておいてたほうがいいよ
0302デフォルトの名無しさんNGNG
「ぼけ」を?
0303デフォルトの名無しさんNGNG
オンラインのコンパイラってどこにあんの?
0304デフォルトの名無しさんNGNG
意味がわからないけど、多分SourceForgeにあるよ。
0305デフォルトの名無しさんNGNG
オンラインのコンパイラってtelnetつかってコンパイルする
サービスのこと?
0306303NGNG
俺もようわからんのだけど、オンラインのコンパイルサービスってのがあるんじゃないの?

昔のスレにそんなことが書いてあった。
0307デフォルトの名無しさんNGNG
だからtelnetとかでどっかのサーバにつなげてコンパイルすればいいじゃん
0308デフォルトの名無しさんNGNG
すいません、質問です。

暗黙の型変換をさせない方法ってありますか?
float型の変数に右辺の値(int型の変数)を↓の様な感じになるようにただのビット列として代入したいんですが・・・

int i=1のとき、
floatの中身のビット列:0x0001(これだといくつになるか分かりませんが)
0309デフォルトの名無しさんNGNG
できるが、なぜやりたい?
0310デフォルトの名無しさんNGNG
>>309

えーと、詳しく言ってしまうと誰が見てるか分かりませんのでアレなんですが、
int→floatのキャストの真似事をしないといけないんです。
0311デフォルトの名無しさんNGNG
>>308
union?
0312308NGNG
>>311

なるほど、unionはこういう使い方もできるんですね。
これで行けそうです。
ありがとうございました。
0313デフォルトの名無しさんNGNG
>312 キャストとunion
結果が全く違うぞ(w
0314デフォルトの名無しさんNGNG
>>313

なんか不味かったですかね?
意図した動作はしてるんですが・・・
0315デフォルトの名無しさんNGNG
>>314
気にするな。
しいて言うなら、310の説明の仕方がまずかったんじゃないか?
0316デフォルトの名無しさんNGNG
>不味かった
int→floatのキャスト、ビット値で等しくするのとは違う
整数値1を1.0みたいに浮動小数点形式で表現し直す事

>意図した動作
ならいい
0317デフォルトの名無しさんNGNG
説明の行間を読んでunionと言ってみたわけで。
ポインタ使っても型のキャスト使ってもやれるだろうけど。
0318デフォルトの名無しさんNGNG
>型のキャスト使って
できないだろがヴォケ
0319デフォルトの名無しさんNGNG
float f;
*((int*)&f) = 0x00000001;
0320デフォルトの名無しさんNGNG
>319
そりゃ"ポインタ使って"の話だろ?
0321デフォルトの名無しさんNGNG
と、>>320 が変なことを言いました。
0322デフォルトの名無しさんNGNG
"="を使わないで("=="はOK)プログラムを書くことはできますか?
書けるとしたら、どのようなものまで作れますか?
hello WorlD程度しかできませんか?
0323デフォルトの名無しさんNGNG
^ & | でなんとかなる。
0324デフォルトの名無しさんNGNG
(ネタ?)‥、>>322
データ処理諦めて、
簡単なプログラムならかけないこともないとは思うけど

真夜中の暇つぶり質問でしゅか?
0325デフォルトの名無しさんNGNG
printf("%d", sin(atof(gets(buffer))));
とかやれば簡単な計算なら出来るけど、
gets(buffer);
double x = atof(buffer);
double y = sin(x);
printf(%d", y);
とほぼ同じコードが生成されるだけなんだが。
0326デフォルトの名無しさんNGNG
代入文(Cでは代入演算子だが)なしでも大抵のプログラムは書ける。
「代入は不要。むしろ有害。」と言ったえらい人がいたような。。。
0327デフォルトの名無しさんNGNG
/* a = 5 */
a ^= a;
a |= 5;
も駄目だったらいやだな。
0328デフォルトの名無しさんNGNG
代入の代わりに引数にして渡せば問題ないな
細かい関数だらけになるが…

0329デフォルトの名無しさんNGNG
初期化もつらいだろ?
0330デフォルトの名無しさんNGNG
while(a!=b) a++;
なんてどうよ。
0331デフォルトの名無しさんNGNG
>>330
浮動小数点のときどうするのよ。
0332デフォルトの名無しさんNGNG
>>331
そこで登場するのが308からの流れだな!
0333デフォルトの名無しさんNGNG

推奨NGワード:
「空白あけろ」「空白あけるな」「ぼけ」「ボケ」
0334デフォルトの名無しさんNGNG
バイナリファイルの扱いに関して分からないことがあるので質問させてください。

00 00 00 01

というバイナリファイルを

fread(i,sizeof(int),1,fp);

このように読み込んだ時、i には 16777216(01 00 00 00)が代入され、バイト単位で逆転してるようです。

これを防ぐ関数や一発で元に戻す演算、関数などがあれば教えて欲しいです。
0335デフォルトの名無しさんNGNG
>>334
リトルエンディアンは反転します。
読み込んだ跡に、2byte単位で反転させるべし。
LOWERとかintの上位2バイト、下位2バイトを取得する
ようなもんがあったきが・・・・BCBでしかやったことないのですが。
VCLならgetLowerみたいのあったとおもうんですが。。。
すみません、最近さわってないので(^^;
0336デフォルトの名無しさんNGNG
htonl htons ntohl ntohs
0337デフォルトの名無しさんNGNG
早速の回答ありがとうございます。
getLowerとLOWERって聞いたことないんで調べたんですけどいまいち分かりません(汗

BCCでプログラミングしてるのでBCBでできるならBCCでも出来ると思うんですけど・・・
0338デフォルトの名無しさんNGNG
>>337
わざとスルーしてるのか
0339デフォルトの名無しさんNGNG
>>334
i = MAKELONG(MAKEWORD(LOBYTE(LOWORD(i)), HIBYTE(LOWORD(i))), MAKEWORD(HIBYTE(HIWORD(i)), HIBYTE(HIWORD(i))));
0340デフォルトの名無しさんNGNG
>>338
書き込みしてる間に書き込まれたみたいです

>>339
すいません;関数が定義されてるヘッダが分かりません;
というかその関数ってBCCで使えますか?
0341デフォルトの名無しさんNGNG
関数・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・( :c o)
0342デフォルトの名無しさんNGNG
関数じゃなくファンクションだ。

0343デフォルトの名無しさんNGNG
「函数」と書きたいだけの厨房が時々来るね。
0344デフォルトの名無しさんNGNG
>>341
でもさ、実際問題としては
関数とも言えるんじゃないかな?
0345デフォルトの名無しさんNGNG
339じゃ関数と見分けがつかない罠
0346デフォルトの名無しさんNGNG
あ・・・そうですね;
まぁどっちにしろ定義されてるヘッダがないんです;

もう自分で関数作ってしまおうと思います;
お騒がせしましたm(_ _)m
0347デフォルトの名無しさんNGNG
>>345
一応どういう働きをするかは分かってるつもりです;
0348334NGNG
int ByteReversal(int Num,int size)
{
int RetNum = 0,i;

// byteサイズが1〜4以外の時エラー
if((size<1)&&(size>4)){
return 0;
}

for(i = size-1;i >= 0;i--)
RetNum |= (( Num & (0xFF << (8*i)) ) >> (8*i)) << (~i * 8);

return RetNum;
}

とりあえずこんな感じに作りました。
お騒がせしました;;
0349デフォルトの名無しさんNGNG
>>348
sizeofって知っている?
0350デフォルトの名無しさんNGNG
>>340
windows.h
0351334NGNG
知ってますけどあんまり使ってません;
int型とかOSによってサイズが違うとか聞くので動作不安定になりそうで・・・
(まぁ他のOSに移植したりしませんけどね)

>348のソースバグがめっちゃありました;;
0352デフォルトの名無しさんNGNG
>>351
知っていたら↓こんなまぬけなコードは書かないよ。

int ByteReversal(int Num,int size)
{
int RetNum = 0,i;

// byteサイズが1〜4以外の時エラー
if((size<1)&&(size>4)){
return 0;
}
0353デフォルトの名無しさんNGNG
そうやって改善策を出さなきゃ例の荒らしと同じなのが悲しいところ。この書き込みモナー
0354334NGNG
>>352
if((size<1)&&(size>4))
このif文の事いってるんなら&&と||を思いっ切り間違えてます;;
なんかバグで失敗してますけど最初はshort intにも対応させるつもりで書いてたのでsizeはどっちみち受け取らないとダメだと思います。
voidポインタはいちいちポインタ型で扱うのがめんどくさかったので第二引数でサイズを指定してもらってます。
まぁ言うまでもなくsizeof()でNumを指定してもshortを検出できないので;
0355デフォルトの名無しさんNGNG
>>354
short intに対応って、Numはint型じゃないか。
0356334NGNG
ってwindows.hで定義されてたんですか;
0357デフォルトの名無しさんNGNG
ちなみに俺の環境だと32bit用と16bit用の二種類が用意されている。
>>336と同じもの。
0358334NGNG
元々ファイルから読み込んで変換することを目的にしてますから当然2byte単位で反転させたい時もあるわけで・・・
その時はint型の下位2byteだけをひっくりがえせばそれで済むかなぁ・・・と
でもやっぱりforループを2回に分けたりサイズによって処理変えたりするべきでしたね(- -;
0359339NGNG
>>356
339は間違いだった。MAKELONG/WORDの左右が逆だった。んで直すとこう
i = MAKELONG(MAKEWORD(HIBYTE(HIWORD(i), HIBYTE(HIWORD(i)))), MAKEWORD(HIBYTE(LOWORD(i)), LOBYTE(LOWORD(i))))
0360デフォルトの名無しさんNGNG
>>358
だったら>>357みたいに2バイト版と4バイト版を両方作ったら
0361デフォルトの名無しさんNGNG
>>334
ほれ、int版だ。これ見てshortも作るよろし。

int ByteReversal(int num){
void *vp;
int nbyte = sizeof(int);
vp = #
for(int i =0; i<nbyte/2; i++){
*(unsigned char *)vp ^= *((unsigned char *)vp+nbyte-1);
*((unsigned char *)vp+nbyte-1) ^= *(unsigned char *)vp;
*(unsigned char *)vp ^= *((unsigned char *)vp+nbyte-1);
nbyte--;
}
return *(int*)vp;
}
0362334NGNG
ありがとうございます。
頑張って作りたいと思います;
0363デフォルトの名無しさんNGNG
>頑張って作りたいと思います;

職業病?;
0364334NGNG
>>363
別にそんなことありませんよ
というか高校生で、プログラミングも趣味です。

>>334
せっかく作ってくれたんですけど無理にループを使わずswitch()つかったら一つの関数で済むように普通に作れました;

int ByteReversal(int Num,int size)
{
int i;
unsigned char cNum[4];

// byteサイズが2〜4以外の時エラー
if((size<2)||(size>4))
return 0;

for(i = size-1;i >= 0;i--)
cNum[i] = ( Num & (0xFF << (i*8))) >> (i*8);

switch(size){
case 2:
return (cNum[0]<<8)|cNum[1];
case 3:
return (cNum[0]<<16)|(cNum[1]<<8)|cNum[2];
case 4:
return (cNum[0]<<24)|(cNum[1]<<16)|(cNum[2]<<8)|cNum[3];
}
}
0365デフォルトの名無しさんNGNG
なんだか吐きそうになった
0366デフォルトの名無しさんNGNG
int ByteReversal(int n)
{
int ret, i;
for(i = 0; i < sizeof(int); i++)
*((unsigned char *)&ret+i) = *((unsigned char *)&n+sizeof(int)-i-1);
return ret;
}

行数減しただけ、トリッキーな上に無駄
0367デフォルトの名無しさんNGNG
>>366のほうが拡張性はあると思うよ
0368334NGNG
>>366
え・・・
一番簡単にしかも効率的に作ってる・・・
0369デフォルトの名無しさんNGNG
>>366
どの辺が無駄なの?
0370デフォルトの名無しさんNGNG
>>369
おそらく、ビット演算よりも都度代入(メモリコピー)を複数回ループでやってる点を言ってるんじゃないかな。
その点ではswitchのハードコードのほうが”効率”はいいように思う。
0371334NGNG
こんな書き方もあるんだなぁ・・・
めっちゃわかりやすいですw
ありがとう御座いました。
0372デフォルトの名無しさんNGNG
もっとわかりやすく書いた方が・・・
こんなのはどう?

int ByteReversal(int num){
union{
int n;
char c[4];
} a,b;
a.n=num;
b.c[0]=a.c[3];
b.c[1]=a.c[2];
b.c[2]=a.c[1];
b.c[3]=a.c[0];
return b.n;
}
0373370NGNG
無責任に推測を言い捨てるのもアレだし、どうせ内部的に領域確保してメモリコピーする分switchのほうが
遅くなるかも・・・と思い実際にベンチ取ってみた。

コードはこんな感じ。
int main() {
  int i, j;
  for (i = 0; i < 10; i++)
    for (j = 0; j < 16777216; i++)
      >>364 ByteReversal(j, sizeof(int));
      >>366 ByteReversal(j);
  return 0;
}

結果(最適化無し)
>>364
real  0m8.529s

>>366
real  0m6.958s

結構、圧倒的な差がついた。switchの余計な分岐分かと思い、switchを無くして4byte決め打ちでやってみたが
real  0m8.943s

一方、最適化(-O2)かけると上から順に
real  0m5.058s
real  0m3.009s
real  0m4.816s
0374370NGNG
(;´∀`)どこから「どうせ」が沸いたんだろう・・・「ひょっとすると」の間違いでした。
0375デフォルトの名無しさんNGNG
>>372
ウホッ わかりやすい
0376デフォルトの名無しさんNGNG
バイトオーダーを反転する固定コードだと移植性が低いなあ。

TCP/IPネットワークバイトオーダーと同じ、ビッグエンディアンのデータだとわかってるのなら
socketの関数使うのが簡単だよなあ。つまり>>336か。
そうでなきゃ
unsigned char src[4] に読み込んで
(src[0] << 8*3) + (src[1] << 8*2) + (src[2] << 8*1) + (src[3])
あたりが無難。
0377デフォルトの名無しさんNGNG
シフトって、内部でその回数やってるんでしょ?
結構時間かかるかもね
0378334NGNG
>>372
あ〜共用体使う方法かぁ
それも有りですねw

>>373
私が書いたソースが遅くなるのは明らかだとw;
switch以前にメモリコピーの数は一緒ですけどシフト演算とか余計に使ってたらそれだけ遅くなりそうな・・・
0379デフォルトの名無しさんNGNG
>>377
CPU依存だが、いまどきのCPUなら普通何ビットシフトだろうと同一サイクルかと
0380デフォルトの名無しさんNGNG
>>377
x<<31とx<<1とで処理時間が変わるわけないだろ。
0381デフォルトの名無しさんNGNG
ビットシフトよりポインタ移動のほうがはるかに速いわけね
0382デフォルトの名無しさんNGNG
>>381
それはわからん
0383377NGNG
>>379
>>380
そうなのか・・・
制御屋でH8/300ばっかやってるから、てっきり・・・
H8/300は1ビットシフトの命令しかないもので
0384デフォルトの名無しさんNGNG
x86ならbswapという命令があったような気がするのだが。
0385デフォルトの名無しさんNGNG
16bitCPUか・・・
0386デフォルトの名無しさんNGNG
>>385
bswapは確か32bit限定のはず
0387デフォルトの名無しさんNGNG
お前らがシフトの100回や200回を気にするようなプログラム書けるようなタマかよ(プ
0388デフォルトの名無しさんNGNG
君は斡旋ブラスレに篭って出てこないでくれ。
0389デフォルトの名無しさんNGNG
藻前等の中に、Cプログラマのくせして
プリキュア見てない奴っているか?

0390デフォルトの名無しさんNGNG
っていうかバイトが「反転」しているわけではなく、
「正しい」順序で入ってるだけじゃん。
同じプログラムで読んで書く場合でもないのに
freadやreadでintのアドレス渡すのがそもそも間違い。
バイト単位で読め(もしくはバイトの配列)
0391デフォルトの名無しさんNGNG
>>389
何それ?
0392366NGNG
速度上げてみた。コンパイル後のサイズも上がってそうだが。
その上、処理系によって動k(ry

#include <limits.h>
#define ByteReversal2(x) (((x&0xFF)<<8)|((x&0xFF00)>>8))
#define ByteReversal4(x) (((x&0xFF)<<24)|((x&0xFF00)<<8)|((x&0xFF0000)>>8)|((x&0xFF000000)>>24))
#if UINT_MAX == 0xFFFFFFFF
#define ByteReversal ByteReversal4
#elif UINT_MAX == 0xFFFF
#define ByteReversal ByteReversal2
#else
#define ByteReversal(x) x
#endif

>>364
よく見たら高校生だったのか…(・∀・)人(・∀・)ナカーマ
0393デフォルトの名無しさんNGNG
> #define ByteReversal2(x) (((x&0xFF)<<8)|((x&0xFF00)>>8))

括弧つけろ ぼけ
0394デフォルトの名無しさんNGNG
#define SwapByte2(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
0395デフォルトの名無しさんNGNG
おや、レス番が飛んだ
0396366NGNG
#defineの展開後の方のxは括弧でかこんどいて・・・
忘れてた( ´・ω・`)
0397デフォルトの名無しさんNGNG
ふつう関数にするぞ。
inline int SwapByte2(int x)
{
return ((x & 0xff) << 8) | ((x & 0xff00) >> 8);
}
これなら括弧いらない。
0398デフォルトの名無しさんNGNG
やっぱつっこまれてるし・・・
0399334NGNG
>>366
同じ高校生だったとは・・・
なんか知能の差を感じる・・・(- -;
0400デフォルトの名無しさんNGNG
そもそもなんでReversalなんだよ。名詞だが、後置就職には使わないぞ。
(前置ならともかく)
0401334NGNG
そんなの適当です;
0402デフォルトの名無しさんNGNG
>>397の関数とマクロ版とどっちが速いかくらべてみろよ
たいがいの処理系では同じだが、
たまに関数のほうが速かったりするからおもしろい
0403デフォルトの名無しさんNGNG
>>401は偽者
0404デフォルトの名無しさんNGNG
おれならシフトしてからマスクするがなあ
0405334NGNG
偽ちゃうし;
0406デフォルトの名無しさんNGNG
16bit程度なら、テーブルってのもあり。
0407デフォルトの名無しさんNGNG
>>402
inlineとマクロどっちが良いかと思って
マクロを選んだわけですが…

やっぱ俺はへたれヽ(゚∀。)ノ
0408デフォルトの名無しさんNGNG
> 16bit程度なら、テーブルってのもあり。

でかすぎ...Unicode<->SJISの変換とかで「しかたなし」に使うサイズだぞ
0409デフォルトの名無しさんNGNG
> inlineとマクロどっちが良いかと思って
> マクロを選んだわけですが…

そう思うならまず試せよ!
0410デフォルトの名無しさんNGNG
まだ試してないのか! 早くやれ!
0411デフォルトの名無しさんNGNG
>>406
4Byteで足りると思っているだろ
0412デフォルトの名無しさんNGNG
>>411
高々256kbじゃねーかw
0413デフォルトの名無しさんNGNG
>>412
キュッシュミス多発でほぼ確実に遅くなるぞ、そのサイズはw
0414デフォルトの名無しさんNGNG
>>412
たったこれぐらいの処理に256KB…
完成後のソフトは何GBの予定ですか?
0415デフォルトの名無しさんNGNG
/* 32bit int環境では使わないこと! さもなくば地獄の業火に投げ込まれるだろう。詳しくは選挙公報を熟読すべし。 */
int table[65536], from, to;
/* 熱心にテーブル作り */
from = 12345;
to = table[from];
0416デフォルトの名無しさんNGNG
>>412
馬鹿っぽいから、そういうこと言うのは2ちゃんねるだけにしとけよ。
0417デフォルトの名無しさんNGNG
-int table[65536], from, to;
+unsigned int table[65536], from, to;
/* ええい、負の値なぞ入れられてたまるか! */
0418デフォルトの名無しさんNGNG
>>414
おまいも相当阿呆な希ガス
0419デフォルトの名無しさんNGNG
>>418
ムダにレス重ねないでいいように、何が、どういった理由で、も一気に書きなさい
0420デフォルトの名無しさんNGNG
希ガスもNGワード推奨だな。
0421デフォルトの名無しさんNGNG
・そもそも、256kbではなく128kbだということに気付け
・テーブルは実行時生成すりゃファイルサイズなんてほとんど食わない
・以下延々とネタにマジレス
0422デフォルトの名無しさんNGNG
>>421
0423デフォルトの名無しさんNGNG
そんなにTableにコダワル話じゃないだろ。
も前ら会議で本論と関係ないことのたまって白い目で見られるクチだろ?
0424デフォルトの名無しさんNGNG
>>415
shortなら16bitのとこも多いんじゃない?
0425デフォルトの名無しさんNGNG
なにはともあれ、テーブルってのははありえないっしょ。
メモリ空間、処理速度共に普通にビットシフト等した方が効率よいからね。
0426デフォルトの名無しさんNGNG
>>421
実行時に生成させる過程で、そもそもテーブルいらねぇじゃん、と気づけ。
0427デフォルトの名無しさんNGNG
>>389
こんな画像見つけたけど、番宣にノシとか使ってるの?
http://www3.tok2.com/home2/itatisan/cgi-bin/src/itachi2961.jpg
0428デフォルトの名無しさんNGNG
>>427
上と下の画風違いすぎん?
0429デフォルトの名無しさんNGNG
どっちかというとこっちのほうが好きだなー
http://www3.tok2.com/home2/itatisan/cgi-bin/src/itachi2936.jpg
0430デフォルトの名無しさんNGNG
おまえら、何年前からタイムスリップしてきたんだよ。
0431デフォルトの名無しさんNGNG
void sort_data(long *x)
{
int n,m;
for(n=1;n<=4;n++)
{
for(m=n;m<=3;m++)
{
if(x[m] > x[m+1])
swap_data(&x[m],&x[m+1]);
}
}
return;
}

このままだと、なぜか最初のx[0]がスワップされません。
5,6,1,3,7と入力すると5、1,3,6,7とソートします。
んで、n=-1とすると、ちゃんと順番に表示してくれるのは、なんででしょう?
0432431NGNG
上のソースの訂正です。
×n=1
○n=0
×n<=4
○n<=3
0433デフォルトの名無しさんNGNG
void sort_data(long *x)
{
int n,m;
for(n=0;n<=3;n++)
{
for(m=n+1;m<=4;m++)
{
if(x[n] > x[m])
swap_data(&x[n],&x[m]);
}
}
return;
}

こうとか?
0434431NGNG
>>433
そっちのやり方のほうがよさげですね。
ありがとうございました
0435デフォルトの名無しさんNGNG
n = 0
5 > 6 ⇒ 5 ←→ 6
6 > 1 ⇒ 6 ←→ 1
 :
6 > 7 ⇒ 6 ←→ 7

n = 1
1 > 3 ⇒ 1 ←→ 3
 :
 :

1周目で5が先頭に残ったまま
0436デフォルトの名無しさんNGNG
× if(x[n] > x[m])
○ if(x[n] < x[m])
0437デフォルトの名無しさんNGNG
× if(x[n] < x[m])
○ if(n[x] < m[x])
0438431NGNG
>>435
あ、なるほど!単純なミスでしたね。
ありがとうございます
0439デフォルトの名無しさんNGNG
× if(n[x] < m[x])
○ if(*(n+x) < *(m+x))
04403日悶えた。NGNG
ポインタの指すアドレスが0x01など、極端に小さな数字になって困っています。
下記2つのルーチンの相性が悪いみたいです。
PICT make_picstrct(int tbl[]);/* PICT構造体を作る。最終的なEPS図版の作るわけではない。 */
void ComposeFile(PICT picture); /* PICT構造体のパラメータからEPSファイルを組み立てる */

main()内で、

newpics[0] = make_picstrct(table[0]);/* 成功 */
ComposeFile(newpics[0]);/* 怪しい? */
newpics[0] = make_picstrct(table[0]);/* 失敗 */

のようにした場合、1回目のmake_picstrct()は成功し、次のComposeFile()でポストスクリプトファイルを出力することが出来ます。
しかし、そのあとでもう一度make_picstrct()を呼び出すと、make_picutstrct内で宣言しているポインタが、異常に小さなアドレスを指すようになってしまいます。
04413日悶えた。NGNG
>>440の続き

デバッガで追ってみると、1度目にmake_picstrct()を呼び出したときは
(gdb) print xax
$1 = (int *) 0xbfe809e4
となっているのですが、2度目に呼び出すと、
(gdb) print xax
$2 = (int *) 0x2
となります。エラーは下記です。
Program received signal SIGSEGV, Segmentation fault.
0x08048912 in make_picstrct (tbl=0xbfe802c0) at mini.c:159
159 *xax = 0;
(gdb) print *xax
Cannot access memory at address 0x2

ちなみにmake_picstrct()だけループしても[]内を変数にしてもセグメンテーション違反は起きません。
04423日悶えた。NGNG
連書きすみません。

どこまで略せばいいのか、どこまで詳しく書けばいいのかわからず、すみません。
ああ、あれかも、となにか思いついたらご教授ください。
重要な部分で不明な点もあればご指摘ください。
0443デフォルトの名無しさんNGNG
Googleでも引っかからない関数出されてもな。
「たぶん tableを破壊してるんじゃねーの」くらいしか言えん。

原因はComposeFileのバグかもしれないし、
呼び出し側で適切にメモリ確保してないからかもしれないし、
make_picstrctの直後でComposeFileを呼んではいけないという仕様かもしれない。
0444デフォルトの名無しさんNGNG
>>440
ソース晒すのイヤでしょ?
あと3日悶えてください
0445デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int val, sum = 0, num = 0, heikin;
FILE *fp;

fp = fopen("seiseki.txt","r");
if(fp == NULL)
{
printf("open error!!\n");
exit(1);
}
while(!feof(fp))
{
fscanf(fp, "%d", &val);
sum += val;
num++;
}
fclose(fp);
heikin = sum / num;
printf("平均値は%3d\n", heikin);
return 0;
}
をコンパイルして実行すると「毎度お騒がせしますエラーです」みたいなのが出てきます。
どこが悪いのか教えてください。seiseki.txtの中身は
10
20
30
です。
0446デフォルトの名無しさんNGNG
つーかこの時期にそんなpurpose-specificな物出されるともうアレとしかw
0447デフォルトの名無しさんNGNG
> 毎度お騒がせします池沼です
0448334NGNG
>>445
てかエラーとか出ないんですけど・・・
04493日悶えた。NGNG
>>440です。
ありがとうございました。
例の3つの関数の各前にprintf("unko");と入れるとちゃんと動作しました。
呪われています。
と、いうことで、どこかがアドレスを破壊しているようなのであと3日悶えてみます。
それでもダメならソース丸投げのほうでおねがいしてみます。
0450デフォルトの名無しさんNGNG
>>448
レスありがとうございます。って、事はうちのPCがおかしいってことなんでしょうか。
コンパイラは出来るのですが実行すると「問題が発生したので....」が出るのですが。
プログラム的に問題ないなら面倒なので次の学習過程に移ります。どうもありがとうございました
0451デフォルトの名無しさんNGNG
>>445
それってよ、ファイル名のとこがちげぇんでね

"C:/unko/unko1/ファイル名"
とかさあ
"../unko/ファイル名"
ってな感じじゃね
0452デフォルトの名無しさんNGNG
Winペケポン使いか。
0453451NGNG
>>445
それかあれだ

foef関数でいいんだっけ?
その関数定義してやんなんといけんでしょ
0454デフォルトの名無しさんNGNG
実行に必要なライブラリを入れてないとかそんなんだろ。
0455デフォルトの名無しさんNGNG
>>445
そのコードで起きるとしたら0除算エラーかな?
0456デフォルトの名無しさんNGNG
>>453
×foef
○feof
0457デフォルトの名無しさんNGNG
>>455
除算エラーも出ないと思うよ
0458デフォルトの名無しさんNGNG
あぁ、自分で判ったような気がする・・

while(!feof(fp)) がおかしいですね。
while(feof(fp))に直したら動きました。
どうもfeof()を反対の意味で認識してたようです。
皆様レスありがとうございました
0459デフォルトの名無しさんNGNG
空行が入って
fscanf(fp, "%d", &val);
が失敗してるってことはない?scanf()が何かとトラブルの元の悪寒。
0460459NGNG
ガビソ
0461デフォルトの名無しさんNGNG
>>457
> heikin = sum / num;
ループを一回も通らなかったらnumは0だから
0除算起きると思ったんだけど、何故出ないんでしょう?
0462デフォルトの名無しさんNGNG
>>461
データ無しで通すようなテストしてないんじゃ
0463デフォルトの名無しさんNGNG
>>461
whileをかならず一回通ってるからnumがインクリメントされてます。

>>458
while(feof(fp))
なんかしたら逆にエラーでますけど;
0464デフォルトの名無しさんNGNG
feofの使い方は元のほうがまだマシ。
0465458NGNG
書き間違えてる・・
while(feof(fp)==0)です。これにしたら動きました
0466デフォルトの名無しさんNGNG
!feof(fp)と意味変わりませんけどまぁ動くなら良いのかな?
0467デフォルトの名無しさんNGNG
あぁそうか。真って0ですよね。だとしたら同じ意味か。
なんでこっちでよくてあっちでダメなんだろう・・・エロい人助けて
0468デフォルトの名無しさんNGNG
えっ、真って0なんだ。そりゃ手持ちのプログラム全部書き換えなきゃやばいな。
0469デフォルトの名無しさんNGNG
あ、俺もだ書き換えなきゃ
0470デフォルトの名無しさんNGNG
やっべーよもう納品しちゃったよ
0471デフォルトの名無しさんNGNG
このままでは単位が・・・
0472デフォルトの名無しさんNGNG
つまり、if(a)の内部展開はif((a) == 0)ということだね
0473デフォルトの名無しさんNGNG
feof()はファイルポインタが終端にある時に0以外を返してます。
NOT演算は真を偽に、偽を真にしますからそれでwhileでループするって感じです
(自分もややこしくて忘れる時があるのでいつもwhile(1)で無限ループって覚えてます;)
0474デフォルトの名無しさんNGNG
if(a)が真になるのはaが0以外の時だからif(a!=0)では?
内部展開とかしてないと思うけど
0475デフォルトの名無しさんNGNG
ウワーン(;´Д`)こんがらがってきた・・・真は1・・・でよいのですか先生。
あまり初心者をいじめないでくれ。マジで判らなくなってきた。ちと整理しよう・・

feof()は「ファイルの終わりだったら1を返す。まだだったら0を返す」
!feof()は「ファイルが終わってなかったら1を返す」
だからwhile(feof(fp)==0)は「0が返ってくるうちは繰り返し」で・・・


ってとこまではあってるんディスカ?

んでwhile(!feof(fp))は「ファイルが終わってなかったら1が返ってきて、1は真だから無限ループ」
だからやっぱ>>445はおかしくないのかな何も。もういいや動いたし・・
0476デフォルトの名無しさんNGNG
真は0以外と解釈してます
0477デフォルトの名無しさんNGNG
基本的に真とは非零の値を指すけど、Cではそう厳密に考えてもあまり意味がない。
比較演算の結果は1or0だが他のものはプログラマが好き勝手に決められるわけで。
返り値0を正常終了とする関数も一杯あるでしょ。
0478デフォルトの名無しさんNGNG
whenever one writes
 if(expr)
where "expr" is any expression at all, the compiler essentially acts as if it had been written as
 if((expr) != 0)
0479デフォルトの名無しさんNGNG



※ ただいま、ネタとマジの区別のつきにくい方にはオススメ出来ない状況となっております。ご注意ください。 ※


 
0480デフォルトの名無しさんNGNG
マルチ厨呼んで来い、マルチ厨
0481デフォルトの名無しさんNGNG
"ある" が 1(0以外) "肯定" "Yes" "真"
"ない" が 0 "否定" "No" "偽"
と覚えるといいと思うんだが。
0482デフォルトの名無しさんNGNG
生物の神経系の知識があるなら全か無かの法則を使うと1・0が分かりやすいと思うんだが。

と余計混乱するようなことを言ってみる。
0483デフォルトの名無しさんNGNG
NULL以外は真
04843日悶えた。NGNG
>441です。
自己解決しました。make_pictstrctという自分で書いた関数のバグでした。
その下位のルーチンに変数を渡す方法をしくじってました。
intで宣言して&で渡さなきゃならんところを、int型ポインタで宣言して
そのまま放り込んでました。
3日間も・・・なさけないっす。ご鞭撻サンクスでした。
0485デフォルトの名無しさんNGNG
NULLはポインタについてのみ使われるものであって、普通の条件判定に使うべきもんじゃない。
0486デフォルトの名無しさんNGNG
>>481
feofはデータが"ある"ときに0を返します。
0487デフォルトの名無しさんNGNG
>>475
あってると思いますよ
==、!=、!はその条件にあわせて真と偽を返しているだけで、ifは真と偽を区別してるだけだと思います。
if(1)とかwhile(1)はそのまま真を渡してるから動作します。
0488デフォルトの名無しさんNGNG
>>486
エラー内容を数値として返す時は0で"ある"とか"成功"の方が好都合だからじゃないの?
0489デフォルトの名無しさんNGNG
if (1)もwhile (1)も
if (1 != 0)
while (1 != 0)
というように扱われ、この結果は真であるから通るわけで。別にここは0以外の値(すなわち非零の値)ならば何でもいい。
0490デフォルトの名無しさんNGNG
if (-1)
なんてのも真なので、理解があいまいだと苦しむかもしれない。
0491デフォルトの名無しさんNGNG
>>488
EOFであるか?と聞く関数なので
データがあればNo, データが無ければYesを返しているだけです。
0492488NGNG
>>491
まぁ実際はそうなんだけどね・・・
そんなこと言っても処理成功の時に0を返してそれ以外の時に1を返す関数はいっぱいありますし・・・
0493デフォルトの名無しさんNGNG
べつに関数はエラーコードを返すと決まっているわけではないし。
(特に、feofは失敗しないはず)
0494デフォルトの名無しさんNGNG
int isEOF(FILE*);
0495488NGNG
あ〜そうか;
Yes Noを返してきてるのか
0496デフォルトの名無しさんNGNG
何故シンプルにfp != EOFとしないのか分からないけど深い理由があるの?
0497デフォルトの名無しさんNGNG
#include <stdio.h>

int main(){
printf("%p %p %p \n", printf, *printf, &printf);
return 0;
}

この辺の仕様がキモくてしょうがないんだが、
何でこんな仕様になってるんだ?
なんとかならないのか?

0498デフォルトの名無しさんNGNG
>>496
頭良すぎ
0499デフォルトの名無しさんNGNG
>479
ワロタ。ナイスタイミングでGJ!!
0500デフォルトの名無しさんNGNG
ん?FILE*とEOFって単純比較出来たような気がしたけど、Perlか何か別の言語だっけ?
ひとまず怪しげな入門書を引っ張り出してきて引いたら
while (fscanf(....) != EOF)
使ってた。
0501デフォルトの名無しさんNGNG
>>500
単なるポインタであるFILE*変数自体は
再代入でもしない限り変化しないわけだが。
0502デフォルトの名無しさんNGNG
>>500
ファイル終端に到達したらEOFになるんじゃあ?
0503デフォルトの名無しさんNGNG
fscanf()の戻り値の型ってFILE*なんだー、ふーん
0504デフォルトの名無しさんNGNG
fscanf()の戻り値の型はintじゃないのか
0505デフォルトの名無しさんNGNG
演算子のオーバーライドが必要だな。
0506デフォルトの名無しさんNGNG
演算子のオーバーロードも考えないとな
0507デフォルトの名無しさんNGNG
x(n)という関数があってそしてx(n+1)=x(n)+Cだとしたときに
y(n)=x(n)+x(n+1)
y(n+1)=x(n+1)+x(n+2)以下半永久にfor文で
やらせるプログラムを作ろうとしています
それでx+=x+cを使ってしまうとxがx(n+1)の値になってしまって
x(n)をどうやって指定するのか分からないし…
ということで詰まってしまってプログラムが書けません。
こういう場合はどういうプログラムを作ればいいのでしょうか?
すみませんが教えてください。よろしくお願いします。
0508デフォルトの名無しさんNGNG
関数xの引数がintな場合なら、x(n)の値を一度配列に入れておけば?
0509デフォルトの名無しさんNGNG
y(n+1)=2*x(n)+C
だな。
0510デフォルトの名無しさんNGNG
ロヂスチック射象
0511デフォルトの名無しさんNGNG
x(0)いくつよ?
0512512NGNG
きり
0513デフォルトの名無しさんNGNG
文字列の中で#記号を使うにはどうしたらいいのでしょうか?

printf("#\n");
のように、#記号を表示したいのです。
0514513NGNG
あ、普通にできました。すみません。
0515デフォルトの名無しさんNGNG
char *型からconst char *型って暗黙の変換がなされますよね?
関数の引数にするときによくあるパターンだと思います。
ところがchar **型からconst char **型へは暗黙の変換がされない
ようですが、これはなぜなんでしょうか?
0516デフォルトの名無しさんNGNG
>>515
char **p=0;
char * const *cp=p;
0517デフォルトの名無しさんNGNG
#include<stdio.h>
int main()
{
(*(int(*)(char*,...))puts)("100 = %d\n", 100);
return 0;
}

100 = 100
と表示されません。
コンパイラがバグっているのでしょうか?
0518デフォルトの名無しさんNGNG
puts?
0519デフォルトの名無しさんNGNG
>>517
バグってるのはお前の頭。素直にprintfを使いなさい。
0520デフォルトの名無しさんNGNG
何やってんの
0521デフォルトの名無しさんNGNG
ブライトさん・・・
0522デフォルトの名無しさんNGNG
>500
feofを使いなされ
0523デフォルトの名無しさんNGNG
VCのコンパイラなんですけど、

#define HOGE(p) test(__FILE__, __LINE__, p,...)

void test(char *file, int line, char *fmt, ...);

void main(void)
{
int p;

HOGE("hoge = %d\n", p);
}

こういう感じでうまくdefineを定義して可変長引数を渡したいのですが、
どうやればいいですか?
0524デフォルトの名無しさんNGNG
>>516
説明になってないしchar*const* != const char**
0525デフォルトの名無しさんNGNG
>>523 C FAQ
0526デフォルトの名無しさんNGNG
>>525
いまいちぴったり合ったFAQが探せなかったのですが、
一般的にはできない。ということですね。。
0527デフォルトの名無しさんNGNG
>>523
なんというか、HOGEマクロの定義自体が狂ってないか?
0528デフォルトの名無しさんNGNG
>>527
すみません。どうやってもエラーが出るので書いているのは正しくないです。
0529デフォルトの名無しさんNGNG
#define HOGE(s...) test(__FILE__, __LINE__, s)
かな
0530デフォルトの名無しさんNGNG
>>523
#define HOGE test(__FILE__,__LINE__,


HOGE "hoge = %d\n", p);
0531デフォルトの名無しさんNGNG
>>529 駄目でした。
>>530 いけますけど、見やすくならないでしょうか?

なんとなく関数2個作ってコールバックでいけそうと気づきました。
0532デフォルトの名無しさんNGNG
こういうことしたがる奴は
C使いにはむいてないよな。
0533デフォルトの名無しさんNGNG
こんなことで試行錯誤するくらいなら他のことやった方がいいということは言えるな。
設計手法とかには全然関係ないわけだし。
Tips の探求をしているだけというなら分かるけど。
0534デフォルトの名無しさんNGNG
>>532
そうですか、ではどうすると一番良いでしょうか?
>>533
確かにある意味興味本位ですが。
0535デフォルトの名無しさんNGNG
ポインタの利点を教えてください。
0536デフォルトの名無しさんNGNG
>>534
C++とかC#でも使ったらどうかな。
Cファミリでなくてもいいなら
RubyとかPerlとか使いなよ。
0537デフォルトの名無しさんNGNG
>>>535
関数に大きいデータを渡すときに渡すデータがポインタだけですむ
0538デフォルトの名無しさんNGNG
>>535
何と比べての利点を語って欲しい?
0539デフォルトの名無しさんNGNG
>>538
ポインタの無い言語(?)
0540デフォルトの名無しさんNGNG
>>535
無ければこりゃちょっともうどうしようもない
0541534NGNG
>>536
VCのコンパイラですが、ソースはC言語なのです。
VCはデバッガとして使用しているだけでC++は使用できないんです。
コンパイラがgccとかでしたら、最新の環境でうまくいくのですが。
0542デフォルトの名無しさんNGNG
>>537
それだけ高速になるってことですか?
0543デフォルトの名無しさんNGNG
すいません。余剰を求める場合、整数なら%を使えばいいのですが、
小数の場合どうすればよいのでしょう?
どなたか、教えてくださいm(__)m
0544デフォルトの名無しさんNGNG
if文とswitch文の巧い使い分けを求む!!
0545デフォルトの名無しさんNGNG
全部三項演算子にすれば全くもって問題ない
0546544NGNG
さすがにそれはつらい
0547デフォルトの名無しさんNGNG
>>543
「小数の余剰」の定義を記せ

答え:_________
0548デフォルトの名無しさんNGNG
\mathbb{Z} を知らないんじゃないの >小数剰余の中の人
0549日本語ダメ夫NGNG
>>543
余剰が小数の場合です。
例えば10.2mod3=1.2とか
0550デフォルトの名無しさんNGNG
>>543
fmod
0551デフォルトの名無しさんNGNG
>>544
漏れはif一筋。
0552デフォルトの名無しさんNGNG
>>551
関数ポインタは?
0553デフォルトの名無しさんNGNG
>>552
そりゃ配列格納して指数で呼ぶのが普通じゃない?
0554デフォルトの名無しさんNGNG
質問失礼します。

if (++r >= 360) {
…処理…
}

このif文は条件を満たしていればブロック内を処理しますが、
条件を満たしていなければrに1を加算するのでしょうか?
0555デフォルトの名無しさんNGNG
いいえ。
条件を満たしていようといまいとrに1加算し、更に条件を満たしている場合にはブロック内の処理もします。
0556543NGNG
>>550
ありがとうございます!
その関数の存在を初めて知りました
0557デフォルトの名無しさんNGNG
>>555
回答ありがとうございます!
ということは、if文というのは、条件を指定する括弧内の
関係演算子or論理演算子までを実行するということでしょうか?
或いは、括弧内を全部実行した上で条件分岐をするということでしょうか?
0558デフォルトの名無しさんNGNG
>>557
ちなみに、
++r
と
r++
の違いわかってますか?
0559デフォルトの名無しさんNGNG
>>558
はい。理解していますよ。
式の値が、+1を実行した後のrの値か、+1を実行する前の値かの違いという事ですよね?
0560デフォルトの名無しさんNGNG
ごめんなさい。>>555もちょっと間違ってます。

「ひとまずrに1加算した上で条件判定を行い、条件を満たしていればブロック内を実行する」がより正確なとこです。

>>557
括弧内が真又は偽であることが確定するまで処理を行います。
これは&&や||で条件を書き並べて練習するとよく分かると思います。
0561デフォルトの名無しさんNGNG
>>560
ありがとうございます。
真偽の程はともかくとして、カッコ内に四則演算があれば
それは実行されるということでよろしいのでしょうか?
0562デフォルトの名無しさんNGNG
>>553
qsort
0563558NGNG
>>559
なんか微妙に違うかな。
if(++r >= 360)だったら、
r += 1 を実行した後に r >= 360 を評価。
if(r++ >= 360)だったら、
r >= 360 を評価した後に r += 1を実行。
0564デフォルトの名無しさんNGNG
>>561
ええと、なんだか誤解されそうなのが怖いんだけど。
ひとまず、括弧内に普通の四則演算を書いておけばまず実行されると見て間違いない。
ただし、
int a = 1, b = 2;
if ( a == b && ++a == b) { ; }
というような場合  ↑
         ここの++aは実行されない(一番目の評価が偽であり、真偽判定が完了しているため)事に注意。
0565デフォルトの名無しさんNGNG
>>564
A && BでAが偽の場合と
A || BでAが真の場合はBは評価されない。

だったよな?>>561じゃないけど何か不安だ
0566!=563,!=564NGNG
++,-- は特殊な演算子だし
0567デフォルトの名無しさんNGNG
>>565
そーですよ。
0568デフォルトの名無しさんNGNG
昔はインクリメント・デクリメントを使うとCPUに優しいコードが吐かれたのかもしれない。
最近じゃ実行速度差なんてつかないだろうから、もっぱら可読性の問題だけど。
0569デフォルトの名無しさんNGNG
if(d != 0 && x / d){ ; }
0570デフォルトの名無しさんNGNG
そもそも、条件文に「++(--)」やら「+=(-=など)」を使うこと自体、
常軌を逸しているとしか思えない。
0571デフォルトの名無しさんNGNG
つまり
int a=1;
だと
if(a++=1){・・・}は{ }内実行されなくてaは2になって
if(++a=1){・・・}は{ }内実行されてaは2になるってこと?
0572デフォルトの名無しさんNGNG
>>568
読めないやつは足手まとい
0573デフォルトの名無しさんNGNG
慢心して居直る若年寄に将来性もなし
0574デフォルトの名無しさんNGNG
>>572
チーム組んだことなんか無いだろw
0575デフォルトの名無しさんNGNG
良い意味での子供っぽさをなくしたら技術者は寿命
0576デフォルトの名無しさんNGNG
>>571
何故、実験しないのかかなり問い詰めたい
0577デフォルトの名無しさんNGNG
それもそうだな。いってくる
0578デフォルトの名無しさんNGNG
>>574
またおまえか!

独りではチームと呼べないことに早く気づけよ!!
0579デフォルトの名無しさんNGNG
>>578
統合失調気味?
0580デフォルトの名無しさんNGNG
>>571
逆だ...
0581577NGNG
逆じゃん・・・
0582554NGNG
皆様ありがとうございます。
上記の皆さんの様々なやり取りwを読んで、勉強になりました。
ただの言い合いのように見えても実は内容があったような気がしました。
0583デフォルトの名無しさんNGNG
32767をインクリメントすると-32768になる環境とかあるんだっけ。
0584デフォルトの名無しさんNGNG
>>568
使用方法によっては前置か後置かで速度が大幅に変わるプロセッサも存在する。
今ではコンパイラが速いほうに修正すると思うが。
0585デフォルトの名無しさんNGNG
可読性とか言うけど、
while( *p != '\0' ) {
p = p + 1;
l = l + 1;
}

while(*p++ != '\0') l++;

下の方が読みやすいと思う人が多いんじゃないかな。
0586デフォルトの名無しさんNGNG
while(*p++) l++;
hehe

まー、個人的にはこういう場面では後置より前置のほうが処理の流れが分かりやすいので好き。
余計に煩雑化するから結局後置にするけど。
0587デフォルトの名無しさんNGNG
すいません、初心者です。
配列に10万個のデータを入れたいのですが、
for文で挿入するとスタックオーバーフローになってしまいます。
解決方法を教えてください。
0588デフォルトの名無しさんNGNG
100個ずつ挿入すれば大丈夫じゃないかな:P
0589デフォルトの名無しさんNGNG
>>585
間違えてるじゃん。
可読性は大事だよ。素直に書こう。
0590デフォルトの名無しさんNGNG
何の配列?
memset じゃだめ?
0591デフォルトの名無しさんNGNG
type juuman[100000];

もしかしてこんなん書いてる?としたらそれが原因だよ。>>587
0592デフォルトの名無しさんNGNG
>>587
配列と元データはどうやって用意してるのか。
静的に確保しようとすると失敗する可能性高い。
0593デフォルトの名無しさんNGNG
>>590
ランダムな数値なんです。
memsetっていうのがあるんですか。
調べてみます。ありがとうございます。
0594587NGNG
すいません。理解できなかったので、もう一度整理して質問させてください。
テキストに10万個のランダムなデータが入っていて、
それをfscanf関数を使って配列に格納したいのです。
このまま591さんが言ったようにjuuman[100000]にしようと思ったのですがだめでした。
memset以外の解決方法はありますか?
0595デフォルトの名無しさんNGNG
>>594
mallocで動的に配列を確保する。
0596デフォルトの名無しさんNGNG
>>571
どちらも
>>581
逆ってなんだよ?
0597デフォルトの名無しさんNGNG
ん?
ローカルに確保してるだけなんじゃないの? だからスタック不足。
グローバルで確保すればOKでしょ。
type juuman[100000];
0598デフォルトの名無しさんNGNG
>>596
あらら、分かってないのね。
0599デフォルトの名無しさんNGNG
分かってないのはわたしだったのね。
代入と比較を間違えるなヴォケエエエエエエエエエエエエエエエエエエエエエエエエエエ!!!@#@!@!!!
0600デフォルトの名無しさんNGNG
>>599
忘れた頃にまたおいで
恥かしいから
0601デフォルトの名無しさんNGNG
>>597
そういえば、そうだな。
0602デフォルトの名無しさんNGNG
!@#$%^&*()_+|〜
0603デフォルトの名無しさんNGNG
ローカルってそんな小さいの?
0604デフォルトの名無しさんNGNG
一般的には数キロバイトってとこだな。
0605デフォルトの名無しさんNGNG
>>604
勉強になりますた
0606デフォルトの名無しさんNGNG
じゃあ動的に確保されるときの尾っぽの部分はどこへ逝くの?
0607デフォルトの名無しさんNGNG
ヒトラーの尻尾だな
0608デフォルトの名無しさんNGNG
剰余と余剰の区別ぐらいつけろよ ぼけ
0609デフォルトの名無しさんNGNG
int v[10], num=0;
FILE *fp;
略
whie(!feof(fp))
{
    fscanf(fp, "%d", &v[num]);
    num++
}
で、ファイルから整数を取りv[ ]に入力してnumでデータ数を数えたいのですが
numが何故かデータ数よりも1多くなってしまいます。何故そうなるかの理由を教えて候。
例えばファイルに
10
20
と入ってるとnumが3になってしまいます
0610デフォルトNGNG
質問です。
C言語の本に付属してるコンパイラを使ってC言語の勉強してるんですが、
先週からつまづいてしまいました。
サンプルファイルをコンパイルすると、きちんと「hellow world」と表示されるのですが、
自分でまったく同じプログラムを打っても
「エラーE2206  不正な文字’’
 エラーE2206  不正な文字’@’
        ・
        ・
        ・
エラー2141 宣言の構文エラー
24error in compile」
と出るだけなんです。
サンプルファイルをコピーして貼り付けても同じメッセージが出ます。
どういうことかわかる人がいたら助けて!
0611デフォルトの名無しさんNGNG
読んだ時にエラー判定してないから、1つ余計にカウントされてる
0612デフォルトの名無しさんNGNG
>>609
numはnum++で0,1,2,3,4・・・と規則的に増えてゆくだけだから。
0613デフォルトの名無しさんNGNG
...カッコとかダブルクォーテーションとかの数があってないだけだな
0614612NGNG
おおっと、なんでもない。なんでもない。
0615デフォルトの名無しさんNGNG
>>610
貴様は全角スペースや変な全角文字を24行目付近に使用してはおるまいな?
0616610NGNG
>>611
すいませんエラー判定ってなんですか?
本には一言も書いてないのですが、具体的になにをしなければ
いけないんでしょうか。
0617610NGNG
>>611
あ、ごめんなさい。自分へのレスかと思いました。
0618612NGNG
>>616
エラーじゃなくてEOF判定だな。
while(fscanf(fp, "%d", &v[num])!=EOF)
num++;
こうすればよい。
0619610NGNG
>>615
24行も書いていないです。

#include<stdio.h>

main()
{
printf("hellow worle\n");
}


だけなんです
0620611NGNG
あれ?fscanf()ってそんな戻り値だったけ?
0621609NGNG
うぅよく判らんすまんがこれで理解があってるかチェックしてください。間違ってたら息の根を止めてください
ファイル内容
10
20
を読み込んだ場合

whileで論理チェック(ファイルは終わってないかどうか)
↓
終わってないので10をnum[0]へ。numを0から1にする
↓
whileで論理チェック
↓
okなので20をnum[1]へ。numを1から2に。
↓
whileで論理チェック
↓
ファイル終わってるのでループ終了。

じゃ、ない?
0622デフォルトの名無しさんNGNG
>>615
24行目にエラーがあるんじゃなくて、エラーが24個見つかったんでしょ。
0623デフォルトの名無しさんNGNG
まず、英語の勉強をしたもれ。
0624デフォルトの名無しさんNGNG
>>622
あ、ほんとだ。おやすみぃ♪
0625611NGNG
>whileで論理チェック(ファイルは終わってないかどうか)

ここが間違い(w
0626デフォルトの名無しさんNGNG
>>624
寝るのかよw
0627デフォルトの名無しさんNGNG
>>621
もう読み込むべきものがないときにfscanfして初めてEOFがセットされる。
0628デフォルトの名無しさんNGNG
>>619
やっぱどっかに変な文字が混入してると思うんだけどなぁ・・・。そのコードは普通にコンパイル通って実行もうまくいくし。
0629627NGNG
whileで論理チェック(ファイルは終わってないかどうか)
↓
終わってないので10をnum[0]へ。numを0から1にする
↓
whileで論理チェック
↓
okなので20をnum[1]へ。numを1から2に。
↓
whileで論理チェック
↓
okなのでfscanf。EOFがセットされる。numを2から3に。
↓
while中のfeofで判定。
↓
ループ終了。
0630デフォルトの名無しさんNGNG
というネタ?
0631デフォルトの名無しさんNGNG
feofってほとんど使わない。
大抵は入力関数の戻り値を調べることで済む。
0632610NGNG
>>628
変な文字は何度も確認しました。
驚くべきことに、他のサンプルファイルでもこうなることがあるんです。
0633609NGNG
>>629
ありがとー!!よく判った。
fscanfがeofを吐き出すのはなにもないものを読み込んだ時なんだね。だから三回ループしてたのか
助かりました謝謝
0634デフォルトの名無しさんNGNG
>>632
では、コンパイラは何を使ってますか
0635デフォルトの名無しさんNGNG
>>633
つまり、fscanfの返り値==0の場合も処理を考えたほうがいいね
0636610NGNG
>>634
本付録のBorland C++ Compiler5.5です
0637デフォルトの名無しさんNGNG
よーしgcc(MinGW)にのりかえよー
0638デフォルトの名無しさんNGNG
>631
例えばfscanf()は書式分の変換できなかった場合は変換できた個数を返す

読もうとして変換したかった個数より少なかった場合、
・最初の変換の前にファイルの終端文字 (end-of-file) があって、入力の失敗が生じた
この場合はfscanf()の戻り値でEOFかどうかわかるが

・エラーやファイルの終端文字の出現が変換が始まった後で生じた
この場合はfeof()でEOFかどうか調べる

0639デフォルトの名無しさんNGNG
gcc しか使ったことがないので分かりません
0640デフォルトの名無しさんNGNG
エディタに問題があるんじゃねーの?

ワープロを使っているとか。
0641デフォルトの名無しさんNGNG
C標準ライブラリの関数でもかなり良質のドキュメントが載ってるからMSDN Libraryは素晴らしい。
つーか正直なところMSDN Library以上に引きやすく、読みやすく、よくまとまっており、関連事項への参照があり、セキュリティ警告も出してきてくれる
ドキュメントツール(?)は無いと思うわけで。

そんな私はMinGW使いなのですよ。
0642610NGNG
メモ帳です。。
0643デフォルトの名無しさんNGNG
あれだな。きっと勝手にUnicodeで保存するハイパーメモ帳なんだ。
0644デフォルトの名無しさんNGNG
Wordにしとけ。スペルミスのところにちゃんと赤線を引いてくれるぞ。
0645デフォルトの名無しさんNGNG
Win2000のメモ帳ならUnicodeも使えるが、デフォルトはUnicodeじゃないしなぁ。
やっぱりハイパーか。
0646デフォルトの名無しさんNGNG
>610 かくちようし、何にしてる?
0647デフォルトの名無しさんNGNG
そういえばこちょうしで言語推定(確定)をしちゃうコンパイラもあるね。gccなんかもそうか。
0648610NGNG
>>644
今ワード使ったら、赤線ひかれまくりで、
エラーも出るし、なんかだめでした。
0649610NGNG
>>646
拡張子は.cです。
それをコンパイルすると.exeという実行ファイルができるんですが、
そこまでで終わってしまうんです
0650610NGNG
あ、終わってしまうというのは、実行ファイルをコンパイルするとエラーが出ると言うことです
0651デフォルトの名無しさんNGNG
・エディタを変える
・コンパイラを変える
・OSを変える
・人生を変える
・無に帰る
0652デフォルトの名無しさんNGNG
エラー E2206 C:\xxx\xxx.cpp 18: 不正な文字 ' ' (0x8140)
xxx.cpp ファイルの 18 行目に全角スペース (日本語のスペース) があるので半角スペースに修正する。

同様の間違いに、二重引用符が半角「"」ではなく全角「”」になっている、一重引用符が半角「'」ではなく全角「’」になっている、などがある。
注意すること。
0653デフォルトの名無しさんNGNG
>>651
「エディタを変える」は賛成だな。
0654610NGNG
できることならそうしたい
0655デフォルトの名無しさんNGNG
you can do it!
0656610NGNG
ワードパットでもだめですた。。。ウイルスかな
0657デフォルトの名無しさんNGNG
・エディタを変える
<- 今ここ ->
・コンパイラを変える
・OSを変える
・人生を変える
・無に帰る
0658610NGNG
考えたくないけど確かにコンパイラが怪しい。
サンプルファイルしか読み込まないなんて。いや、サンプルファイルすら
読み込まないBorlandC++Compiler
0659デフォルトの名無しさんNGNG
ワードとかなんか余計なスペースとか入りそう・・・(偏見?)
まぁBCC Developerとかのほうが使いやすいんじゃないかな?
0660デフォルトの名無しさんNGNG
>>658
BCCのせいにするなYO! BCCはそこまで酷くはないYO!
0661デフォルトの名無しさんNGNG
家のBCCはちゃんとさっきのコピペ読み込みました
0662デフォルトの名無しさんNGNG
>658 ...あんちボーランドか(w
0663デフォルトの名無しさんNGNG
じゃー、コンパイラは飛ばしてOS変えようか
0664デフォルトの名無しさんNGNG
VC++よりBCCの方が好きだな・・・
VC++はなんか新規プロジェクトの時出来る意味不明なファイル多いし
0665デフォルトの名無しさんNGNG
>>658
そのエラーになるソースを↓にアップしてみたら?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1076074304 (添付ファイルとしてアップロードできる)
0666デフォルトの名無しさんNGNG
>664 ...あんちマイクソ(w
0667デフォルトの名無しさんNGNG
>>663により、Linux厨とFreeBSD厨の争い開始。
0668610NGNG
>>663
いや、OSは98なので問題ないかと
0669デフォルトの名無しさんNGNG
98とかめっちゃ不安だな・・・
0670デフォルトの名無しさんNGNG
>>668
それこそ問題のような。コンパイルするとバイナリの中に隣のメモリ空間がコピーされることがあったりとまぁウハウハな環境だよ。
2000かペケポンをお勧めする。
0671デフォルトの名無しさんNGNG
確か(Windows)98のメモ帳はShift JISしか扱えなかったはず・・・
0672デフォルトの名無しさんNGNG
>2000かペケポン

ハードウエアが(w
0673デフォルトの名無しさんNGNG
BCCやらVC++やら・・・まるで別世界や・・・
vim on linux using GNU gcc は少数派なのか・・・


>>651
下から二番目でお願いします・・・
0674デフォルトの名無しさんNGNG
MS-DOS6.0 & RED2 も現役(w
0675664NGNG
>>673
Linux使う時はGCCも使ってる
VC++はDirectX使う時だけだな・・・BCCでDirectXつかえねぇ(7以下も・・・)
0676デフォルトの名無しさんNGNG
>>673
俺もvim好きだよー、マウスある環境だとやはり別コンセプトのエディタがいいからVxEditor使ってるけど
俺もLinux好きだよー、マシン一台空けるのめんどいからcoLinux使ってるけど
俺もgcc好きだよー、(こればっかりは完全に同じなのでネタ続かず)
0677610NGNG
98じゃC言語すら厳しいんですか・・
保守派の僕にはつらい
0678デフォルトの名無しさんNGNG
まぁ別に出来なくはないけどねw
自分は95でBCCとK2Editor使ってましたよ
0679665NGNG
無視された。
0680デフォルトの名無しさんNGNG
>>665
ドンマイ!
0681610NGNG
>>665
すいません無視したわけじゃないんですが・・
ソース自体には問題はないはずなんです。
ちゃんと起動するサンプルのソースをそのままメモ帳にコピーしても
動かないので、問題は違う場所にあるんだと思います。
わざわざリンクありがとうございます
0682デフォルトの名無しさんNGNG
うーん、BCC再インスコしてみれば?そこまでいけばstdio.hがちゃんと存在しないとかライブラリがかけてるとか、そういうのを疑った方が
0683デフォルトの名無しさんNGNG
>>610
hellow world ぐらい自分でソース打てよ
コピペだと改行コードとかいろいろ問題ある。
0684デフォルトの名無しさんNGNG
あ、自分で打ったソースがエラーか
それだったらコンパイルとおったソースと
バイナリで比較してみろ
0685デフォルトの名無しさんNGNG
>>683
改行コードをコピペ元に忠実にファイル内部でコロコロ変えてくれるエディタというのには出会ったことが無いので是非紹介して頂きたい。
0686610NGNG
>>682
たしかに。再インスコしてみます。
>>683
バイナリってどうやってみるんですか?もしかしてメモ帳でexe開いたときに
画面いっぱい文字化けが出てくるやつですか

あと質問ばかりで恐縮なんですが、ワードパットでソース書くときって
ファイルの種類はword6ドキュメント、字体は欧文でいいですか?

0687デフォルトの名無しさんNGNG
>>686
そうですね!
0688デフォルトの名無しさんNGNG
>>649
.exeの実行ファイルが出来てるならそれで問題ないだろ?

>>650
なんでそのEXEファイルをさらにコンパイルするんだ?
0689デフォルトの名無しさんNGNG
>>688 の指摘が何故今になって出てきたか理解に苦しむ
どういう雰囲気だったんだ?
0690デフォルトの名無しさんNGNG
夜中は>>650がなかったような・・・
なわけないか。でも全然目に入らなかった。
0691デフォルトの名無しさんNGNG
ん?実行ファイルをコンパイル?逆アセンブルか?
0692デフォルトの名無しさんNGNG

ファイルから実数型のデータを入力し、分散を求め、ファイルに出力するプログラムを作成せよ。



提出期限は、次週の授業開始時までとする。

ただし、プログラム仕様は下記のとおり。

(1) 入力するデータの数は100個とする。

(2) 分散を求めるために、ファイルを2回読み込む方式を取れ。 (本当は配列で取っておき、計算する方が効率が良いが、  前章のファイル入出力の復習の意味を含め、2回読み込
む方式を採用することにする)

(3) ファイルへの出力フォーマットは、下記のとおり。
平均 = 平均の計算結果
分散 = 分散の計算結果


ただし、最大値、最小値が複数存在する場合には、データ中での先頭からの番号は、 若い方にせよ。

(4) 入力ファイル名は、input.dat、出力ファイル名は、output.dat。
お願いします。
0693デフォルトの名無しさんNGNG
FFTについてのプログラムなんですけど、ソースコードを
解読してもらいませんか?
さっぱり、何が書いてあるのかわからなくて、困っています。
ソース↓
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=101

どなたか、お願いします。
0694デフォルトの名無しさんNGNG
>>692
スレ違い
0695デフォルトの名無しさんNGNG
>>693
スレ違い
0696610NGNG
すいません、実行ファイルをコンパイルするといういいかたは違ったかもしれません。
教科書には、例えばhellow.cというソースを実行するまでの過程は
「まず
�@bcc32 hellow.c
と打ち込んで、コンパイルがうまくいったら
実行可能ファイルhellow.exeが作られる。
�Aそれでは今できたばかりの実行可能ファイルhellow.exeを打ち込んでみましょう。

Hello World

と表示されましたか?」

とあるんですが、僕ができたのは�@までで、�Aでは不正な文字があるというエラーが
24個出てわけがわからないんです。
0697デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
return fprintf(stderr,"エラー: 不正な文字がある\n");
}
0698デフォルトの名無しさんNGNG
>>696
「打ち込んだ」というのは具体的にどうやったのか。
0699デフォルトの名無しさんNGNG
>>696
ソースを作成して(例: hellow.c)
コンパイルする(例: bcc hellow.c)と、実行ファイル(例: hellow.exe)が出来る。
のは理解できてるよね。
あとは、実行ファイルを実行すればいい。
070034NGNG
サンドバッグに打ち込んだんじゃねぇか?
0701デフォルトの名無しさんNGNG
難だ34って?
0702610NGNG
>>698
コンパイルしたときと同じように
bcc32 rei1_2.exe
と打ち込んでいたのですが、今言われてみて改めて本を確認すると
rei1_2
とだけ打ち込めばいいそうで、やってみたところ


hellow world

できたあああああああああああ!!!!!!!
氏のう。。プロ板の皆さん、こんな僕に90レスも付き合ってくださって
ありがとうございした。今度おごります!!
0703610NGNG
あ、rei1_2はファイル名です
0704デフォルトの名無しさんNGNG
>ファイルの種類はword6ドキュメント、字体は欧文でいいですか?
そんなわけない。テキストファイルだ。その程度の違いも分からない奴はワードパットやめろ。

今まで何をしたらどうだったか、全部忘れてしてしまえ。
>>610 から一貫して、言ってることがおかしい。
>サンプルファイルをコンパイルすると、きちんと「hellow world」と表示される
コンパイル直後で出るわけ無い
>サンプルファイルをコピーして貼り付けても同じメッセージが出ます
コピー直後は出ない
>それをコンパイルすると.exeという実行ファイルができるんですが、
>そこまでで終わってしまうんです
>あ、終わってしまうというのは、実行ファイルをコンパイルするとエラーが出ると言うことです
実行ファイルが出来たのなら問題ない。実行ファイルはコンパイルできない。
>考えたくないけど確かにコンパイラが怪しい。
馬鹿言え
>�Aそれでは今できたばかりの実行可能ファイルhellow.exeを打ち込んでみましょう。
>�Aでは不正な文字があるというエラーが24個出てわけがわからないんです。
ありえない。

コンパイル、実行のそれぞれの意味が分かってないように見える。
わかってない奴は、やったことの順序を正確に、一切はしょらずに報告しなきゃだめだ。
ファイルの場所やコマンドラインに打ち込んだ内容のコピペ、問題が起こる一番短いソースのコピペなどなど。
それを中途半端にして、言ってることが既におかしいから、誰も本当の間違い・勘違いを指摘できない。
0705デフォルトの名無しさんNGNG
タッチの差だったか。
>コンパイルしたときと同じように
>bcc32 rei1_2.exe

繰り返すが、これは最初のレスで書くべきことだぞ。途中から予想はついてたけどな。
何をやったか正確にわからなきゃ、何が起こってるか、こちとらわかんないんだから。
0706610NGNG
>>704
たしかに。。コンパイル、実行の意味がわかってないのに
恐るべき自分の思い込みでした。
目が痛いので眼科に行って、医者に「最近眼圧が高くて・・」と訴えたところ
医者「なんで眼圧が高いってわかるの?」
自分「あ、そういえばなんでだろ」と
逆に聞かれた時とまったく一緒ですね。
早くC言語極めて質問スレで役に立ってみせます
0707デフォルトの名無しさんNGNG
BCCもわけのわからんファイルをよこすなくらい言えよな。
0708デフォルトの名無しさんNGNG
でも実際に眼圧が高かったんだろ?
0709デフォルトの名無しさんNGNG
>>702
最期にこれだけはツッコましてくれぃ!


 何 だ hellow world て w
0710デフォルトの名無しさんNGNG
はろうぃーんわーるどさ
0711デフォルトの名無しさんNGNG
>>702
出来たのに氏ぬのかよw
0712デフォルトの名無しさんNGNG
>>610
コンパイルたら、実行たら、なにをどうしているのか
意味をちゃんと理解しろ。
それでようやくなんとかスタートラインに立てる。
0713デフォルトの名無しさんNGNG
>それでは今できたばかりの実行可能ファイルhellow.exeを打ち込んでみましょう。
>Hello World
>と表示されましたか?」

>hellow world
>できたあああああああああああ!!!!!!!

大丈夫ですか?
0714デフォルトの名無しさんNGNG
いつまで構うつもりだ
0715デフォルトの名無しさんNGNG
すみません。
あるプロセスからperlのスクリプトを起動しようとして、fork(), execle()
したんですが、スクリプトの行頭でperlに与えるスイッチとして-Twがないと、
何故かexecle()に失敗します。まぁ、それは置いといて、このときexecle()を
呼び出したプロセスがdefunctになります。
親プロセスはwaitpid()で子プロセスが死ぬのを待っているのですが捕らえきれて
ないようです。
こんな場合、waitpid()よりもwait()を使ったほうがいいのでしょうか。

ただ、単純なwait()だと、他のプロセスをfork()、execle()していると間違って
シグナルを貰ってしまいそう?なので不味い気がします。
0716デフォルトの名無しさんNGNG
>>715
スレ違い
0717デフォルトの名無しさんNGNG
>>716 スキルのない奴ほど意味なく「スレ違い」を連発。
0718デフォルトの名無しさんNGNG
>>717
藻前こそ>>1嫁

>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
0719デフォルトの名無しさんNGNG
スキルのない教条主義者ほど使えないものはないな…
0720デフォルトの名無しさんNGNG
煽りの下手な低脳ほど使えないものはないな...
0721デフォルトの名無しさんNGNG
適切なスレすら選べない低脳にかまう必要は無い
0722デフォルトの名無しさんNGNG
1行レスしかできない低能ドモが増えたなw

execle()に失敗したら、exit()してるか?
0723デフォルトの名無しさんNGNG
親まで殺す気か!
0724デフォルトの名無しさんNGNG
pid = fork();
if (pid == 0){
if (execle(....) < 0){
exit(-2); // 戻り値に特に意味無し
}
}
if (pid > 0){
waitpid(pid, ... );
}
こうか?
0725デフォルトの名無しさんNGNG
スレ違いな話題を続けるからあほな書き込みが続く
0726デフォルトの名無しさんNGNG
ちなみに、スレに沿った質問なんてほとんど無いわけだが。
0727デフォルトの名無しさんNGNG
>>726
で?
0728デフォルトの名無しさんNGNG
無くしてもいいんじゃない?
0729デフォルトの名無しさんNGNG
gotoを使うべきケースを教えてください。
0730デフォルトの名無しさんNGNG
>>729
http://pc5.2ch.net/test/read.cgi/tech/1021364372/
らへんにあるんじゃないかな。中身みてないけど。
0731デフォルトの名無しさんNGNG
caseを使うべきケースを教えてください。
0732デフォルトの名無しさんNGNG
>>731
ケースバイケースじゃないかな。
0733デフォルトの名無しさんNGNG
switchを使うときですいっち
0734デフォルトの名無しさんNGNG
>ケースバイケースじゃないかな。
ちなみに、こういうレスをスレ違いとのたまう奴は居ないわけだが。死んでいいよ。
0735デフォルトの名無しさんNGNG
>>734
スレ違いです。あなたが。
0736デフォルトの名無しさんNGNG
↑
スレ違いのテンプレート

・よく読みもしないで脊髄反射レス
・単に「スレ違い」と言いたいだけ。
・冗談をスレ違いだ、とは指摘しないダブスタ野郎
↓
0737デフォルトの名無しさんNGNG
標準ライブラリにディレクトリ作成機能がないんですが
これは付け忘れですか?
0738デフォルトの名無しさんNGNG
>>737
ディレクトリの概念を持たない環境の為
0739デフォルトの名無しさんNGNG
ちなみに、初期の MS-DOS にも
ディレクトリの概念はなかった。
特殊ファイルである CON や NUL が、ディレクトリに関係なく使用できるのは
その当時の名残であると伝えられている。
0740デフォルトの名無しさんNGNG
その割には、テキスト入出力は付いてるのな。
0741デフォルトの名無しさんNGNG
>>740
それはライブラリ側で対応できる(とANSIはみた)からだろう。
0742デフォルトの名無しさんNGNG
>>738
それはいいわけじゃないのですか?

ファイルの概念を持たない環境も、
標準入出力の概念を持たない環境もあるでしょう?

>>741
それを言うのならすべてライブラリ側で対応できますよ。
0743デフォルトの名無しさんNGNG
>>742
ノイマン型でない環境もあるかもしれないよな。
ワイヤードロジックを使う環境とか。
0744デフォルトの名無しさんNGNG
作られた当時からライブラリが進化してないだけだろ。
0745デフォルトの名無しさんNGNG
>>742
言い訳って何よ?バカじゃない?
単純に、仕様としてディレクトリという概念が必要な関数が策定とされなかっただけじゃん。
0746デフォルトの名無しさんNGNG
標準ライブラリでもディレクトリは扱えるわけだが。
作成するのができないだけで。
0747デフォルトの名無しさんNGNG
ライブラリを作ろう!
0748515NGNG
けっきょく
char *型からconst char *型への暗黙変換はあって
char **型からconst char **型への暗黙変換はないという
仕様なんでしょうか??
0749デフォルトの名無しさんNGNG
誤解を恐れずに敢えて言うならば、その通りだ。
0750デフォルトの名無しさんNGNG
>>748
char **p=0;
char * const *cp=p;
0751デフォルトの名無しさんNGNG
標準ライブラリでも
ディレクトリは作れるだろ。
system("mkdir hoge");
とか、他にもやり方はあるし。
0752デフォルトの名無しさんNGNG
>>745
相手にすんなって
人を小馬鹿にすることでしか自我を確認できない寒ーい中年が
PG系の大手掲示板によくいるんだよ
ネットであろうがリアルであろうが
そんなことばっかりしてる奴にロクなのいないよ
黙って冷ややかに憶えといてやろうぜ
0753デフォルトの名無しさんNGNG
> 人を小馬鹿にすることでしか自我を確認できない寒ーい中年が
> PG系の大手掲示板によくいるんだよ
特にでるふぁいしか知らないような逝き遅れがね
0754デフォルトの名無しさんNGNG
>>752-753
流石。自分の事はよくわかってらっしゃる。
0755515NGNG
>>750
それってつまり・・・
char ** → const char **
は無理で
char ** → char * const *
は暗黙変換ありってことを言いたいのでしょうか?
ただ、char * const * p;
とした場合、定数なのは *pですよね?つまりポインタが定数。
ポインタのポインタと実体は変更可能ということですよね。
const char **だと実体が定数なんで、char * → const char *
みたいにchar **の場合も実体を定数にする暗黙変換がやりたかった
んですが・・・素直にキャストしるってことですかね。このへんの
仕様がどうもわからん。
0756デフォルトの名無しさんNGNG
char **a;

a=(char**)calloc(10,sizeof(char*));
a[0]=(char*)calloc(10,sizeof(char));

a=(char**)realloc(a,20*sizeof(char*));

a[19]=(char*)calloc(10,sizeof(char));
strcpy(a[19],"abcde");

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

free(a);

どこかの掲示板で2次元配列はreallocでは確保できないというのを見たのですが、上記のプログラムは正常に動きました
問題点はありますか?
0757デフォルトの名無しさんNGNG
>>756
a[0]とa[19]がfreeされていない
0758デフォルトの名無しさんNGNG
>>756
reallocが使えるのは最上位の配列要素の数の変更のみで,
他の配列要素は変更できません。
0759デフォルトの名無しさんNGNG
>>755
char **p=0;
const char * const *pp=p;
0760デフォルトの名無しさんNGNG
>>758
ということは、2次元配列のサイズを変更するということはでき二のですか?
0761デフォルトの名無しさんNGNG
くだらない質問だけど検索すると物凄い数出てくるのでサクっと教えてください

#define PI 3.14f

ってのが出てきたのだけどこのfってどういう役目をしてるのですか?
例えば
#define PI 3.14と書くのとはどう違うのでしょうか。桁数?
0762デフォルトの名無しさんNGNG
>>610
コンパイルするとき、なんていうコマンド入れてる?
0763デフォルトの名無しさんNGNG
「う」は宇宙の「う」
「f」は?
0764デフォルトの名無しさんNGNG
>>763
feelのf
0765デフォルトの名無しさんNGNG
fuseikakuのf
0766デフォルトの名無しさんNGNG
>>761
検索ワードにサフィックスを咥えてもう一度ぐぐってこい。
0767デフォルトの名無しさんNGNG
floatのf
0768デフォルトの名無しさんNGNG
fusianasanのf
0769デフォルトの名無しさんNGNG
>>766
あなたの野太いちんぽを咥えさせて頂けませんか?
0770デフォルトの名無しさんNGNG
oyoso3のf
0771デフォルトの名無しさんNGNG
ポッキーのfだろ
0772デフォルトの名無しさんNGNG
>>770
f入ってねえじゃんっw
0773デフォルトの名無しさんNGNG
fuckのp
0774761NGNG
初心者の俺はネタかどうかの判断つかないが歯がゆい・・
つまり数字の後ろにfってつけると「それはfloat型だぞ」という宣言みたいな感じの認識でよろしくて?

#define PI (float)3.14と同じ意味?

だとしたら何もない時は何になるの?intかな。
つうか根本から間違ってそうな気もしてきた・・・
0775デフォルトの名無しさんNGNG
>>774
少数の場合、dとして扱うかfとして扱うかは結構違うので
0776デフォルトの名無しさんNGNG
longで宣言した関数からreturn 0L;をやったり
int hoge(long, long);
な関数にhoge(20L, 15L);
というふうにやるのは結構無意味だと思うんですけど、どんなもんなんでしょうか?
0777デフォルトの名無しさんNGNG
3.14     double型
3.14f 3.14F float型
3.14l 3.14L long double型
小数点文字がついた時点でintではなくなる
0778761NGNG
>>777
ありがとー!その説明でよく判った
0779デフォルトの名無しさんNGNG
>>776
少なくとも、無意味ではないですが、だからといって特別な効果があるわけでもないです。
0780デフォルトの名無しさんNGNG
>>776
intの範囲に収まる値なら確かに無意味そうだ。
0781デフォルトの名無しさんNGNG
>>779-780
intが32bit値と仮定してですけど、hoge(4100000000, 4100000000);などとしてもコンパイラが勝手にlongとして
解釈してくれると思うんですがどうなんでしょう。
0782デフォルトの名無しさんNGNG
intの範囲に入るfloat型か、たしかに無意味かな。
0783デフォルトの名無しさんNGNG
int と long のサイズが違う処理系で、
1 << n と 1L << n では、nの値によっては、結果が変わってしまう処理系がある。
0784デフォルトの名無しさんNGNG
>>761
fushianasan の f
0785デフォルトの名無しさんNGNG
_| ̄|○
0786デフォルトの名無しさんNGNG
フェムト
0787515NGNG
>>759
あ、つまりポインタを定数にすることで、暗黙変換ができるようになり、
実体も定数にしたければ頭にconst付ければいいということですか。
なんかわかりづらいですね。それとも理にかなってるのかな?
char ** → const char ** この暗黙変換を禁止した理由ってなんだろ。
0788デフォルトの名無しさんNGNG
>>781
いや、それは違うんじゃないか。
Lがついていない以上、ただのintだろう。
0789デフォルトの名無しさんNGNG
>>787
それ「エキスパートCプログラミング」に載ってた。
規格書読めば分かることらしい。
0790デフォルトの名無しさんNGNG
じゃーK&R読んでみよう
0791デフォルトの名無しさんNGNG
標準入力から任意の桁の数字を1桁ずつ配列に入れるにはどうしたらいいでしょうか?

例:32030
a[0]=3,a[1]=2,a[2]=0,a[3]=3,a[4]=0のように代入したいんです
0792デフォルトの名無しさんNGNG
gets or scanf
0793デフォルトの名無しさんNGNG
>>791
getchar() - 48
0794デフォルトの名無しさんNGNG
>>791
getcharでいいのでは?
aはchar型なわけでしょ?
scanfで文字列としてとってstrlenやってからまわした方がやりやすいかも。
0795デフォルトの名無しさんNGNG
>>791
NULL分を確保するのを忘れるな!
0796デフォルトの名無しさんNGNG
>>787
typedef char* charp;
charp *p=0;
const charp *pp=p;
0797デフォルトの名無しさんNGNG
↑キモいからそんな事はやめて
0798デフォルトの名無しさんNGNG
>>793
isdigit() で数字判定も入れるべし
0799デフォルトの名無しさんNGNG
>>787
char const c[]="do not write";
void f(char const** p){*p=c;}
void g(char** p)
{
 f(p);
 (*p)[0]='\0';
}
0800515NGNG
>>796
おお・・そんなやり方が。
無理やりにでもやりたいなら、そういう方法ということですか。
表記上*が1つの宣言なら、いけるんですね。
2つなら1段階デリファレンスしたものをconst指定して・・・
ってもうこのへんでやめときます。
言語作った人がどういう考えでこのように実装したのか
ちょっと気になったんですが。

エキスパートCにのってるそうなので立ち読みしてきます。
どうもでした。
0801デフォルトの名無しさんNGNG
>>800
typedef char* charp;
const charp *pp;;

この時ppの型はchar * const *だ
0802515NGNG
>>799
あ、定数性が失われる・・・ということですか
ああそうか〜そうだそうだ〜
char **→const char **やっちゃうと
const char *が代入できちゃって
元のchar **の方でデリファレンスしちゃうと
charが書きかえれるわけでconst char *の
実体が変わっちゃうってこと?(意味不明)
0803515NGNG
>>801
おお、それも見落としていた〜
マクロみたいに展開すりゃいいってもんじゃないんですね〜
うおおお
0804515NGNG
こうしてみると昔どっかのスレでconst charとchar constの
どっちの形式を使うかで話題になっていて、自分はconst charの
方がメジャーだろうとこっちを使っているのですが、constの理解
のしやすさでいえばchar constもいいかもしれませんね。

char const **
char * const *
char ** const

typedef char* charp;
charp const *pp;
0805デフォルトの名無しさんNGNG
>>804
こんなスレはもう見たか?→http://pc5.2ch.net/test/read.cgi/tech/1078193971/
0806デフォルトの名無しさんNGNG
C言語で、エクセルファイルに計算結果は書き込めるんでしょうか?
0807デフォルトの名無しさんNGNG
>>806
ああ。できるさ。
0808デフォルトの名無しさんNGNG
あの学校のプログラミングの授業で微分方程式を必ず用いてプログラム作れっていう
課題が出たんですけどどんなのやればいいですかね?
ちなみにバネ2本つないで振動させるっていうのは駄目らしいです。
0809デフォルトの名無しさんNGNG
>808
宿題スレで聞くといい。
0810デフォルトの名無しさんNGNG
>>804
const char*
と
char* const
では、意味が違う。前者はポインタの差しているcharがconstant.
後者はポインタがconstant.
0811デフォルトの名無しさんNGNG
>>808
コマの運動方程式を立てたシミュレーション。
0812808NGNG
>>809
宿題スレってどこすか?
0813デフォルトの名無しさんNGNG
貴様はせめて>>1-3を読め度阿呆
0814デフォルトの名無しさんNGNG
ドキュメントが欲しくてPSDKのupdateを始めて6時間、まだCore SDKすらインスコおわんねぇ・・・
15KB/sってあんた・・・
0815デフォルトの名無しさんNGNG
書き場所間違った。
0816デフォルトの名無しさんNGNG
>>810
const char*
と
char const*
では意味が同じ、だが下の方が良い書き方ではないのか?ということを>>804は言ってるんだろ
0817デフォルトの名無しさんNGNG
標準ライブラリ関数とシステムコールの使い分けについて、
なんかガイドとかないでしょうか?
0818デフォルトの名無しさんNGNG
>>817 man
0819デフォルトの名無しさんNGNG
標準にあれば標準を使い
標準になくシステムコールにあればシステムコールを使う
0820デフォルトの名無しさんNGNG
>>816
意味は違うっつーの
804もconstの理解云々書いてるだろーが
0821デフォルトの名無しさんNGNG
>>820
char const* と const char* でどう意味が違うのか、言ってみな。
0822デフォルトの名無しさんNGNG
お前がバカなのは良く分かるけど、810のレスくらいちゃんと読んでやれよ。

char* const a;
const char* b;

a = "aho"; /* ダメ */
b = "baka";

*a = 0x0;
*b = 0x0; /* ダメ */
0823デフォルトの名無しさんNGNG
char const* a;
const char* b;
の違いじゃないのか
0824デフォルトの名無しさんNGNG
Cでoracleへ接続・操作したいんですけど、どうしたらよいのでしょうか?
環境はwin200・Visual Studio6.0です。
お願いします。
0825デフォルトの名無しさんNGNG
win200 キター!
0826824NGNG
>>825
スマソ
言われて初めて気が付いた
0827デフォルトの名無しさんNGNG
>>824
環境スレへGO!
0828824NGNG
>>827
これは環境スレだったのですね。
旅立ちます
0829デフォルトの名無しさんNGNG
>>822は *const と const* の違いが分かってない?
0830デフォルトの名無しさんNGNG
829は頭良すぎ
0831829NGNG
すげーだろ。
0832デフォルトの名無しさんNGNG
charは絶対チャーって読むよな
0833デフォルトの名無しさんNGNG
プログラムを誰か作ってくれませんか?
言語はCで。詳細は、[email protected]
1万円でお願いします。しかし、期限は今週の金曜まで!
ええっと、レベルはプログラム経験2年くらいの人なら半日もかからず終わります。
当方、プログラム経験がないため、四苦八苦してるオヤジです。

0834デフォルトの名無しさんNGNG
>>829-834
氏ね
0835デフォルトの名無しさんNGNG
>>833
安いよ。あと100倍だったら請負ってあげるけどね
0836デフォルトの名無しさんNGNG
半日もあまったら中途半端で何していいやら
100倍はいらないが1万ごときじゃ足りん
0837デフォルトの名無しさんNGNG
あっそ
0838デフォルトの名無しさんNGNG
この手の書き込みって必ず何人かは釣られるよな。
0839デフォルトの名無しさんNGNG
おm
0840デフォルトの名無しさんNGNG
とりあえず内容を聞いてみたい。
当方Cでの開発経験2年程。私くらいなら妥当な値段かも・・
0841デフォルトの名無しさんNGNG
>>833
616 :デフォルトの名無しさん :04/06/30 16:11
未経験のオヤジの目算じゃ当てにならないな
5分で終わるかもしれないし3ヶ月の案件かも知れん
0842デフォルトの名無しさんNGNG
ああ、そうだった。
ここはCスレである前に2ちゃんねるだったんだ。
0843デフォルトの名無しさんNGNG
>>840
詳細はここではいえないのですが、概要はこうです。
�@あるテキストファイル(Aとします)を読み込む。
�Aもう一つのテキストファイル(Bとします)を読み込む。

ここで、AとBが完全のデータが完全に一致していたら、
Aファイルに「OK」、一致していなければ「NG」と記述するプログラムをお願いしたいのです。
Aファイル、Bファイルの中身はここではお教えできませんが。

よろしくお願い致します。

0844デフォルトの名無しさんNGNG
詳細を聞かないと、どつぼに嵌まる可能性があるよな。1マソが高いのか
安いのか。まさか、CAD作ってくれとか?
0845デフォルトの名無しさんNGNG
(訂正)
AとBのデータが完全に一致していたら(略)
すいませんです。
0846デフォルトの名無しさんNGNG
>>843
もう、出来ているではないか。
0847デフォルトの名無しさんNGNG
メール出してそこでやれやうっとうしい
0848デフォルトの名無しさんNGNG
それぐらいで良いなら承るよ
0849デフォルトの名無しさんNGNG
>>843
鳩飛ばしました
0850 ◆4m36BLkkLA NGNG
>>844
トリップつけます。
いいえ、違います。
エクセルに貼り付けるやり方も存在するらしいですが、Cでお願いしたいと思います。
0851デフォルトの名無しさんNGNG
あははははははははははははははだfdslfじゃdfw0おkbvmpそいs
0852 ◆4m36BLkkLA NGNG
>>848
お願いいたします。
助かります。
0853デフォルトの名無しさんNGNG
こんにちは!yosinobuといいます。都内の大学3年だよ。
ここの掲示板で見かける女の子のコメントで「処女を捨てたい!」
って子がいますけど、力になりたい!です。
もし、男性とHしたことないけど、
身近に相談相手がいないって人がいましたら、
メールくださいね(^_^)大学ではサッカーをしてますよ♪
だから見た目も悪くないと思います!
0854デフォルトの名無しさんNGNG
>>843
そこまで具体的に出来てるなら出来たも同然やん・・周りの人間に頼めよ
0855デフォルトの名無しさんNGNG
メアド検索してみたら>>853が出てきた。
0856デフォルトの名無しさんNGNG
ところで>>822は>>821に答えてないけど何処行った?
0857デフォルトの名無しさんNGNG
>>810
0858 ◆4m36BLkkLA NGNG
捏造ですか。。
0859デフォルトの名無しさんNGNG
>>833

linuxであればcmpというツールがあるし、
windowsならcygwin入れれば使えるし、
webで探せばそういったツールはいくらでもありますよ
0860デフォルトの名無しさんNGNG
どうしようもないスレ
0861デフォルトの名無しさんNGNG
>>833
system("diff A B");
/* 事後処理 */
我ながら完璧だ。
0862デフォルトの名無しさんNGNG
そんなのにc使っちゃぁ・・・
0863デフォルトの名無しさんNGNG


-------------------- キリトリセン --------------------
0864デフォルトの名無しさんNGNG
詳細は流せないが単純にHEX単位で
比較するだけじゃないらしい
0865デフォルトの名無しさんNGNG
ところで>>822は>>821に答えてないけど何処行った?
0866デフォルトの名無しさんNGNG
察してやれ
0867デフォルトの名無しさんNGNG
何を?
0868デフォルトの名無しさんNGNG
>>857
>>829
0869デフォルトの名無しさんNGNG
>>867
char const* と char *const が同じだと思って優越感に浸ってる

あるいは

const char* と char const* が同じって事に気づいた
char const* と char *const は違うって事に気づいた
そして逃げた
0870デフォルトの名無しさんNGNG
逃げたのか。なるほど
0871 ◆4m36BLkkLA NGNG
>>864
どうですか?できそうですか?
メールお待ちしております。

0872デフォルトの名無しさんNGNG
やっと整理できた。

>804 「const char より char const の方が理解し易いかも。」に対し
>810 が勘違いして「const char* と char* const は違う。」
>816 が「そんな話はしていない」と指摘。
>820 の勘違いは解けず「違うっつーの」
>821 が再度指摘。
>822 が引っ込みつかなくなる。
>823 が更に指摘。
>829 がアサッテの方角へ。
0873デフォルトの名無しさんNGNG
必死だな
0874デフォルトの名無しさんNGNG
どこかのスレで、確かに>>804と同じ話は出た。
俺も書いたから間違いない。
ちなみにその時は、const指定が型を修飾すると考えたほうがわかりやすいかも、という意見も出ていた。
0875デフォルトの名無しさんNGNG
>>843
> (日)あるテキストファイル(Aとします)を読み込む。
> (月)もう一つのテキストファイル(Bとします)を読み込む。

「半日もかからずに終わる」というのはうそですね。
0876デフォルトの名無しさんNGNG
分かりやすさとはデファクトスタンダードな書き方に倣う事だ。
俺理論でマイナーな書き方をされたら迷惑なだけ。
0877デフォルトの名無しさんNGNG
int signed
0878デフォルトの名無しさんNGNG
char define
0879デフォルトの名無しさんNGNG
auto signed int i;
とか。
0880デフォルトの名無しさんNGNG
じょうちょうでちゅよおじょうちゃん。
0881デフォルトの名無しさんNGNG
void main(argc, argv)
unsigned argc;
char* *argv;
0882デフォルトの名無しさんNGNG
質問っす。

*a++

この処理順番って、同順位なんで、++が右(何もない)から左(a)に結合されるんだから、
こういうこと↓にならない?

1) a++  ※すでにアドレスが進む
2) *a   ※進んだアドレスのさすものをあらわす

でもならないんだよね・・・
なんで?意味教えてえらいヒト!
0883デフォルトの名無しさんNGNG
>>882
根源的に勘違いしている。

"副作用"でググれ。
0884デフォルトの名無しさんNGNG
>>883
副作用?
ただのポストインクリメントじゃん。
0885デフォルトの名無しさんNGNG
a++
aの内容がインクリメントされる。が式の値としてはインクリメントされる前の値が返る。

int *p=a;
a+=1;
*p;
と同じ感じ?
0886デフォルトの名無しさんNGNG
アドレス演算子のほうが算術演算子よりも優先順位高くなかったっけ?
エロイ人より。
0887デフォルトの名無しさんNGNG
>>882
右結合ってのは、*(a++) ってことだ。
左結合ってのは (*a)++ ね。
そうして、 (a++) の値は、インクリメントされる前の a の値。
0888デフォルトの名無しさんNGNG
*++a のばやいは?
0889デフォルトの名無しさんNGNG
>>884
副作用が起こるタイミングと
演算子の優先順位は全く無関係。

それだけの話。
0890デフォルトの名無しさんNGNG
>>888
*++a って、エラーにならないの?
0891デフォルトの名無しさんNGNG
ママに訊いてこい
0892ママNGNG
初めまして890のママです。
息子がいろいろとお世話になっております。
さて *++a の件ですが、
アナルパールに見えるので卑猥だと思います。
0893デフォルトの名無しさんNGNG
>>892
ママは*++a使った時あるの?
0894デフォルトの名無しさんNGNG
!(bool)~++*--p;
0895デフォルトの名無しさんNGNG
「初めてのC」って本買いました。
0896デフォルトの名無しさんNGNG
Windows環境では絵を表示することは簡単ですが

MS-DOS時代はどうやって絵を表示させていたのですか

それともCでは不可でC++ならできることなのですか
0897デフォルトの名無しさんNGNG
>>896
環境依存です。
0898デフォルトの名無しさんNGNG
はじめてのC♥
0899デフォルトの名無しさんNGNG
AAは不滅です!
0900デフォルトの名無しさんNGNG
>>896
GDCという石をコントロールして書くか
VRAMに直接書く
0901デフォルトの名無しさんNGNG
>>896
VGAモード設定して、VRAMにカラーデータを書き込んでたんです。
0902デフォルトの名無しさんNGNG
TurboC++いかった。
0903デフォルトの名無しさんNGNG
>>896
VRAMっていうメモリ領域に色コード書き込むと点が表示されたり
PCに組み込まれたサブルーンを呼び出して線を引いたりしていた。
0904デフォルトの名無しさんNGNG
CだとかC++でないとかではなくて
もっと低レベル域でのプログラムをしていた
0905882NGNG
さんきゅ〜
です。
でもまだわかんないや

>885

式の値って、(a++)自体が式じゃないの?
だったら式が終わった後、加算したアドレスの値をみるってことじゃないの?

0906デフォルトの名無しさんNGNG
皆さんありがとうございます

VRAMに書き込んでいたのですね

それは純Cでもできるのでしょうか

なんとなくアセンブラの領域なような気がしますが
0907デフォルトの名無しさんNGNG
クソゲーマンセー!
0908デフォルトの名無しさんNGNG
俺はセントロニクスにフォトカプラーつけてステッピングモータを
いじって遊んでた。アセンブラとCを使ったが当時はCは遅くてつかえんかった。

 
0909デフォルトの名無しさんNGNG
for(i = -1; i < len; i++){
}
て書かなきゃいけなくなるしなぁ。不便だなぁ。
0910デフォルトの名無しさんNGNG
>>908
あたりまえやんw
マシン語が分からないからアセンブラ使ってた時代だろ
0911デフォルトの名無しさんNGNG
>>905
int main()
{
  int i = 0, j = 0;
  printf("%d %d", i++, ++j);
  printf("%d %d", i, j);
}
0912デフォルトの名無しさんNGNG
  Cできればえらいとか言ってるうちは℃素人だね。
  肝心なのはアルゴリズムを書くセンスと意地だよ。
0913デフォルトの名無しさんNGNG
そういえばあの懐かしき時代、Cが出来れば神だったよなあ。
0914デフォルトの名無しさんNGNG
>>910
 今でもマシン語大変なんでアセンブラ使ってる人
 いると思うけど。
0915882=905NGNG
>>911

すげぇー!;が式の終わりということで、後加算するということでOK?
0916882=905=915NGNG
ちがった。
printf("%d %d", j++, j++);
         �A  �@ 

だと、 1 0 と表示されるね。

つまり�@の戻り値を返した後から加算はされるんだね。
0917デフォルトの名無しさんNGNG
>℃素人
うまい!
0918デフォルトの名無しさんNGNG
意地ね
おととし Palm 用の JPEG ロダ作るのに遅まきながら 68 はじめたけど
64K 超えるやつを表示できない めんどくさくてやめたへタレ
中学〜高専で、乏しい知識で 98,DOS/V 両方のMAG ローダなど作ったよ 懐かしい
BASIC + アセンブラで 3D のゲームとか アセンブラだけで上海とか
DOS窓あるマルチウィンドウアプリとか あのころの意地はどこへ
0919デフォルトの名無しさんNGNG
>>916
>printf("%d %d", j++, j++);

これの結果がどうなるかはコンパイラによって変わるぞ
0920デフォルトの名無しさんNGNG
>>916
インクリメント文が一つの文で複数回評価される場合の動作は、未定義だったか不定だったか忘れたが、
そういうこった。
0921デフォルトの名無しさんNGNG
>>916
http://www.kouno.jp/home/c_faq/c3.html#0
ここ嫁
0922デフォルトの名無しさんNGNG
>>919
うちは gcc で 1 0と出た

>>918
(ノд`)
0923デフォルトの名無しさんNGNG
雑談系のスレッド形式だしループはあまり気にしないが
それでも昨日と同じ話をループするのはちょっと・・・って思った
0924デフォルトの名無しさんNGNG
char str[4]="end";

if(str=="end")
printf("%s\n", str);

としてもprintfが実行されません。何故ですか?
お暇な人もしいたら判りやすく教えてくだされ
0925デフォルトの名無しさんNGNG
C++に逝け
0926デフォルトの名無しさんNGNG
超初心者質問で申し訳ありません

ある参考書を見てるとこうゆうプログラムがありました

int c;

c = getchar()

while (c !='.')
{
printf("%c",c);
c = getchar();
}


getcharは文字を得る関数ですよね?   何故cはchar型じゃないのでしょう?
0927デフォルトの名無しさんNGNG
str[0]のポインタと文字列リテラル"end"のポインタを比較してるから。

#include <string.h>

if(!strcmp(str, "end"))
printf("%s\n", str);
0928デフォルトの名無しさんNGNG
>>927
ありがとー。よく判った。
0929デフォルトの名無しさんNGNG
>>926
FAQすぎてネタとしか思えない。
0930デフォルトの名無しさんNGNG
小文字を大文字に変換するのに、toupperを使わずにc += ('A' - 'a')を使ってるプログラムがあるのだが、
なんで、toupperを使わないんだ?
0931デフォルトの名無しさんNGNG
>>930
書いた人に聞けよ。
0932デフォルトの名無しさんNGNG
>>930
移植性を考慮する必要がなくて関数呼び出しを避けるためとか思いつくけど、
作った人間の勝手だと思われ。
0933926NGNG
ネタじゃないですよ
0934デフォルトの名無しさんNGNG
>>926
オレも初心者だから間違ってるかもしれんが、
EOF(-1)返すためにintなんじゃないかな
0935デフォルトの名無しさんNGNG
>>933
http://www.kouno.jp/home/c_faq/c12.html
ここの12.1
0936デフォルトの名無しさんNGNG
>>931
退職したので、聞けないんだよ

>>932
そか、移植性か。
考えたことなかったな。

ありがとう。
0937デフォルトの名無しさんNGNG
toupperを知らないだけな気がする。
数字かどうかの判定にもif(c>='0'&&c<='9')とかやっていそう。
0938デフォルトの名無しさんNGNG
>>937
うん、やってるよ。
読むのがシンドイ。
コメントないし。
0939926NGNG
ありがとうございます

 intなのに%cで出力するのを見たのは初めてなので戸惑ってしまいました。
0940デフォルトの名無しさんNGNG
>>937
普通はどうするの?
0941デフォルトの名無しさんNGNG
>>939
ちなみに文字定数('a'とか)はint型だ。
0942デフォルトの名無しさんNGNG
'a' は 97 だったかな。
0943デフォルトの名無しさんNGNG
>>940
isdigitじゃないの?
俺は'0'〜'9'で比較してるけど
0944デフォルトの名無しさんNGNG
くっしっし
0945デフォルトの名無しさんNGNG
'\x81\x40' という記述を見ました。
Cでシングルクォートの中に2バイトも書けるんでしょうか?
それともそのコンパイラーの独自拡張なんでしょうか?
VCとかにもってっても使えるでしょうか?

Cの標準規格ではシングルクォートの中に何バイトまで書けるんでしょう? 教えてください。
0946デフォルトの名無しさんNGNG
CでCGI作ってるんだけど
日本語のコード変換とか正規表現とかって
どうやってます?
Perlでいうとこのjcode.plがCにもあるの?
0947デフォルトの名無しさんNGNG
intのサイズ内(普通4byte)までなら書けるんじゃないかなぁ(無責任)
0948デフォルトの名無しさんNGNG
('A`)って何で通らないのですか。
0949デフォルトの名無しさんNGNG
>>948
マンドクセーから
0950デフォルトの名無しさんNGNG
> intのサイズ内(普通4byte)までなら

そのコンパイラーはintは64bitだったんですが、そこまでは試してみませんでした。
標準規格ではどうなってるのでしょう?
0951デフォルトの名無しさんNGNG
>>950

2chでそんなまじめな質問して、わかるやつがいると思うほうがバカ。
ガキどもが知ったかぶりしてるだけなんだから、答えてもらうのは無理。
0952デフォルトの名無しさんNGNG
そろそろ次立てた方がいいのでは?
0953デフォルトの名無しさんNGNG
自作自演が出たところで、新スレ立ててきます。
0954デフォルトの名無しさんNGNG
自己紹介も結構だが、質問に答えてやってくれよ>>951
0955デフォルトの名無しさんNGNG
萎えるね
0956デフォルトの名無しさんNGNG
自己紹介って何
0957デフォルトの名無しさんNGNG
> getcharは文字を得る関数ですよね?   何故cはchar型じゃないのでしょう?

char型では256通りしか返し分けられないから。

文字コードの256種類とEOFの合計「257」通りを返しわけるのはcharでは足りないので
intで設計されているわけ。
0958デフォルトの名無しさんNGNG
>>946
コード変換ルーチンを必要とするプログラマが、
全員自ら自作して、しかも誰一人として公開してないとでも思っているの?

ま、たいしたもんでもないけどね・・・
0959デフォルトの名無しさんNGNG
>>951
君の数十倍は稼いでそうなプログラマも居るんだけどね。
人格がアレだけど(そういえばlinux板のスレどこ行ったやら)
0960デフォルトの名無しさんNGNG
次スレ
http://pc5.2ch.net/test/read.cgi/tech/1088610149/
0961デフォルトの名無しさんNGNG
ああそう。
0962デフォルトの名無しさんNGNG
9 名前:デフォルトの名無しさん :04/07/01 01:05
はきだめで見てようやく気付いた
0963デフォルトの名無しさんNGNG
ANSI-Cの規格では、文字定数が2文字以上の文字を含む場合の動作は処理系定義
例えばBorland Cコンパイラの場合、
int i ='aaaa';
printf("%d\n",i);
このような文字定数を指定すると
iには1633771873が格納される。(int i = 0x61616161 と解釈する)

int i ='aaaaa';
だとコンパイルエラーとなる。

当然、他のコンパイラがこのように動作する保障は無い

0964デフォルトの名無しさんNGNG
> ANSI-Cの規格では、文字定数が2文字以上の文字を含む場合の動作は処理系定義

え? 処理系依存ってことは、「まちがい」ではないのね?
エラーにしてもいいって程度?
0965デフォルトの名無しさんNGNG
環境によって動くかもしれないけど移植性を求めるならやんないほーがいーよという程度
0966デフォルトの名無しさんNGNG
>>964
そこじゃなく最後の行を読め
0967デフォルトの名無しさんNGNG
int InputKey(Boolean (*keyEventProc)(unsigned char key,int *argv), void (*nullEventProc)(int *argv),int argc, ...)
↑のような関数を作ったのですが、
呼び出し側で
InputKey(PlayerInitPointOn,NULL,3, &Y1,&Y2,&AT);
というように呼び出したのですが、
エラーが出てしまいます。
---------------------------------
第1引数の関数は
Boolean PlayerInitPointOn(unsigned char theKey, int *argv[])
です。
第2引数はNULLでこの呼び出しでは処理させないようにしてます。
第3は可変個引数の数で、第4以降は可変個引数です。
----------------------------------
PlayerInitPointOnに引数を与えないと使えないということなんでしょうか? 関数ポインタを与えたいのですが。
InputKey関数の処理で
if((*keyEventProc)(aKey, argv)==true) return 1;
という風に呼び出そうとしてます。
(aKeyはunsigned char型で,argvはint **型です。)
------------------------------
エラー内容は
unsigned char(unsigned char, int**) から
unsigned char (*)(unsigned char , int *)への不当な暗黙の変換です。
と出ました。
単に関数ポインタを使って、呼び出したいだけなのですが。多分、何か自分は勘違いしてるんだと思うのですが、それが何か。。。長文すみません。

0968デフォルトの名無しさんNGNG
int *argv
と
int *argv[]
0969967NGNG
int InputKey(Boolean (*keyEventProc)(unsigned char key,int *argv[]), void (*nullEventProc)(int *argv[]),int argc, ...)
に直しましたが、今だ動きませんです。。。
呼び出し文に問題有りそうな気がするのですが。
0970デフォルトの名無しさんNGNG
C99仕様書のサイトを貼って下さい
0971967NGNG
C99仕様書って、何でしょうか。
ソースを貼ってくれって意味ですか?
そうだとしたら、どこか貼れる場所知ってたら教えてくれませんか。
すみませんが。
0972デフォルトの名無しさんNGNG
>>970
JIS X 3010:2003
ISO/IEC 9899:1999
タダじゃありませんよ。
0973デフォルトの名無しさんNGNG
具ぐれ場(ry
0974デフォルトの名無しさんNGNG
>>936
c = toupper(c) は c = islower(c) ? c + ('A' - 'a') : c の動作だから
c が必ず英小文字であることが解ってる場合には
c += ('A' - 'a') の方が無駄がないんだよ。
0975デフォルトの名無しさんNGNG
>>967
このプログラムが問題なく通るので、書き込み以外の部分にエラーがある。
ソースの無関係と思われる部分をコメントアウトしながらコンパイルしていき、
エラー発生個所を特定するのが良いと思う。

#define NULL 0
typedef int Boolean;

Boolean PlayerInitPointOn(unsigned char theKey, int *argv[]) { return 0; }
int InputKey(Boolean (*keyEventProc)(unsigned char key,int *argv[]),
void (*nullEventProc)(int *argv), int argc, ...) { return 0; }

main(){
int Y1,Y2,AT;
InputKey(PlayerInitPointOn,NULL,3, &Y1,&Y2,&AT);
return 0;
}

// >>970 は貴方へのレスではないと思われ
0976デフォルトの名無しさんNGNG
初心者です。強制的にループかけたいからっていって
while(1<0) とかやるのは変態でしょうか?
普通はどうするのでしょうか。
0977デフォルトの名無しさんNGNG
while(-1<0)の間違い
0978デフォルトの名無しさんNGNG
while(1)
0979デフォルトの名無しさんNGNG
ふつう、for(;;)
0980デフォルトの名無しさんNGNG
979の言うとおり
0981デフォルトの名無しさんNGNG
> そこじゃなく最後の行を読め

ようするにエラーにしなくてもいいのね?
0982デフォルトの名無しさんNGNG
> ふつう、for(;;)

いいえ

for (;;)

です
0983デフォルトの名無しさんNGNG
>>967
>int InputKey(Boolean (*keyEventProc)(unsigned char key,int *argv), void (*nullEventProc)(int *argv),int argc, ...)

を

typedef Boolean (*keyEventProc_t)(unsigned char key,int *argv[]);
typedef void (*nullEventProc_t)(int *argv);

int InputKey(keyEventProc keyEventProc, nullEventProc nullEventProc,int argc, ...)

にしてやってみれ。
0984デフォルトの名無しさんNGNG
>>983
×int InputKey(keyEventProc keyEventProc, nullEventProc nullEventProc,int argc, ...);
○int InputKey(keyEventProc keyEventProc, nullEventProc_t nullEventProc,int argc, ...);

スマソ
0985デフォルトの名無しさんNGNG
(゚д゚)ウメー
0986デフォルトの名無しさんNGNG
(゚д゚)タケー
0987デフォルトの名無しさんNGNG
(゚д゚)マツー
0988デフォルトの名無しさんNGNG
(゚д゚)アルファー
0989デフォルトの名無しさんNGNG
(゚д゚)アルフィー
0990デフォルトの名無しさんNGNG
(゚д゚)アレフゥー
0991デフォルトの名無しさんNGNG
(゚д゚)タカミィー
0992デフォルトの名無しさんNGNG
(゚д゚)サクゥライー
0993デフォルトの名無しさんNGNG
(゚д゚)サカザクィー
0994デフォルトの名無しさんNGNG
(゚д゚)サクゥライオプティカルラボー
0995デフォルトの名無しさんNGNG
(゚д゚)サカザクィハチュルイズキー
0996デフォルトの名無しさんNGNG
(゚д゚)メリアーン、メリアーン、メリアンヲンチュセザーミィ
0997デフォルトの名無しさんNGNG
.
0998デフォルトの名無しさんNGNG
(・C・)
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。