祝49回 C言語ならあっしに聞け

このエントリーをはてなブックマークに追加
547デフォルトの名無しさん
コンパイル中...
yakyu.c
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x81' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(93) : error C2018: 文字 '0x40' は認識できません。
D:\tomoki\C言語\project1\yakyu.c(107) : fatal error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー

yakyu.exe - エラー 9、警告 0

何度も確認しましたが間違いはないはずなのこうなってしまいます。どうすればいいですか?
>>547
またコピペか。
>>547
日本語か何かの文字コード変じゃないか?
>>547
さよなら!
>>547
0x8140は、ShiftJISで空白文字ですね。
インデントに2バイト空白使ってませんか?

#もしエディタにそういう設定があるなら、2バイト空白と1バイト空白の見た目を変えておこう。
>>541
世界中のCコンパイラーを全てインストールしているパソコンを持ち歩いている。
553547:03/02/02 23:16
釣れた(w
554デフォルトの名無しさん:03/02/02 23:17
>>547
exe名が駄目なんだと思うよ。yakyu.exeじゃあね。
コンパイルする前に、
全角スペースを半角スペースに置換。
>>553
釣られ上等。
1%でもマジの可能性があれば、喜んで釣られるよ。
557547:03/02/02 23:19
続きはこちらでお願いします(w
http://pc.2ch.net/test/read.cgi/prog/1043845897/290-
558デフォルトの名無しさん:03/02/02 23:23
ありがとうございました、なんとかなりそうです
なんか名前がばれちゃいましたw
559547:03/02/02 23:29
error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
560デフォルトの名無しさん:03/02/02 23:33
レスつかないようなのでもっかいききます。

error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
561デフォルトの名無しさん:03/02/02 23:40
とりあえずもいっかいききます

error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
なんでそんな何回も書きこむんだ?

error C1004: 予期せぬ EOF が検出されました。
cl.exe の実行エラー
ってなんですか?
563デフォルトの名無しさん:03/02/03 00:04
timeGetTime関数ってCでつかえます?
以下のプログラムでまわしたんですがエラーがでてしまいました。
以下のプログラムは某ホームページから引用させてもらいました。
time関数とtimegettime関数の比較をおこなってます
include <stdio.h>
#include <time.h> // for clock()
#include <windows.h> // これと下のヘッダーはマルチメディアタイマーに必要です
#include <mmsystem.h> // winmm.lib をリンクするのを忘れずに
int main(int argc, char* argv[])
{
int i;
clock_t oldTime, newTime;

oldTime = clock();
for (i = 0; i < 10; i++) {
while (oldTime == (newTime = clock())) ;
printf("clock [sec] = %.3f \n",
(float)oldTime / (float)CLOCKS_PER_SEC);
oldTime = newTime;
}

DWORD oTime, nTime;
oTime = timeGetTime();
for (i = 0; i < 10; i++) {
while (oTime == (nTime = timeGetTime())) ;
printf("timeGetTime [ms] = %d \n", oTime);
oTime = nTime;
}

return 0;
}
>>563
エラーの内容を書かないような奴には教えない。
565563:03/02/03 00:14
すいません。エラーは
error C2275: 'DWORD' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
c:\program files\microsoft visual studio\vc98\include\windef.h(141) : 'DWORD' の宣言を確認してください。
error C2146: 構文エラー : ';' が、識別子 'oTime' の前に必要です。
error C2065: 'oTime' : 定義されていない識別子です。
error C2065: 'nTime' : 定義されていない識別子です。
です。
>>565
コンパイラとOSを書かないような奴には教えない。
>>566
メッセージみりゃ、コンパイラとOSくらい察しはつくが。
568563:03/02/03 00:22
win2000でvc
です
コンパイラとOSを書けないような奴には教えない。

570デフォルトの名無しさん:03/02/03 00:26
CPUのリソースを無駄に食わないよう
する手法にsleep関数使うことやスレッド優先度を下げるという
のがあるそうですが、スレッド優先度を下げるとはどうやるんですか?
具体的にサンプルソース提示して教えてたも〜
>>570
O S は ?
あなたが使ってる環境なんて、知りませんから。
572デフォルトの名無しさん:03/02/03 00:39
>>571
SUPER-UNIXです
教えてたも〜
>>572
nice だの renice だのというコマンドで優先度は上下可能かなあ
>>563
bccは通った。
スレッドごとのは、使ってるスレッドライブラリによると思う

でも、下手な小細工するよりも、CPUバウンドな処理と
IOバウンドな処理に分けてしまったほうがいいかもしれんよ。
576563:03/02/03 00:52
>>574
どもです。
c++ではとおったんですが、Cではとおらなくて・・・
timegettime関数がCでは無理なのか、それとも違うところで引っかかってるのかわからなくて、
よければ助言ねがいます
577デフォルトの名無しさん:03/02/03 00:54
もうすぐC言語検定があるんですが、3級受けたことある人いらっしゃいますか?
申し込みはしたんですが、どういう問題が出るのかさっぱりわからないので不安です。
>>577
C言語の歴史が高頻度で出題されるとあった
くだらね・・・
580577:03/02/03 01:12
役にたたないのか・・・鬱
4300円出したのに・・・
しかも合格できなそうなのが怖い
資格って、履歴書の空欄を埋めるためとか、
会社の技能手当てという役にはたつんじゃない?
実戦の知識とかは、また別の話だし。
582デフォルトの名無しさん:03/02/03 01:20
>>581
その通り
583577:03/02/03 01:22
とりあえず明日本屋いって対策テキスト探します。

通販できるサイトはあるけど試験が5日後だから間に合わなし

とりあえずC言語の歴史でもサイトで勉強しようw
584デフォルトの名無しさん:03/02/03 01:24
>>583
何で受けようと思ったの?
落ちそうなら尚更…
585デフォルトの名無しさん:03/02/03 01:31
int *a, *b;

int *a;
int *b;
って同じですか?
586577:03/02/03 01:31
>>584
今大学2年で、情報学科でCを少し勉強してきたからそろそろとっとこうかな、と。

つーか、試験受けることにしたら勉強するようにならないかな?っていうダメダメな理由だったりする。
丁度春休み入って堕落する時期だし
>>586
必要になれば、嫌でも習得しようと努力する
さして、必要と思ってない時期にやってもまるで身につかない
とういか、理工系で暇な今な時期に遊ばないでどうする・・・
遊べ!!
それが現時点での最重要項目だ・・・
>>576
timeGetTime() は C で使える。
むしろ、Win32 API は C から使うために設計されたようなものだ。

エラーの原因は、宣言 DWORD oTime, nTime; がブロックの途中に現れる
という事だ。
C では変数宣言をブロックの先頭で行わなければならないという原則を
忘れたのか?

それと、エラーの報告では行番号を省くな。
もしくは、どこがエラーになったのかちゃんと示せ。

あと、#include <mmsystem.h> はいらないんじゃないかという気がする。
VC++ なら、#pragma comment(lib , "winmm.lib") を入れておくと、自分で
リンク時のライブラリを指定する必要がなくなる。
589577:03/02/03 02:00
>>587
たぶんその辺は心配いらず
590563:03/02/03 02:11
>>588
ありがとうございます!!
そしてご指摘ありがとうございます。
今後きおつけます。
>今後きおつけます。
気を付けてくれ
592デフォルトの名無しさん:03/02/03 10:02
はぁー、c言語の宿題がわかりません。
だれか助けてくれませんか?
今日の4時までなんですが・・・もうだめぽ
もう過ぎているから大丈夫
気にするな
>>585
同じです。

以下は別物です。
(1)
int* a,b;
(2)
int *a,b;
(3)
int *a;
int b;
(1)(2)(3)も、これはこれで同じです。
この点注意が必要です。
#define PINT int*
typedef int *pint;

PINT a, b;
pint c, d;
ヒントでPINT
>>594発展
>>595応用
>>596ボケ
>>597ツッコミ



ヽ(`Д´)ノ ゴラッー
>>595
犯人はBだっ!
ワラタ
いーなーこの感じ
600デフォルトの名無しさん:03/02/03 14:04
-------------------------------------------------------------------------
実数値の小数点以下2桁目が6、7のときだけ+1する8Bの実数型の関数を作れ。
プロトタイプ宣言は不要。引数は1個とし、引数によって関数の結果を返してはいけない。
-------------------------------------------------------------------------

これ解ける人いますか?;;
宿題スレ逝け
プロトタイプ宣言は不要というのは何か意味あるんだろうか
>>601
言うまでもなくちんとマルチポストしてますよ。
double func(double val)
{
 char buf[22];
 int ch;

 sprintf("%20.15f", val);
 ch = strchr(buf, '.')[2];
 if (ch == '6' || ch == '7') {
  return val + 1.0;
 }
 return val;
}
>>603
問題文の 2 行目の最後は見えてます?
あと、602 は読んでくれてない?
>>604
素朴な疑問だけど、>>603は「引数によって関数の結果を返してはいけない」と思うけど?
> 引数によって関数の結果を返してはいけない。

嫁ていないのは誰だろうか
 return val;
んじゃ、一時変数に入れればいいじゃん。
600=602=604=607なのかな?(・∀・)ニヤニヤ
>>609
同意。
そしてマルチポスト野郎にまともに答えてくれる香具師はいない罠。
漏れは 600 ではないけど、602=604=607 だよ。
ついでに 「向こう」 の 771。
「引数によって」をどう捉えるかだろうね(問題文作ったヤシが阿呆)
>>601
宿題検収の際に、いちいち確認するのが面倒だからプロトタイプは不要。
という事では?
つ〜か、お前らマルチポストにされたこと分かってて
何レス付けてんだよ。マルチポストした奴と同程度のマナー違反だよ。
int *wall_type,*wall_p_type;
をポインタを使わないで記述する方法を教えてください。
ポインタを使わないでポインタを記述することはできません。
617615:03/02/03 16:26
他の記述法はないのですか?
何を目的としたコードかも書いてもいないのに、代替案なんか出せると思いますか?( -д-) 、ペッ
>int *wall_type,*wall_p_type;
はポインタ変数の定義に見えるんだけど、
ポインタ変数はポインタなんだから他の定義方法はありません。

#これが引き数だって言うんなら*演算子を使わないこともできるけど。
代替案

int a = 123;
unsigned long b;
b = reinterpret_cast<unsigned long>(&a);
std::cout << *reinterpret_cast<int*>(b);
Cじゃないし。鬱。
それの何処がc言語なんだと小一時間……
宿題なら宿題スレにどうぞ。
#って、移動するならきちんと断ってからね。
624615:03/02/03 16:40
ポインタの定義をしてその後、
fscanf(fp1,"%*s %d",wall_type)と書かれているんだけど
これをポインタじゃない方法で処理ってできますよね?
結局、漏れが何をしたいのかというと
ポインタで書かれているトコを他の書き方に変えてそれを
FORTRANに書き換えたいんだが・・・C初心者でスマソ(´・ω・`)
コピペミスッってんのか何なのか、断片的過ぎて何とも。

int wall_type;
fscanf(fp1,"%d", &wall_type);

こうか?
ファイルからの入力関数なんで、FORTRANの入力関数に置き換えるんだろー
626615:03/02/03 16:52
fscanf(fp1,"%*s %d",fluid); /* number of fluids */
fscanf(fp1,"%*s %d",wall_type); /* type of fluid treated as wall */
fscanf(fp1,"%*s %d",wall_p_type); /* type of fluid treated as wall+pressure */
for(i=0;i<*fluid;i++)

いやコピペはミスってないでつ。
凄く濃そう>8B
%*sって使ったことないから知らんかったスマソ、scanf…
scanfに渡すのは変数のアドレスなんで、
int *wall_type;
fscanf(fp1,"%d", wall_type);
これを
int wall_type_value;
fscanf(fp1,"%d", &wall_type_value);
こうで良いのでは、って意味。
っていうか、見る限りそもそもポインタ変数を使う理由のない状況じゃん。
なんでそこでポインタ変数を使っているのか判らないと正解は出ないと思われ。
>>624
C のソースの処理内容を把握して、新規にコードを起こせ。
つーか FORTRAN スレ逝け。

C のコードが何を意味するのかわからないという質問なら、このスレでも
回答はつくかも知れない。
631615:03/02/03 17:10
ぉぉぉ!
>>627タンさんくす!
その書式で書き直せまする?
けどこれ書いた人なんでポインタ使ってんだろ・・・
後からなんか弊害出てきますかねー?
> 627タンさんくす!

間違いにしてもワラタ
では8Bで書き直そうか
wall_type には、fprintf() に入る前に何か代入されてないの?
もしそうでなかったらそれはまともなプログラムじゃないよ。
それってぬる(ry
NULLならいいが、初期化されていない場合、なにが
はいっているかわかったもんじゃないので……
>>638
初期化しなかったchar型配列の値を晒すスレ
http://pc2.2ch.net/test/read.cgi/tech/1041327869/l50
>>639
腐ってるスレの URL なんか貼るなよ
641635:03/02/04 09:42
やっぱ指摘されちった
642デフォルトの名無しさん:03/02/05 22:02
sub (char *adr1, char *adr2){
int wkint;
char wkchar[3];

memset(wkchar,NULL,sizeof(wkchar));
memcpy(wkchar,adr1,2);
sscanf(adr1,"%x",&wkint);
*adr2 = wkint;
}
こんな感じのサブルーチンがあります。
このルーチンがどのような処理をしているのか、
また、動作するのか?
以上2点をお教えいただきたいです。
厨房ですいみませんがよろしくお願い致し枡。
たとえ省略可能でも関数の戻り値の型はかけ。int の四文字くらいなんてことないだろ。

> memset(wkchar,NULL,sizeof(wkchar));
memsetの第二引数の型はint。
intにポインタを渡すな
645デフォルトの名無しさん:03/02/05 23:21
てst
646デフォルトの名無しさん:03/02/05 23:28
int *p;
int w;

p[w]++; ← と 同じ処理をするものはどれかっていう問題で、

選択肢が、
A. ++*( p + w )
B. *( p + w) ++
何ですが、違いがわかりません。教えてください。
また釣りか
ハァ?
この問題出した奴晒せ。
(*(p+w))++;
649デフォルトの名無しさん:03/02/05 23:36
>647
どれが餌ですか?
>646
C言語検定の問題集です。
んじゃ回答集を良く余目。
解答集の解説
 配列の内容を参照して加算する。
  「++*( p + w)」 は、
     @*( p + w )の番地を参照し、
     A参照した値に+1をする
 演算式である。
653デフォルトの名無しさん:03/02/05 23:56
んじゃAが正解?。
Aが正解でした。
さて>>648はとんだ恥晒しだった訳だが
>>653
Bはコンパイル通らないぞ
>>646 の問題は自動車免許の学科試験と同じく
注意力を試してるいるんだな(w
正解は (*( p + w ))++ じゃねーの?
>>658
俺もそう思った。
>>658>>659
(゚Д゚)ハァ? 選択肢に無い解答書いといて何が
「正解は…じゃねーの?」だ。おめでてー頭してんなこいつら。
>>660
千と千尋の10頭の豚から両親を捜すと言う問題では「この中にはいない」と言う例外が正解になっていたが。
>>660
なっていたが    ・・・・・・
663220:03/02/06 01:41
>>660
例え不適当な選択でも点数さえ稼げればいいのだと強硬に主張する
あさましい >>660 が居るスレはここですか?
664663:03/02/06 01:41
名前欄の番号は無視してくだせぇ

          アヒャーー
      ∧∧
     (゚∀゚ )⌒ヽ ≡≡ = = -
    ,.、,,U‐U^(,,⊃_       /i ≡≡≡ = = -
   ;'゚∀゚ 、、:、.:、:, :,.: ::`゙:.:゙:`''':,'.´ -‐i = ≡≡≡ = = -
    '、;: ...: ,:. :.、.:',.: .:: _;.;;..; :..‐'゙  ̄  ̄
     `" ◎ ''`゙ ◎ ´´   - = ≡ = = -
p[w]++;
がp[w]を評価しておらず、効果が副作用だけなんでAでも正解といえば正解なんだが。
正直、引っ掛け問題だよなこれ。悪問だと思う。

x = p[w]++;

とかなってたらまた別なんだがな。
p[w] = p[w]++;
>>666
キタ━━━━━(゚∀゚)━━━━━!!!!
#define ぬるぽ NULL
>B. *( p + w) ++
* と ++ ってのは、演算子の優先順位は同じだが、結合規則が「右から左」なので、
 *( (p+w)++ )
って意味になるのだよワトソ(ry
>>669
そんな話は誰もしていない。
671デフォルトの名無しさん:03/02/06 16:38
中身が"OMAEMONA"という文字の
char s[512]があり、その中身を
16進数でchar hoge[512]に移したいんですけど
どのようにすればよろしいでしょうか?
初心者で申し訳ないですが
おながいいたします。
>>671
> 16進数でchar hoge[512]に移したいんですけど
> おながいいたします。
もうすこしネタとばれにくいネタを書け
673671:03/02/06 17:05
>>672
いやこれまじなんすよ・・・・
void Wakaranchi (char *adr1, char *adr2){

int wkint;
char wkchar[3];

bzero(wkchar, sizeof(wkchar));
memcpy(wkchar, adr1, 2);
sscanf(adr1, "%x", &wkint);
*adr2 = wkint;

}
こんな感じのサブルーチンじゃできないっすかね??
初心者でマタークわからんのです。。。
ほんと助けてくんろー!!
おながいします。。。
>>671
#include <stdio.h>

void str2hex(char *dest, const char *src)
{
  if(*src)
  {
    do {
      dest += sprintf(dest, "%02x ", (unsigned char)src++);
    } while(*src);
    dest--;
  }
  *dest = '\0';
}

int main()
{
  char s[512] = "OMAEMONA", hoge[512];
  str2hex(hoge, s);
  puts(s);
  puts(hoge);
  getchar();
  return 0;
}
pc2.2ch.net/test/read.cgi/tech/1042640474/674内の
関数str2hexにバッファーオーバーランによるセキュリティ・・・
>>575
え? 関数str2hexは無罪だろ。
まさかstrcpyもバッファーオーバーランによるセキュリティがあると思ってる?
>>676
まさかstrcpyにバッファオーバーランの危険がないと思ってる??
678674:03/02/06 17:59
そりゃ 「セキュリティ」 は無いわな
>>677
皆無とは言わないが、取り立てて言う程のことでもない。
gets() と違い、strcpy() は使い方さえ間違えなければ問題は絶対発生しない。
セキュリティの問題とクラッシュの問題を混同している >>675 >>677 が居る
スレはここですか?
681671:03/02/06 18:35
>>674サソ
ご丁寧にありがdございます。
作成いただいたプログラムを走らせたところ
OMAEMONO
4c 4d 4e 4f 50 51 52 53
↑このような結果になりました。
これって、アドレスかなんかなんでしょうか?
厨房でよくわからずご迷惑お掛け致しますが
御教授お願い致します。
dest += sprintf(dest, "%02x ", (unsigned char)src++);

ここ

dest += sprintf(dest, "%02x ", (unsigned char)*src++);

だべ。
>>681
訊く前に、674 がどういうプログラムなのか読み取ってみようとは
思わないのか?
>>681
ちょとワラタ
あんさん…じぶんでゆうといてそりゃ…
>>684
いや、あれは確かにアドレスの成れの果てだぞ
686681:03/02/06 19:21
>>682サソ
ありがとんごぜぇます。

>>683サソ
ヨミトレネェンダヨォォ...
おせぇてくれよ。処理内容を。
ニホンゴで。
>>684
ワライゴトジャネーヨ
ヽ(`Д´)ノ ウワァァン!!
>>686
処理内容なら、あんたが自分で言ったぞ。
>>686
何がわからないのかも述べず、単に教えてくれと繰り返すだけの香具師には、
説明してやる気にはなかなかなれないもんだ。
確かにアドレスかなんかなだな。断言できる。
素朴な疑問なんだが、「初心者」で処理を提示されても
理解できないような香具師が、なんでまた
こんな問題を解決しなければならないんだ?

>中身が"OMAEMONA"という文字の
>char s[512]があり、その中身を
>16進数でchar hoge[512]に移したいんですけど
>どのようにすればよろしいでしょうか?

それがもし、課題かなにかなら擦れ違いだし、
仕事かなにかならこんなところで他人に頼ってちゃダメだろ。
それともなにか? 今後何か出るたんびにここで聞こうってのか?
>>690
そりゃぁ「あっしに聞け」だからな。
>>1 に書くべきことを >>2 に書いてしまった 1 が全部悪い
ascU code.
694デフォルトの名無しさん:03/02/06 21:41
memcpy(hoge,s,sizeof(hoge));
関数はmemcpy,strncpyどっちかだな。
strcpyはサイズ指定出来ないから領域破壊の元だ。やめとけ。
つうか、技術評論社のC言語辞典読んどけ。
>>679
そんなこと言い出したら gets() だって使い方間違えなきゃ問題は絶対発生しないぞ。
>>695
gets() を呼び出したらそれだけで問題の回避は不能だとあれほど
だからCなんか捨ててC++に鞍替えしれとあれほど
>>694
getsとstrcpyは外界と接点があるかどうかという点で大きく異なる。

strcpyは使い方さえ誤らなければ安全に使うことが可能。
外界と接点がないところで使えば、コードで安全であることを保障できる。

getsは外界と接点があるゆえに、コードだけでは安全であることを保証できない。
gets用のバッファを4ギガ分用意すれば、
環境によってはもんだいは起きない。
>strcpyはサイズ指定出来ないから領域破壊の元だ。やめとけ。

正気か?
>>699
何を問題と定義するかによるけどね。
まともに C やってる人で、領域破壊の可能性がある状況で strcpy() を使う
香具師が居るとは思えないが・・・。
>>699
そういう阿呆な事をする前に、fgets() の使用を検討しろ。
>>702
うん、だから普通はstrmove()を作る
strcpyなんてC特有の関数だよなあと思った
>>702
getsと違い、対策すれば完全に防げるが。
>>706

>>702
>領域破壊の可能性がある状況で

日本語が理解できないなら即ち氏ね
>>707
ああスマン
つっこまれるまで気づかなかった。
結論

gets()は使うな。
strcpy()で領域破壊の可能性を拭い切れないならstrdup()でも使え。
だからと言ってstrncpy()は別な問題を発生させるから心して使え。
いっそ、sprintf()で%.*sでも使うほうがよっぽどましだ。
strcpy()が一切使えないなんていってると、strlen()さえ使えないことになるぞ。

こんなところかな。
>>709
> strdup()でも使え。

そういう人が使うとメモリリークのバグをうみそう・・・
>>710
バッファオーバーランよりはマシ。
もっともそれだとバグに気が付かなくて、コードの修正も本人の技量向上も望めそうにないが。
>>711
そそ、それが悩みの種。
イオン導入を考えております。
最適なビタミンC誘導体は何ですか?
また、何所で手に入りますか?
>>713
ネタはageで。
>>713
あなたの脳髄が最適です。
あなたの尊い犠牲によって入手できます。
716デフォルトの名無しさん:03/02/07 21:02
ちょっと質問させてください。
char型の配列 10.111 を
double型のデータ 10.111 に変換する方法ってあります?
strtod
strtod() なんて面倒っちい
atof() でええやん
なんで面倒なのかわからん
ぬるぽ与えるのが面倒
721716:03/02/07 21:17
なるほど。ありがとうございます。
722720:03/02/07 21:22
殴られずに済んだぜ( ̄ー ̄)
723デフォルトの名無しさん:03/02/07 22:37
for文を使って、1から1000までの7の倍数を表示して、
変数sevenが49の倍数の時に改行、というプログラムをつくりたいのですが、
いまいちうまく行きません。ソースの一部を貼ります。
これをコンパイル&実行するとDOS窓にずらーっと数字が出てきてとまりません。
どこがおかしいのでしょうか?
まだfor文の使い方がよくわからないところもあるので、
どうやればできるのか、教えていただけないでしょうか?

for(seven=1; 1000>=seven; seven*7)
       {
if((seven%49)==0)
{
printf("%d、\n",seven);
}

else
{
printf("%d、",seven);
}
}
>>723
seven*=7
#include <stdio.h>

int main()
{
int seven;

for(seven=1;seven<=1000;seven++){
if(!(seven%7)){
printf("%5d",seven);
if(!(seven%49))
printf("\n");
}
}

return 0;
}
726725:03/02/07 22:42
1ずつ足す必要ないじゃん・・・
727723:03/02/07 22:47
>>724
seven*=7でなんで=が必要なのでしょうか?
for文内では必要なのですか?

>>725
その方法もありましたね。
気づきませんでした。
そっちのほうが早く処理できるかな?
それは7ずつ足せばいいということですか?
seven=seven+7
これで下のif文を省いて・・・
今からいろいろ試してきます。
728724:03/02/07 22:51
>>727
seven*7
だけでは、いつまでたってもsevenの中身は変わらないよ。
やるなら
seven=seven*7
これは
seven*=7
と書ける・・・・

でもこれだと、1,7,49・・・になっちゃうね・・・・

seven=seven+7
が正解だね・・・・欝
729723:03/02/07 22:58
>>728
今試したらそうなっちゃいました(笑)
なので>>725さんの方法でやりました。
seven=seven+7で。

今まで変数はnとかiだったんですけど変数をsevenとかに
するとソースが書きやすいですね。
>>698
> getsとstrcpyは外界と接点があるかどうかという点で大きく異なる。

で、どこまでが外界なんだ ?

自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?

少なくとも、strcpy() が外界と接点がないと思い込む方が危険だよ。
731723:03/02/07 23:18
質問ではないのですが、
for(seven=1; seven<=1000; seven=seven+7)
だと1、8、・・・となってしまうので最初の初期化はseven=0;にしないと
ひとつずれてしまいました。
それだけです。
>>730
第三者が存在する場合に、サイズ計算せずにstrcpy()使うのが悪い。

計算した上でstrcpy()が危険なら、安全な関数は標準ライブラリにはない。
つまり、文字列の終端までアドレスが有効かを調べなきゃいけないということ。

strcpy()はサイズを事前に計算するなり、strncpy()を使えばいい。
gets()は、実際にバッファが溢れない限り検知する手段がないのが問題。
>>730

>他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?
もちろん危険だ。そのままやっちゃうとアウトだろうね。
普通そんなことする前にstrlen使ってサイズを調べたりしないか?
想定外の異常なサイズだとエラー出して止まるなり何なり実装するんじゃないか?
それは外界と接点があるところだろう。
だったら何のチェックもせずにstrcpyを使うのは危険極まりないぞ。
「使い方さえ間違わなければ」とはそういう意味で使ってる。

>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
そのファイルが何らかの要因で書き換わらない保証はあるのか?
そうなったときにgetsだとバッファオーバーランを防ぐ方法はないぞ。
libsafe 使っとけ。
>>733
>普通そんなことする前にstrlen使ってサイズを調べたりしないか?
'\0'で終わってるか分からない文字列にstrlen()は使わない
つーか、何が入ってるか分からない可能性のあるデータは
効率が悪くても、strncpy()かmemcpy()の、その場に適してる方を使う
で、なんでまたstrncpy()なんて使うんだ?
737DD:03/02/08 01:25
#include <stdio.h>
int main(void){
int item[5]={3,1,6,7,2},a,b,t,count;
for(a=1;a<count;a++)
for(b=count-1;b>=a;b--){
if(item[b-1]>item[b]){
t=item[b-1];
item[b-1]=item[b];
item[b]=t;
}}
for(t=0;t<count;t++)printf("%d",item[t]);
return 0;}



738DD:03/02/08 01:26
バブル
739デフォルトの名無しさん:03/02/08 01:50

char *a = "100";
int b = 100;

この2つの100を一箇所の#defineで管理する方法ってあるの?
>>735
> '\0'で終わってるか分からない文字列に

そもそも\0で終わってない可能性のあるものを文字列として扱おうとするのが間違い。
>>739
C-FAQ嫁。

#define Str(x) #x
#define Xstr(x) Str(x)
#define NUM 100

char *a = Xstr(NUM);
int b=NUM;
>>730
ファイルを読むのになんでgetsを使うの??
743740:03/02/08 02:12
文字列として扱おうとしているものを、\0で終わっていない可能性のあるままにしておくのが間違い。
と言うべきか。
>>743
じゃstrcpy()で、ええやん
お望みとあらば。
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>720
746デフォルトの名無しさん:03/02/08 02:33
このスレ、ばかばっか。
747デフォルトの名無しさん:03/02/08 02:58
で、strcpyは悪なの?
>>747
まあ、strncpy 使えってこった。
strncpy()使う奴は馬鹿。
ホコリ臭い議論だ。Cはまだこんなことで悩めるのか。
>>733
> >>730
> >他のプロセスが作ったメモリーマップドファイルの内容を strcpy() するのは危険じゃねーのか ?
> もちろん危険だ。そのままやっちゃうとアウトだろうね。
> 普通そんなことする前にstrlen使ってサイズを調べたりしないか?
> 想定外の異常なサイズだとエラー出して止まるなり何なり実装するんじゃないか?
> それは外界と接点があるところだろう。
> だったら何のチェックもせずにstrcpyを使うのは危険極まりないぞ。
> 「使い方さえ間違わなければ」とはそういう意味で使ってる。
> >自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
> そのファイルが何らかの要因で書き換わらない保証はあるのか?
> そうなったときにgetsだとバッファオーバーランを防ぐ方法はないぞ。
>>733
> そのファイルが何らかの要因で書き換わらない保証はあるのか?

そんな極論言い出したら、あんたが strcpy() でコピーしようとしているメモリーだってデバッガで書き換えられるかも知れんぞ。
発生確率に違いがあるかも知れんが、本質は一緒だよ。
>>730 に書いた通り、「どこまでを外界と見なす」かの問題だよ。
>>752
バカですか?
デバッガ勝手に動かされたら、脆弱性以前の問題なのだが。
それを確率とか逝ってるし。
>>730
>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?

おまえは 「gets() は必ず "自分が作ったファイル" を読む」
という仕様の関数を書くのか?

お前と一緒に仕事する奴に同情するよ・・・
>>753
本質が見えてない奴だな。
システムとして、「そのファイルが何らかの要因で書き換わらない保証」ぐらいできるだろ。

>「どこまでを外界と見なす」かの問題だよ。

と言うのをちゃんと理解しろ。

>>754
> おまえは 「gets() は必ず "自分が作ったファイル" を読む」
> という仕様の関数を書くのか?

日本語喋れ。
お前と一緒に仕事できる奴なんていないんだろうな...。(藁
756デフォルトの名無しさん:03/02/08 13:27
seven+=7にしろや。
結局さ、ライブラリで考えた場合、
・仕様をきちんと定義する。
・仕様外、想定外の利用をされた場合の救済策を充分練る。
のは当たり前でしょう。
その上で、完全に安全なものは作れないのだから、
・仕様を徹底して異常な利用はさせない。
・定期的に利用方法、仕様を再検討する。
と言った運用で逃げるしかないっしょや。
まあ道具は使う人しだいって言うことだろ。
あふぉが使えばアフォなりだよ。
gets()が悪いわけではない。
いや、gets()は悪い。
760ダンディ坂野:03/02/08 13:40
ゲッツ
761723:03/02/08 13:52
>>756
seven=seven+7

seven+=7なんですか?
つか、なんでですか?
762デフォルトの名無しさん:03/02/08 13:55
>>733
> そのファイルが何らかの要因で書き換わらない保証はあるのか?

アプリの一部として提供しているファイルを書き換えたとすれば、アプリを破壊されたのも同然です。
実行ファイルを書き換えられたのと本質的な相違はありません。

gets()の方がfgets()などに比べて扱いやすく、効率もよいのは確かなので、使いこなせるだけの能力
を持ち合わせた人ならば、適切に使うべきなのでは?
763デフォルトの名無しさん:03/02/08 14:00
>>761
Cの文法がそうだから。
>733
strcpyすると危険なメモリ領域は、strlenしても危険だとおもう。
もう春だね。
gets()擁護の人に聞きたいんだけど、
なんでファイルからの入力に標準入力を使いたがるの?
しかもアプリの一部として提供しているファイルを?
それってつまり、利用者がパイプラインを使ったりすることを妨げるよね。

逆に、標準入力からでもfgets()使う方は理解できるんだけどねぇ。
アセンブラの方が危険だろ
まあ馬鹿に刃物持たすなってことだ
何故いきなりアセンブラが?!
>>755
>日本語喋れ。

そんなに言っている事が分からんか? じゃあ、実例。

void myfunc()
/* 注意!: この関数を呼ぶ時は必ず stdin が "myfile.txt" を指していなくてはならない。*/
{ char b[8]; gets(b); }

こんな関数、誰も使ってくれないし、自分も使いたくない。
間違いなくバクの温床。
機械語はあふぉには使えんから
逆に安心だぞ。
771デフォルトの名無しさん:03/02/08 14:27
>>766
> それってつまり、利用者がパイプラインを使ったりすることを妨げるよね。

ユーザの誤使用を回避するには有効かも。
普通は専用の子プロセスを使ってファイルを読むことになるだろうけど。

単にfgets()を使えば安心と考えている人が多いのがむしろ問題としては大きいと
思う。
改行で終わったのか、ファイル終端で終わったのか、バッファが足りなかったのか、
エラーが発生したのか、一切調べずに得られた文字列を妄信する馬鹿がいかに多い
ことか...。
機械語?バイナリコーディングするんか?
>>766
細かい事だが教えてくれ。
世間一般では「パイプ」の事を「パイプライン」とも呼んでいるのか?
俺は「パイプ」と「パイプライン」はまったく別のものだと思っていたが?
>>771
激しくナンセンス。持論を擁護するためにそこまで阿呆に成り下がらなくてもいいだろうに。
それに、そんな馬鹿がgets()使ったらどう思う?
パイプ(|)で繋げられた連(ライン)だからパイプラインでいいんじゃないのか?
たとえば
C3xxxx
が無条件ジャンプとか....
>>771
>単にfgets()を使えば安心と考えている人が多いのがむしろ問題としては大きいと

お前、「自動車事故」と「自動車自体の欠陥」の違いが分からんのか?
全く次元の違う話だろうが。
>>776
あ、Z80までならバイナリコーディングしてたよ。
尤も、精々100-200バイト程度だと思ったけど。
ジャンプ命令なんかは予め00入れておいて、
後から書き換えるから2パスだけどね。
Rubyを使えばこんなくだらないことで悩む必要がなくなるのに。
>>779 RubyでOS書いてみ
>>769
あの日本語から、これを想像しろと ?
こんな奴が「一緒に仕事する奴に同情するよ」とかほざいていたのか ?

gets() 使うなら、これぐらいしろと言うのなら別に「そりゃそうだ」と思うだけだ。

でも、俺は gets() が常に安全だと言ってるわけじゃなくて、strcpy() と本質的に変わらないと言ってるだけだ。
(つまり、>>679 がアフォだと言うことだ。)

そこは理解できているのか ?
>>764
誰でも判っていることとは思うが、strcpy() が危険な場合に常に strlen() が危険とは限らない。
>>781
gets()の安全な使い方のサンプルを提示してください。
784デフォルトの名無しさん:03/02/08 17:04
2つの複素数a+bi,c+diの除算(a+bi)/(c+di)を行いその結果を複素数e+fiに代入する。
複素数は2つの実数を使って表現せよ。”i”は虚数単位である。
という問題なのですが全くできません。お願いします。
>>784
マルチ氏ね
#define gets(x)

gets(s);
787デフォルトの名無しさん:03/02/08 18:04
↓これって未定義?
int m;
javaによって皆さんの抱えている問題のほとんどを解決できます。
Rubyならね
RubyはCで書かれています
http://www.ruby-lang.org/ja/FAQ/rubyfaq-jp-8.html
>>781
>あの日本語から、これを想像しろと ?

つーか、俺は
>自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?
の一文から想像できた使用方法は >>769 のようなコードしか無かったのだが。

それなら >>781 はどういう使用方法を想定していたのか、
ぜひとも教えてもらいたいものだ。
793デフォルトの名無しさん:03/02/08 18:32
符号付整数jをn〈整数)ビット右に算術シフトし結果を符号付整数kに代入するcの構文を書け,なのですがどうすればいいんですか?
>>793
k=j>>n;
>>793
処理系依存
>>795
signed をシフトすると必ず算術シフトになった気がするんだが。
標準仕様にはなってなかったっけ?
>>796
signedは正の数である時のみ結果が保証される。負の数をシフトした
場合は処理系依存。
>>796
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00050.html
だそうだ。このページが正しいかどうかは知らんが。
>>783
一行のサイズが、バッファを越えないなら安全だよ。
(頼むから、>>733 へループしないでくれよな。)

>>791
別に、上に書いてあることが保証できればいいんじゃないの ?

と言うか、「gets() が常に安全ではない」という主張に反対してるわけじゃないぞ。
「gets() が読むファイルの内容が保証できるなら、gets() だって安全に使うことができる。」と言うだけのことだ。

(何回書けばわかるんだ ?)
だから、具体的なサンプルを提示してよ。
っていうか、なんでファイルの読みこみにわざわざ標準入力を使うのかさ。
801577:03/02/08 22:13
いやいや、C言語検定3級うけてきますた。
超楽勝ですた。間違った問題は
・配列の宣言の際に、初期化子の数が配列の要素数より大きい場合は、多い分が無視される。○か×か?
・2次元配列a[サイズ1][サイズ2]のサイズ指定は、サイズ1は省略できるがサイズ2は省略できない。○か×か?
の二問くらいの予感。
>>801
間違えるなよ。
803577:03/02/08 22:39
>>802
もう一問間違えたっぽい。
C言語はALGOLを元につくられた。○か×か?みたいな問題
804デフォルトの名無しさん:03/02/08 22:43
B言語でしょ?
答えは×
>>804
正解
UNIX開発者のひとりのKenがつくったんだっけ?>B言語
806577:03/02/08 22:51
>>804
ゴメン、問題が確かじゃないから、もしかしたらALGOLの流れを汲むか?てな表現だったかもしれない。
今検索してみたら○っぽい、と思った。
まあ終わったからスッキリ!!どうせなので次回は2級受けるつもりです
807804:03/02/08 22:54
やった。
高1だけど受けてみようかな。
C言語検定。

閑話休題、質問なんですけど

#define hoge 5

マクロを定義するときってhoge=5になるじゃないですか。
で、マクロの定義はもっと複雑な作業をやらせることができるんですか?
例えばよくテキストエディタで「この条件に一致するものには○○をする」
ってやつとかのことです。
↓のような2値化処理を高速化したいのですが、どうするのがいいですか?
----------------------------------------------
#define SIZE 65536
unsigned char src[SIZE], dst[SIZE];
int i, value;

value = 128;
for (i=0; i<SIZE; i++)
 dst[i] = ((src[i] >= value)?255:0);
----------------------------------------------
とりあえず、
A ?:の代わりにif-elseを使用
  → ちょっと速くなった?ただの誤差かも

B forループ内の処理を256ずつにしてループのオーバーヘッドを減らした
  → そこそこ速くなった

C unsigned long *に変換して、マスク処理で各バイト毎に判定
  → ちょっと速くなったけど、longで読んだ意味無し?

なんてのを試してみました。
809デフォルトの名無しさん:03/02/08 23:10
何回書けば分かるんだ?
だれも >>799 が「gets()が常に安全だ」等と主張しているとは言っていない。
皆が問題にしている部分は

>>752
>発生確率に違いがあるかも知れんが、(安全性について)本質は一緒だよ

と言ってる部分だ。

gets() の場合、>>769 のような非現実的なコードを書かない限り、
プログラマは安全性を保証できない。
strcpy() の場合、終端等、プログラムを設計する時点で普通に
気をつけていれば安全性を保証できる。

皆、これは「発生確率(何だそりゃ?)の差」等というものではなく、
絶対的な違いだと考えているって事。

単純に「安全性の濃淡」で話を一くくりにできるのなら、
極端な話「そのコードを一回も実行しない事」が仕様となれば
どんなコードも「発生確率に違いがあるかも知れんが、本質は一緒だよ」
と言える事になる。
>>808
初期化しとけば代入の回数が減る
ポインタ使った方が速いかも
811デフォルトの名無しさん:03/02/08 23:18
>>808
計算後の値をあらかじめいれとけ。
>>807
折れ中3だけど
お前折れよりヒドイな
折れ以下の香具師がいて安心した
>>808
811とかぶるかもしれないけど、判定元がcharなら判断後の値のテーブルを作る。
条件分岐にしないで、テーブル参照だけにすれば速いかと。
dst[i] = ((src[i] >= value)?255:0);
の代わりに
dst[i] = table[src[i]];
って事ね。
>>809
非現実的かも知れんが、そう言うコード (gets() が安全である) は書けるんだろ ?
これには、Yes or No どっちなんだ ?

No と言うなら、書けない事を証明してくれ。

Yes と言うなら、gets() が安全である時があることには同意するんだよな。

つまり、strcpy() も gets() も「安全である時もそうでない時もある」と言うだけのことだろ。

> 皆、これは「発生確率(何だそりゃ?)の差」等というものではなく、
> 絶対的な違いだと考えているって事。

お前だけじゃねーのか ? (藁

> 単純に「安全性の濃淡」で話を一くくりにできるのなら、
> 極端な話「そのコードを一回も実行しない事」が仕様となれば
> どんなコードも「発生確率に違いがあるかも知れんが、本質は一緒だよ」
> と言える事になる。

何言いたいのかよくわからんよ。
だからjava使えって言ってるのに。
>>813
テーブル参照 = メモリアクセスだからキャッシュに載ると言ってもちょっと遅いような気が...。
>>808
こんな短いループを高速化したいなら、インラインアセンブラの出番かと。
255movより符号付にしてdec
>>808
とりあえず根本的な対策。
(これは別に一休さんみたいな
とんちの利いた解答という訳ではなく、
あくまでマジレス)

1.その2値化処理自体を必要としない方法を考える。
2.ハードの力を使う。
>>808
Cはだめじゃない?あらかじめlongの配列として宣言しておかないと。
とりあえずMMXでも。
Rubyを使えば速くなるのに
符号付にしてシフトするだけ
>>814
・・・付き合うのやめた。あとは勝手にやってくれ。
(どうせ >>814 も実際は現場で gets() を
使っていないのは分かりきっているし)
>>814は現場ではCなんか使っていません。
826808:03/02/09 00:37
>>809
初期化とは、最初にdstを0(or255)に初期化して代入処理を減らすということですか?
memset使ったら逆に遅くなりました(;´Д`)
ポインタは試してないので、明日にでも試してみます。

>>811 >>813
ウチの環境だと、条件分岐にしたときと殆ど同じ速度でした(;´Д`)

>>817
インラインアセンブラは使ったことがないので、勉強してみます。

>>818-823
ヽ(`Д´)ノ ウワァァァァン
あ、valueは0〜255までの任意の値です。128以外もあり得ます。
>>826
基本的な事だけどアンロールしてる?
828デフォルトの名無しさん:03/02/09 01:05
>>827
アンロールって何ですか??
だからさ、限定条件に置かないと安全に使うことができないgets()を
使わないといけない理由なんてないでしょ。
つまり、始めからgets()擁護は机上の空論。
830577:03/02/09 01:17
getsってモテモテですね
malloc()/free()にゃ負けるよ
>>824
>(どうせ >>814 も実際は現場で gets() を使っていないのは分かりきっているし)

もちろん、普通は gets() なんか使わんよ。
(これぐらいは、>>695 の「そんなこと言い出したら」のくだりでわかりそうなもんだが...。)

>>829
ここまでくるとネタか ?

> だからさ、限定条件に置かないと安全に使うことができないgets()を
> 使わないといけない理由なんてないでしょ。
> つまり、始めからgets()擁護は机上の空論。

じゃ聞くが、strcpy() は限定条件を置かなくても安全に使えるのか。
そう言う意味で、なんで gets() は安全じゃなくて、strcpy() は絶対安全なんだ ?
(>>679 参照)

ところで誰が gets() を擁護してるの ?
俺は、「gets() が安全な (* 場合も *) ありえる。」と書いてるだけだぞ。
(>>781, >>799, >>814 見れ。何回書けばわかるんだ ?)
過去一番モテたのは scanf。
NULLだろ、ぬる。
strcpyはプログラマが気をつければ問題を回避できるけど、
getsはどうすることもできないからじゃないの??
擁護といって悪ければ、「安全な場合も有り得る」などといいつつその例を提示できないで足掻いている。
と言い替えておきましょうか。
>>833
対象をライブラリ関数に絞らなきゃ

i = i++; (= いわゆる未定義) だと思う。
もっと実用的な話をしようよ・・・

だからってわけじゃないけど質問。
strncpyの代わりにsprintf使えって言われたけどどうやるの?
>>838
snprintfの間違いじゃないのか。
printfは重いから使うなっていわれた。
ふざけるなと思った。
>>835-836
>>830 は見てんのか ?

> 自分が作ったファイルを読むんなら gets() だって安全じゃねーのか ?

(ついでに、それに対するレスも見といてくれよ。)
dst[i] = (char)-(src[i] >= value);
>>840
状況がわからないから、あんたが正しいのか、使うなって言う奴が正しいのか判断できん。
%5sでできない?
845XYZ:03/02/09 01:41
C言語とC++言語の根本的な設計思想の違いを教えてください。
>>845
すれ違い
char *
mock_strncpy(char *dst, char const *src, size_t len)
{
 sprintf(dst, "%.*s", len, src);
 return dst;
}
型のあとに改行する派か。
>>841はついに錯乱し始めたようです。
なんで>>841はそんなに必死なんだ?
おまえの書いたプログラムなんて誰も使わんのだから
gets()使いたければ勝手に使っとけ。
まともなプログラマがまともなプログラムを書くときは
100% gets() は使わない。
strcpy() は状況によっては使うこともある。
>>850
絶対にやってはならない事の例として使う
(↑はまともなプログラムでしょう?)
>>849-850
具体的な例出されたら、必死とか言うだけですか ?

> gets()使いたければ勝手に使っとけ。

またでたよ。何回書けばわかるの ? 真性のアフォですか ?

>>832 に...

| もちろん、普通は gets() なんか使わんよ。
| 俺は、「gets() が安全な (* 場合も *) ありえる。」と書いてるだけだぞ。

と書いてるように、安全な場合があると言ってるだけで gets() を使ってるとか使うのが望ましいと言ってるわけじゃないんだよ。
(つーか、普通は使わんとはっきり書いてあるんだが...。)


で、ぐちゃぐちゃ書いてるけど、結局 >>830 に対して反論できるの ? できないの ?
>>834
ナル
>>852
*>>830*には反論できません(てかする気もありません)が何か?
おまえ

         あ   せ   り   す   ぎ   (ワラ

 
>>gets()もろもろ
飽きたから他のスレでやってくれ
>>855
他のスレっつーなら行き先ぐらい張れよ
http://pc2.2ch.net/test/read.cgi/tech/1031355713/
>>854
> (てかする気もありません)が何か?

する気があったらできるの ?
こんなこと書いてて恥ずかしくないの ?

まして...

>おまえ
>あ   せ   り   す   ぎ   (ワラ

に至っては、わけわからんし。
まあ、悔しいから何か書きたかったんだろうね。(ププッ

>>855
ごめんよ、ループする奴多くてさ。
>>857
>Mail : ここから釣りです。

さっさと寝ろ。
>>858
何怒ってんの ?
860デフォルトの名無しさん:03/02/09 11:34
いい加減やめれ。
面白くない
861デフォルトの名無しさん:03/02/09 12:09
ポインタのことで質問です。
今、5人の点数をユーザーが入力してint test[5]に入れるものなのですが、
これでfor文を使って入力とそれぞれの点数表示はできたのですが
平均を求めるやり方がわかりません。
int test[5]に格納した点数をすべて合計して5で割りたいのですが
どうすればint test[5]に格納した点数を合計できるのでしょうか?
よろしくお願いします。
862デフォルトの名無しさん:03/02/09 13:02
>>861
int total=0;
for(test){
total+=test[i]
}
>>861
これでも呼べば。

double
calcAve(size_t len, int *pVal)
{
 int ic;
 int sum = 0;

 for (ic = 0; ic < len; ic++) {
  sum += pVal[ic];
 }
 return (double) sum / len;
}
double
calcAve(size_t len, int *pVal)
この書き方されると俺のエディタは関数の検出できなくて激しく不便なんだよな。
865861:03/02/09 13:16
みなさん本当にありがとうございます。
まずは>>862氏の方法からやってみます。
なるほど、不便なエディタだね。
私はいろんなエディタ使うから、grepで探しやすいようにしてるんだけどさ。
867デフォルトの名無しさん:03/02/09 13:21
なるほど、不憫な環境だね。
私はいろんなエディタ使うけど、定義の検索くらいエディタのマクロ探すようにしてるんだけどさ。
868デフォルトの名無しさん:03/02/09 14:06
みなさんに質問。
俺はC/C++学び始めですが、みなさんは

「C/C++を普段使っているけど、この機能についてはあまり知らない」

ってことあります?
例えばC++ならclassを使った方が綺麗に仕上がるけど、
構造体の方が使い慣れてるから構造体で済ましてしまうとか。

個人的にはあまりにもC/C++は多機能過ぎて(特にC++)いっぺんに
覚え切れなくて不安です。
>>868
テストに出るわけでなし、取りあえず組めればそれで良いでしょう。
存在する制限の中でどれだけのことが出来るか追求してみるのもおもしろい。

勉強を怠らなければ新機能への理解も必ず出来る。


がんばっとけ。
構造体を定義して、その構造体へのアクセスする関数を定義したらそれはもう、クラスにした方がいい。
特徴的な型を定義して、そのデータ型間の演算を多用するならそれはもう、クラスにしてオーバーロードした方がいい。
いずれにしても一遍に覚える必要はない。
私はCからC++に入ったけど、C++を最初から勉強するのもいいね。

がんがれ〜
871868:03/02/09 14:39
>>869
>>870
有難うございます。
毎日少しずつでも進歩できる様に勉強します。
type
func(arg...)

この形は激しください。
873デフォルトの名無しさん:03/02/09 17:38
このエラーってなんですか handle_exceptions: Exception:
STATUS_ACCESS_VIOLATION
>>873マルチ
gcc使ってるんですけど、

> hoge.c:256: dereferencing pointer to incomplete type

というエラーが止まりません。

構造体へのポインタを通してメンバにアクセスしようとするとこうなるのですが、
何が悪いのでしょうか?
ほとんど見たことないエラーなので、対処の方法が分かりません。

どこらへんをチェックすればいいでしょうか?
具体的には、構造体の中のファイルデスクリプタ hoge->sock に触ると
上記エラーが出るんですが、該当するコードを削除して、
gdbでステップ実行すると hoge->sock には触れるんです。
>>876
hogeの指す構造体がhoge.cのコンパイル中に定義されているか確認汁。
宣言だけで使ってるとそんなエラーがでるはず。
>877
ありがとうございました。まさにそんな感じでした。

サーバ側とクライアント側のライブラリやヘッダファイルが
ごちゃごちゃになって、どこに定義があるのか判然としませんでした。
879デフォルトの名無しさん:03/02/09 21:14
const char *p;
char const *p;
char * const p;
の違いってなんですか?
実際に試すと、1番目と2番目が同じ動きで、3番目が違う動きをします。
解説お願いします?
指すものがconstかポインタ自体がconstかの違い
前の2つは、*p = 5とかが禁止される
最後のは、p++とかが禁止される
882879:03/02/09 21:21
>>881
そんなのは試せばわかる。理屈でわかりやすく説明してくれ。
884879:03/02/09 21:24
>>883
1番目と2番目の違いがわからん
885デフォルトの名無しさん:03/02/09 21:38
Cでwindowsプログラムを組むのに、
1番いい勉強法は何ですか?
>>885
本を読む
887デフォルトの名無しさん:03/02/09 21:41
>>886
どんな?
>>884=879
char が const か、
const な char か、の違い。
つまり一緒。

ついでに言えば、
char *p;
char const *p;
char *const p;
char const *const p;
で全部意味が違う。
889886:03/02/09 21:43
マルチに反応しちまった…
890885:03/02/09 21:44
>>889
いや、まじめに聞いてるんですが…
>>889
つーか、>>882 の時点で ネタ もしくは、真性の アフォ だろ。
>>880-881 の説明以上に的確な説明は思いつかないよ。
892891:03/02/09 21:48
>>891
間違えた。

×: ネタ
○: 釣り
893808:03/02/09 23:08
>>810
レス番号間違えてました。失礼しました。m(_ _)m
ポインタ使った処理は、使い方が分かってないのかもしれませんが、gccで最適化した場合では元の処理と同じくらいでした。

>>827
・・・最適化オプションの存在を忘れてました・゚・(ノД`)・゚・

オプション(cygwin gcc: -O2 -funroll-loops、vc++ cl: /O2)を付けたら劇的に速くなりました(;´Д`)
gccでは、テーブルを使った処理→>>842さんの式の順で、またvc++では、テーブルを使った処理と>>842さんの式がほぼ同等の速さになりました。

>>817-818 >>821
MMXのアセンブラが面白そうなので、ちょっと勉強してみます。

>>827
してなかったので、ちょっと調べてみました。

>>842
勉強になります。
894808:03/02/09 23:08
あと、午後のこーだの作者さんのWebぺーじがいろいろと参考になりそうです。
BBSの過去ログにこんなの↓があったので、いろいろと調べてみようと思います。
以下勝手に転載。
--------------------------------------------------
最近書いたコードから;RGB各8bitのピクセ
ルで、RGBそれぞれで独立に
二値化(0か0xff)するというもの。
p: ピクセルの値(RGB32)

a = p | 0x1010100;
a = (a - 0x808080) & 0x1010100;
a = a - (a>>8);

0x808080が閾値で、RGB独立に変更でき
ます。細かく見ていくと誤差が
あるのですが、その辺が問われない場合
であれば充分かと思います。
(このフィルターそのものが使い途に困る
という話もありますが…)
--------------------------------------------------
ttp://homepage1.nifty.com/herumi/adv/bbslog/bbs10.html の459より転載

レス、どうもありがとうございました。m(_ _)m
C言語でrand,srandを使って確率的に1/2で0と1を
得たいのですが
ちょうど、交互に出てきてしまいます。
別の方法なにか、ありますか?
void swap(int *array,int a,int b)
{
int tmp;
tmp=array[a];
array[a]=array[b];
array[b]=tmp;
}

void sort(int *array,int num)
{
int i,n;
num-=1;
for(i=0;i<num;i++)
{
for(n=0;n<num;n++)
{
if(array[i]<array[n])
{
swap(array,i,n);
}
}
}
}

こういうソートアルゴリズムってなんて言うんですか?
897896:03/02/09 23:38
age
898577:03/02/09 23:38
バブルソート
899896:03/02/09 23:41
どうもありがとうです(^^)
900577:03/02/09 23:50
>>895
rand()%2じゃダメ・・・?
901デフォルトの名無しさん:03/02/09 23:58
>>900
ダメです。
902デフォルトの名無しさん:03/02/10 00:08
厨な質問で申し訳ありませんが、

標準ライブラリのみでマウスからの入力を行なうには
どんな関数を使えばいいのでしょうか?
googleで検索してもわからないのですが
>>902
fread
>>895
srand((unsigned int)time(NULL));
s=rand()%2;でやってるんですぅ。
奇数と偶数が交互にでない乱数は、どうやるんですかー?
>>895
rand()の系列は偶数と奇数が交互に出ているので、
a=0;
if ( rand()%11<6 ) a=1;
とかしてみるのはどうでしょう?
>>904
rand で使われてる乱数生成ルーチンでは、
下位 n bit の周期は 2 の n 乗になる。
なるべく上位のビットを使うようにしないと駄目。

>>905
そんな面倒なことしなくても、最上位ビット取ればいいと思う。
>>906
生成ルーチンって仕様で決まっているの?
もっと性能の良い乱数発生関数を使う手もある。
http://www.math.keio.ac.jp/~matumoto/mt.html
性能のいい乱数発生関数・・・
ちなみにCだとこれね
http://www.math.keio.ac.jp/matumoto/CODES/MT2002/mt19937ar.c
コメント多すぎ。誰か削って見やすくしてくれ。
ハードウェアならこれだな。
http://www.toshiba.co.jp/product/abwr/random/
今までCを独習してきて、「配列」というものは
難しいものだと思いこんでたらまったくそんなことありませんね。
意外と簡単でした。
それだけです。

今思いついた質問ですが、実際にアプリを作るとき、配列を使うなら
なるべく量は少ないほうがメモリリークしにくくなるんですか?
メモリを確保しないで済む分。
どうなんですか?
性格のいい淫乱発生関数・・・
下位ビットの周期が短いのを誤魔化す為に
下位ビットと上位ビットを入れ替えてから返すような実装ってある?
下位ビットを捨てる実装ならみたことある
917デフォルトの名無しさん:03/02/10 03:56
>>913
やっぱり君にとっては配列は難しいのだと思う
>>916
なるほど。
流石に下位ビットを再利用したりはしないか…。
>>913
メモリリークを小一時間調べて見ろ。
結論から言うと配列だけしか使用しない場合、メモリリークは発生しない。
更に言うとまともなOSならばプログラム終了時にアプリが確保したメモリは
全て解放される。
920デフォルトの名無しさん:03/02/10 13:31
ネタですか?激しく処理系依存ですが。
intは4バイトだよ
ユーザーの入力した文字をエコーバック無しで取得したいんですけど。
ナニで?
924デフォルトの名無しさん:03/02/10 13:41
プリプロセッサに通した時点でint(など)の型の大きさを得ることはできませんよね??
そんなマクロは標準では定義されていませんよね?
>>922
環境依存しない方法では無理です。
limits.h
>>924
何故型の大きさがプリプロセッサの段階で必要?
私は大抵の場合、sizeof演算子で済ませちゃってるけど。
#稀に(>>926の指摘の通りlimits.hをincludeして)INT_MAXを参照するくらい。
configure使うとか。
>>927
int型が4バイトでない場合はコンパイルさせたくないので・・・・

>>926-927
そういえばint型が4バイトならINT_MAXの値は常に一定になりますね。
言われるまで気づきませんでした。ありがとうございます^^
> int型が4バイトでない場合はコンパイルさせたくないので・・・・

どういうプログラムをしているのか、参考までに教えてくれないか?
for(i=sizeof(int)-4;i<n;i++)
932デフォルトの名無しさん:03/02/10 21:55
現在、あるアプリケーションから別のコンソールアプリケーションをspawnlで親の方が待ち状態になるようにして呼び出して使ってるんですが、その子がstdoutやstderrに出力する内容を親側で取得するにはどうすればいいですか?
親の方は子が動いてる間、待機状態になるのであれば呼び出し方はこだわりません。
どなたか教えていただけますでしょうか。
>>932
環境依存しない方法では無理です。
unixなら、pipe(2) or popen(3)。
934デフォルトの名無しさん:03/02/10 23:18
プログラミングのプの字もわからんのですが、
ここで話されてることが理解できるようになるには
何時間くらい勉強すればよろしいでしょうか?

1日1時間として1年じゃ話になりませんか?
何だ?プログラミングに興味が在るのか?
悪いことは言わない。ここから立ち去りなさい。
そしてC言語なんてものには興味を持たないこと。いいね?
936デフォルトの名無しさん:03/02/10 23:40
>>934
本人のやる気と才能しだい。
中学卒業程度の数学の知識の持ち主が、高校2年生レベルの数学がわかるようになるって程度。
>>934
おれは会社に入って1年間くらい休みなし、
毎日残業10時間とかいう状況で無理やりCを覚えた(w
デスマーチっつうか人手がたりなかったんよ…。
おかげで1ヶ月前に書いた自分のコードが幼稚に見えて仕方がないという
状態が1年も続いた。つい直しちゃったりしてな(w
一年後にはオブジェクト指向の真似事をやってみたり、
MS-DOSでタイマ割り込み使ったプリエンプティブっぽいスレッドライブラリ
作ってアプリの性能上げたりとかやってたぞ。

じじいの昔話さ(w
938デフォルトの名無しさん:03/02/10 23:56
>>937
質問の答えにまったくなっていないどころか、ただの自慢ときたもんだ。
能力もたかがしれてるな。
> 状態が1年も続いた。つい直しちゃったりしてな(w

命が惜しかったらぐっとこらえとけ。
940デフォルトの名無しさん:03/02/11 00:08
すみません
次のソースで、func()を使って、a=bになるようにしたいのですが
func()をどのように書けばいいのか分かりません
教えて下さい!

void func(int *t,int w){
//ここが分からない
}

void main(){
int a=0,b=1;
func(&a,b);
}
void func(int *t,int w){
*t=w;
}

ポインタと、ポインタによる関数間での値の受け渡しを復習しておけ。
void func(int* t, int* w) { *w = *t; }
int main() { int a = 0, b = 1; func(&a, &b); }
あ‘ーまじがったー
*t
=
w;;
グローバル変数な
946940:03/02/11 00:24
皆さん、有難うございます!
>>910
それなら、7行スレにあったよ。
> w;;

(・∀・)イイ!!
949デフォルトの名無しさん:03/02/11 01:15
ログ出力関連で質問。
ログ吐ける関数用意したんで適当に埋め込んでくれ、って頼まれたんだが、関数名が判るようにしてね!って言われたんです。

メッセージに関数名コピペするっての芸が無いなぁ、と思いつつ。
なんかうまい方法ありませんか?
>>949
標準ではうまい方法は無い。
せいぜい __FILE__ マクロと __LINE__ マクロを使うぐらいだ。
コンパイラによっては __FUNCTION_ マクロを用意しているものもある。
951949:03/02/11 01:46
>950
ども。そうですか。VC++6ですが __FUNCTION_ は無さそうでしたので、これは手作業でいきます。
ところでマクロってのも苦手なんですが、展開を2度行わせるような方法が判りません。
例えば PutLog(LPCSTR lpmsg) が用意されてて
#define PUTLOG() PutLog(__FILE__)
ってのはダメで、どうしても埋め込み箇所でPUTLOG(__FILE__)
って書かなきゃいけませんかね?

まぁ仕事なんで時間費やしても構わないんですけど、余興って事でお願いします。
>>951
マクロは基本的にそれが書かれた時点で展開されるから、あなたの思っている
ような使い方はできない。

どうしても自動化と言うなら、__FUNCTION__ を展開するプログラムを自分で
書いて、プリプロセッサとして起動する。
・・・そんなツールどっかに落ちてないかな?
g++ だと普通にできるけどねえ。。
954デフォルトの名無しさん:03/02/11 03:07
>>933
ありがとうございます。
何時間か探してみたんですが、system()コマンドで"appli.exe 2> stderr.txt"のように叩いてstderrをファイルへリダイレクトしてそれを読み込む、という方法で無理矢理解決しました。
なまえつきぱいぷは?
int i = 'A';
char c = 'A';
/* あのぅ、'A'ってint型ですか? char型ですか?  */
>>956
Cではintです。
問題は、'ab'もintなのはいいけどエンディアンに拠って
0x6162だったり0x6261だったりすることだね。
959デフォルトの名無しさん:03/02/11 08:21
殆どのアプリはVBで作られていると思うのですが
Cでつくられたアプリってどんなものがあるの?
趣味で作るアプリならVBで充分だと思うのですが?

int func( size )
 int size;
{
 static char buf[size];
 return 0;
}

↑C99では、こんなことが出来るって本当なの!?
なんかキモイよ…
>>959
>殆どのアプリはVBで作られていると思うのですが
VC++はVC++で作られています。
>>959
誰にそんな嘘教えられたのですか?
>>960
C99では配列のサイズに変数が使えるようになったらしいが、
これはどうなんだろな。
別にこんなのmallocすりゃ済むのにな。
何の為の仕様変更なんだろな。
965デフォルトの名無しさん:03/02/11 09:19
>>963
アプリはVBで作られていないの?
ゲーはC++だと思いますが。
966デフォルトの名無しさん:03/02/11 09:20
>>964
mallocしないで済むための仕様変更に決まってるだろ。
ていうか、誰か960にツっこんでくれよ。
配列のサイズに変数使ったとしても
それはスタック変数になるの?
もしそうだとしたら
「定数 + sp」
で参照出来なくならない?
どうやってるの? ヒープ?
>>968
定数+spというのがよくわからないのですが
今試してみたらespからサイズ分引いて
スタックに確保しているように思いますよ。
ただサイズ分ちょうどではなくて変な計算してるようですけど。
>>965
アプリもVC++やDelphi多くない?まあ、殆どVBって事は無い。
>>960
C99 のこと言ってんのに引数宣言が K&R かよ...。(これで満足 ? >>967)

それはさておき、自動変数の動的配列は10年ぐらい前から GCC は拡張機能としてサポートしていたよ。

>>964
free() を忘れて、メモリーリークしまくる奴の救済と、プログラムの終了時に free() するかしないかで戦争になるのを避けるため。

>>968
> それはスタック変数になるの?

スタック変数 ? スタックに割り当てられるのかと言うことか ?
当然実装依存だよ。(スタックのないマシンもあるからね。)

> 「定数 + sp」

[変数 + SP] で参照すりゃいい。
もちろん実装依存だが、固定領域を先に確保して、可変部を後に確保すれば、固定領域は従来通り [定数 + SP] で参照できる。

なお、普通の C でも処理系によっては、同様の効果のある alloca() をサポートしているものもある。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/alloca.3.html
>>971
ごめん、960は、
「static」の部分…
>>972
ありゃ...、見落としてました。
http://www.zdnet.co.jp/news/0105/15/e_vb.html
統計の取り方にもよると思うが、プログラマーのうち約半数はVisualBasicということらしい。
実はmallocに置き換えてスコープ抜けたらfreeとか。
>>975
gccはalloca()で確保していたと思った。

>>974
私はプログラマだけどVisualBasicじゃないよ。
たまには使うけど。
>>974
> プログラマーのうち約半数はVisualBasicということらしい。

約半数は、VB を使う ≠ 約半数は VB しか使わない

一つの言語しか使わないプログラマってあんまりいないから、これをもって「プログラマーのうち約半数はVisualBasicということ」と主張するのは「私プログラマに向いてません」と言ってるようなもんだぞ。
新スレ

C言語なら、俺に聞け! <50>
http://pc2.2ch.net/test/read.cgi/tech/1044938752/
>>959
Windowsでしか動かないVB製アプリがほとんどを占めているなんて考えられない。
まあ、俺も最初はVBから始めたからなあ・・
なんせボタンをポチポチ貼りつける感覚でプログラムが出来るんだもん。
でも、次第に不満な点が出てきてあまり使わなくなった。
>>979
JavaとANSI C完全準拠+Qtでどこまで戦えますか?
Javaって段階で終わってる。
>>976
確かVC++でもローカル変数がデカい時は似たようなもんだったよ。
スタックフレーム作るときにページ境界飛び越すとGPFな可能性あるから。
9*系だとスタック溢れることあったから怖かったね。
2000*2000以上の再帰の為にスタックを50MB位にしたりしてたよ。
今はもう意味ないけどね…
>>976
内蔵のalloca()に置き換わって(古いgccだと確か__builtin_alloca()だったかなんだったか)
最終的にただのスタック操作としてアセンブリコードが出力されると思う。