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

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/09/30(土) 19:56:29
このスレは標準Cのみの限定スレです。
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

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

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
【ANSI-C】 C言語なら俺に聞け!  Part 129
http://pc8.2ch.net/test/read.cgi/tech/1156661024/


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

【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
新・推薦図書/必読図書のためのスレッド 1
http://pc8.2ch.net/test/read.cgi/prog/1146889623/
0002デフォルトの名無しさん2006/09/30(土) 19:56:44
    ∧
    < | >     俺はグラットン持ちの通りすがりのナイトであって
    |.|.|              2getしたがどうやってブロントって証拠だよ!!
    |.|.|
    |.|.|
    < | >      おいィ?お前それで良>>1のか? 
   ...| | |.      仏の顔を>>3度までという名セリフを知らないのかよ
   ...| | |.      暗黒が持つと逆に頭がおかしくなって>>4ぬ
   ...| | |.      グラットンす>>5いですね
    .< .| .>     >>6駄にaguるなネットポリスに捕まりたいのか?
 /(.._..|..|..|.._..)ヽ   それほどでも>>7い
 >.─<>─.<   このままでは俺の寿命がストレスでマッ>>8なんだが・・
 ヾ ̄ヾ .√ ")'   >>9枚で良い
    .| .|      俺の怒りが有頂>>10になった
    .| .|
    .| .|      おれパンチングマシンで>>100とか普通に出すし
      ) (
    .▽

0003デフォルトの名無しさん2006/09/30(土) 20:04:25
>>1乙
0004デフォルトの名無しさん2006/09/30(土) 21:40:46
>>1
ISO/ANSI/JIS乙
0005デフォルトの名無しさん2006/09/30(土) 21:42:11
MONSOON禁止。
0006デフォルトの名無しさん2006/09/30(土) 21:42:42
このスレはC99に完全準拠したコンパイラを持っている>>1が
全ての疑問に答えます。
0007デフォルトの名無しさん2006/09/30(土) 21:44:19
仕様書を持っていればその実装は必ずしも必要ないと思いますが。
HTML 4.01+CSS 2.1を完全実装したブラウザは存在しませんが
Web板のstrictスレはちゃんと回ってます。
0008デフォルトの名無しさん2006/09/30(土) 22:01:43
モヒカンだー!
モヒカンが出たぞー!
0009デフォルトの名無しさん2006/09/30(土) 22:23:02
あべし
0010デフォルトの名無しさん2006/09/30(土) 23:20:11
早速の質問ですが、
0011デフォルトの名無しさん2006/09/30(土) 23:37:26
VC2005にも__restrictキーワードがやっと付けられたな。
SP1が待ち遠しいぜ。
0012デフォルトの名無しさん2006/09/30(土) 23:47:06
restrictついたんか。
少しだけ嬉しいかな。
0013デフォルトの名無しさん2006/09/30(土) 23:52:14
スレ違いかもしれませんが、質問させてください。
俺はC言語全くの初心者です。
勉強しようと思って本は買いました。
ついでに何かソフトも買ってキーボードを叩きながら覚えようと思うのですが・・・
何かお薦めのソフトはありますか?
教えて君で申し訳ないのですが。。。教えてください。
0014(^-^) ◆MONSOON/qo 2006/09/30(土) 23:55:09
>>13
BCC developer (ボーランドc++5.51)がおすすめ
0015デフォルトの名無しさん2006/09/30(土) 23:56:08
これだから「初心者お断り」と書いておけって言ったのに。

>>13
このスレは初心者や教えて君はお断りだ。もっと適切なスレがある。そっち行って。
http://pc8.2ch.net/test/read.cgi/tech/1156145593/
http://pc8.2ch.net/test/read.cgi/tech/1153818463/
0016132006/10/01(日) 00:03:29
>>15
ごめんなさい。
撤収します。
0017デフォルトの名無しさん2006/10/01(日) 00:14:03
お前はもう来るな!
死ね。ぴかぁ〜
0018デフォルトの名無しさん2006/10/01(日) 18:56:07
「ANSI-Cの雛形のプログラム」って何か知ってる人居ますか?
0019デフォルトの名無しさん2006/10/01(日) 19:10:41
>>18 居ないから出て行け。
0020デフォルトの名無しさん2006/10/02(月) 06:57:03
>>15
誘導してやったのは結構なことだが
一言多いとガキっぽく見えるぞ
0021デフォルトの名無しさん2006/10/02(月) 08:09:16
最近思うのは、2chで暴言やそれに類する発言を吐きまくる人々は、
実年齢はどうあれ、精神年齢が低いことは間違いないという事だな。
0022デフォルトの名無しさん2006/10/02(月) 09:11:18
>>21
そんなどうでもいいことを言わずにいられないあなたも、精神年齢が低いということですね。
0023デフォルトの名無しさん2006/10/02(月) 14:27:41
実年齢が低そうな人達だなぁ…。
0024デフォルトの名無しさん2006/10/02(月) 16:15:09
汚い穴だなぁ…。
0025デフォルトの名無しさん2006/10/02(月) 19:45:10
↓しゃぶれよ
0026デフォルトの名無しさん2006/10/02(月) 20:14:06
                  _______   __ 
                ..||   __   ||  |WC| 
                ..||  | |  ||    ̄ ̄ 
    __ _   ∧_∧  ||.   ̄ ̄   || 
     ――― (゚Д゚ )  .||.       ◎|| 
⌒ヽ   ̄ ̄ ̄  / つ  _つ||.        ..|| 
  人, ’ ’,  人  Y   ||.  |三三| ...|| 
Y⌒ヽ)⌒ヽ、 )し'(_)   ||______ || 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 
0027デフォルトの名無しさん2006/10/02(月) 21:28:16
カチャカチャ
0028デフォルトの名無しさん2006/10/03(火) 17:06:01
お前はもう俺から逃げられない
0029デフォルトの名無しさん2006/10/03(火) 22:35:45
             
           ハ_ハ  
         ('(゚∀゚∩ 
         ヽ  〈 
          ヽヽ_)           

0030デフォルトの名無しさん2006/10/06(金) 22:34:41
保守
0031至福2006/10/07(土) 10:05:45
はじめまして

C言語で素数列挙プログラムをつくっているのですが
高速にするためには剰余計算を
足し算(もしくは引き算)で行うようにするといいと言われました

いったいどのようなアルゴリズムで剰余計算を加算(or減算)で
おこなえるのでしょうか?
0032デフォルトの名無しさん2006/10/07(土) 10:20:12
被除数nから除数dが何回引けるかをカウントするループを作って、
そこから抜けてきた時点でのnが余りってことだろ
0033デフォルトの名無しさん2006/10/07(土) 10:32:02
>>32
そんな単純だと遅いよな
0034デフォルトの名無しさん2006/10/07(土) 10:48:37
俺もそう思うけど >>31 を読む限りそうとらざるをえないだろ
C で書いたアルゴリズムを動作合成とか言うならそれなりの話がありそうだが
0035デフォルトの名無しさん2006/10/07(土) 11:00:48
もしCPUの譲与演算が使えないような整数型で、
その整数型には次の演算が行えるなら
・加減算
・乗算
・n倍できる高速な演算(シフト演算)
・等号、大なり、小なり

a/bの余りは、
for(;;){
for(d=0.i=1;1;i++){ if(a<b.leftshift(i)){ d=i-1; break; } } //シフトして初めてaを超えるシフト数dを得る←ここが一番呼ばれる
c=b.leftshift(d);for(;a>c;a-=c); //bをdだけシフトしたcをaから引いていく
if(d==0) break; //もうシフトしてaを超えない最大のdを見つける必要はないので、抜ける
}

で、余りはきっとa
これでもかなり遅いがなぁ…加減算でやったら死ぬと思うが
0036デフォルトの名無しさん2006/10/07(土) 11:07:44
多分、それまでのすべての素数の倍数をプールしとけってことじゃない?
0037デフォルトの名無しさん2006/10/07(土) 11:08:07
>>35
C でおk
0038デフォルトの名無しさん2006/10/07(土) 14:11:10
エンターを入力すると do 〜 while ( ); が、
また続けられるようにするのは、可能でしょうか?
エンターの入力以外は、終了させたいです。
0039デフォルトの名無しさん2006/10/07(土) 14:31:36
可能
0040デフォルトの名無しさん2006/10/07(土) 14:40:03
>>39
ありがとうございます。 でも、言葉足らずでした。
できれば、その方法も教えて頂きたいのです。
0041デフォルトの名無しさん2006/10/07(土) 14:42:34
>>40
そこまでは忠言できない、情報が少なすぎる
0042デフォルトの名無しさん2006/10/07(土) 14:51:27
>>41
えーと、ごめんなさい。 どう言えばいいかもわかりません。
もうちょっと自分で調べてからまた来ます。
0043デフォルトの名無しさん2006/10/07(土) 14:57:26
http://pc8.2ch.net/test/read.cgi/tech/1158367586/l50
0044デフォルトの名無しさん2006/10/07(土) 15:08:42
>>38
機種依存のやり方を取らざるを得ないから、機種依存OKスレへ。
while (1) {
do 〜 while ();
//キーボード入力
if (リターンキーだったら) break;
}
でできるけど、キーボード入力の部分が機種依存になる。
かならずリターンキーを押すのなら
char buf[4];
fgets(buf, sizeof buf, stdin);
if (buf[0] == '\n') break;
みたいなかんじでいけるけど。
0045デフォルトの名無しさん2006/10/07(土) 15:40:29
リニアPCmのWAVファイルを
ADPCMに変換したいので参考になるところオシエテ
0046デフォルトの名無しさん2006/10/07(土) 18:53:28
        ,.-─ ─-、─-、
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ , -─        Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  ___________
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ  /
     ヽ ヽ     -''ニニ‐  / < つーか、スレ違いだろハゲ
        |  `、     ⌒  ,/   \___________
       |    > ---- r‐'´
      ヽ_         |
         ヽ _ _ 」

     ググレカス [ gugurecus ]
   (西暦一世紀前半〜没年不明)
0047デフォルトの名無しさん2006/10/07(土) 18:59:14
2
0048至福2006/10/07(土) 22:33:20
ありがとうございます
剰余計算はあまり速くならないみたいですね

Rabin法を用いた素数の
高速判定アルゴリズムってのがあるそうなんですが
C言語だとどうやって書けばいいでしょうか?
0049デフォルトの名無しさん2006/10/07(土) 22:51:53
>>48
素直に書けばいい
0050デフォルトの名無しさん2006/10/07(土) 23:01:26
>>48
思うがままに書けばいい
書くことは do に過ぎない
see すなわち実測を怠るなかれ
0051デフォルトの名無しさん2006/10/10(火) 12:16:39
C言語をはじめたばかりであまりわからないのですが、
ビットシフトはなんの役に立つのでしょうか?
0052デフォルトの名無しさん2006/10/10(火) 12:18:29
>>51
ビットフラグの操作。
0053デフォルトの名無しさん2006/10/10(火) 12:52:28
そういえば、剰余の計算のテーブル引き版ってどうやるんだっけ?
昔インテルがp5-90でしくじったやり方
0054デフォルトの名無しさん2006/10/10(火) 15:20:33
>>51
まだやってんのか阿呆。
0055デフォルトの名無しさん2006/10/10(火) 17:22:30
倍精度を丸めたあの日
0056デフォルトの名無しさん2006/10/12(木) 13:06:12
returnで文字列を返すにはどうすればいいのでしょうか?
0057デフォルトの名無しさん2006/10/12(木) 13:10:59
配列は返せない
ポインタなら返せる
0058562006/10/12(木) 13:43:17
分かったような気がしたんですが、上手くいかないのでご指導をお願いします。

char * f(void) {
char buf[80];
fgets(buf, 80, stdin);
return buf;
}
int main(void) {
char * a;
a = f();
printf("%s\n", a);
}
0059デフォルトの名無しさん2006/10/12(木) 13:50:53
ポインタは返せるけど
そのポインタがローカル変数を指している場合
関数を抜けた時点で無効になる
0060デフォルトの名無しさん2006/10/12(木) 13:52:49
(sprintf() のように) 戻り値で文字列を返さずに、
引数で渡されたバッファ(?)の内容を書き換える
0061562006/10/12(木) 13:56:16
少し変更したんですが、どうでしょうか?

char * f(void) {
static char buf[80];  /* staticにしました */
fgets(buf, 80, stdin);
return buf;
}
int main(void) {
char * a;
a = f();
printf("%s\n", a);

return 0;
}
0062デフォルトの名無しさん2006/10/12(木) 14:38:42
まあまあだね。スレッド使わないならいいんじゃね。
>>60 のいうこと聞いて書き直せ!
0063562006/10/12(木) 15:03:08
引数渡しに変更したんですが、これでどうですか

void f(char *buf) {
fgets(buf, 80, stdin);
}
int main() {
char buf[80];

f(buf);
printf("%s\n", buf);

return 0;
}
0064562006/10/12(木) 15:08:03
間違えました。修正版です

int main() {
char buf[80];
printf("%s\n", fgets(buf, 80, stdin));
return 0;
0065デフォルトの名無しさん2006/10/12(木) 15:10:37
てめえ 80 って直で書きやがっていい度胸だなっ
それから stdin ていうのも引数で受けるのが普通だ。
それから戻り値も成功時は buf をそのまま(ry
0066デフォルトの名無しさん2006/10/12(木) 15:12:46
ばけやろい
いきなり ^Z とか ^D とかよ、落ちるようなうろぐらむは書くんじゃねえよ
0067デフォルトの名無しさん2006/10/12(木) 15:13:11
>>65
結局 fsets そのままじゃん とお約束
0068デフォルトの名無しさん2006/10/12(木) 15:25:47
1行レスでtypo してるし。 fsets って何やねんorz
0069デフォルトの名無しさん2006/10/12(木) 18:35:12
複数の変数を定義することができるデータ構造って何ですか?
0070デフォルトの名無しさん2006/10/12(木) 19:00:44
>複数の変数を定義することができる
            ( ゚Д゚)構造体か?
>データ構造って何ですか?
            (;゚Д゚)…え?
0071デフォルトの名無しさん2006/10/12(木) 20:22:28
つ 疲れ目だ、休め
0072デフォルトの名無しさん2006/10/12(木) 21:54:36
日本語でおkのお手本だな
0073デフォルトの名無しさん2006/10/12(木) 23:40:18
#include <stdio.h>

int main(void);
int main() {
printf(">>67 fsets って何やねん\n");

main();
return 0;
}
0074デフォルトの名無しさん2006/10/13(金) 04:37:38
【3:1001】C言語なら俺に聞け(入門篇) ぱぁと2〜

が1000を超えてしまったので、こちらで質問させて頂きます

皆さん、ありがとうございます。
>>997
では、最後に行がなくてもカウントしてもいいのですね

では>>993で述べた、
>>何故、自分の環境だとtotatに(つまり改行文字の数に)1足さなければならないのでしょうか?

で、何故自分の環境だと1を足さなければならないのかが
他の参考書などを調べましたが解決しません・・・・
理由は改行文字で終わってないなら 1を足さなければならないからですかね?

要するの最後の行はとにかくEOFでも数えると覚えればいいみたいですね。

0075デフォルトの名無しさん2006/10/13(金) 04:41:43
EOF自体、DOS時代の遺物みたいなものだからな。最後のクラスタの
有効バイト数が分からないファイルシステムを使っている時、EOFで
ファイルの終わりを判別するという、今考えるととんでもない事をしていた。
0076デフォルトの名無しさん2006/10/13(金) 04:45:34
もうわけがわかりません・・・
結果的には数えるのでしょうか?
0077デフォルトの名無しさん2006/10/13(金) 04:47:02
好 き に し ろ よ
0078デフォルトの名無しさん2006/10/13(金) 04:59:24
>>74-
筋が分岐しているみたいだから一応次スレを立てておいた。
話の続きはそっちでヨロ

C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/
0079デフォルトの名無しさん2006/10/13(金) 05:08:49
>>78
すみません
0080デフォルトの名無しさん2006/10/13(金) 05:28:35
int ch;
ch=fgetc(io); if (ch==EOF) abort();
char c;
size_t sz=fread(&c, sizeof (char), 1, io); if (sz==0) abort();

freadは生バイトのまま読み込みで(raw byte)、
fgetcがバイトから文字に符号化(auto ascii char encoding)されるわけじゃないですよね。
1バイト読み込みの方法ですが、両者はどう違うのでしょうか?
0081デフォルトの名無しさん2006/10/13(金) 05:33:03
"r"か"rb"のどちらでオープンしたか、それとOSとの組み合わせで
挙動が異なる事がある。
0082デフォルトの名無しさん2006/10/13(金) 06:07:26
"rb"でオープンしたらfgetcでもfreadでも同じってことでしょうか?
0083デフォルトの名無しさん2006/10/13(金) 06:12:06
ASCIIのEOFとCのEOFを混同している奴がいるな
0084デフォルトの名無しさん2006/10/13(金) 06:50:49
DOS/Windowsでのテキストモードとバイナリモードの動作をわかってない奴もいる。
0085デフォルトの名無しさん2006/10/13(金) 07:18:39
DOS/Windowsの話ならスレ違い。
0086デフォルトの名無しさん2006/10/13(金) 12:12:26
>>82
どちらでオープンしようとも、1バイト読み込んだ内容についてはどちらも同じ。
仮にテキストモードで"\r\n"⇒'\n'の変換が行われるならば、fgetc()でもfread()でも行われる。
0087デフォルトの名無しさん2006/10/13(金) 15:21:31
C言語からアセンブラ語に変換するにはどうすればいいですか??
分かりやすくお願いします..
0088デフォルトの名無しさん2006/10/13(金) 15:29:15
勉強すればいいと思います。
0089デフォルトの名無しさん2006/10/13(金) 15:52:57
うるせーバカ氏ね
0090デフォルトの名無しさん2006/10/13(金) 15:59:42
マルチは死ねばいいと思います。
0091デフォルトの名無しさん2006/10/13(金) 17:08:13
マルチが死ぬにはどうすればいいですか???
分かりやすくお願いします。。。。
0092デフォルトの名無しさん2006/10/13(金) 17:10:19
>>91
鼬害。
0093デフォルトの名無しさん2006/10/13(金) 21:29:52
86 デフォルトの名無しさん sage 2006/10/13(金) 12:12:26
>>88
コンパイラを使う。
そんなことをしてもほとんどの場合役に立たないけど。

手段を聞くのではなく、目的を示したほうがいいと思う。
0094デフォルトの名無しさん2006/10/13(金) 21:32:01
うわ操作ミス。
一行目は無視して。
0095デフォルトの名無しさん2006/10/13(金) 23:06:11
>>94
スレ違いは誘導しましょう。
例えばあんたはこっち。
http://pc8.2ch.net/test/read.cgi/tech/1158275665/
0096デフォルトの名無しさん2006/10/15(日) 01:35:30
『宣言が正しく終了していない』
と言ったエラーが出て困りました。
ググッて調べてみましたが、いまいち解決策が
みつかりません。
宜しくお願いします。
0097デフォルトの名無しさん2006/10/15(日) 01:37:40
>>96 いったい何をお願いしてるんだろう?
0098デフォルトの名無しさん2006/10/15(日) 01:44:13
>>97 コンパイルが通らないので、宣言が正しく終了していない
と表示された時の一般的な対処方法ご存知ないですか?
・・・ということでしたorz。
0099デフォルトの名無しさん2006/10/15(日) 01:47:51
>>98
http://pc8.2ch.net/test/read.cgi/tech/1160682950/35-
0100デフォルトの名無しさん2006/10/15(日) 01:50:15
>>96
>>90
0101デフォルトの名無しさん2006/10/15(日) 11:50:21
同じ構造体同士でmemmove(memcpy)を使うと、こちらの想定どおりに
同じオブジェクトのコピー(クローン)になるのでしょうか。

上のような構造体のビット・コピーは、CとC++でも挙動は同
じ(互いの構造体メンバー間の同一性は保障される)になるのでしょうか?

もしかしmemmoveは環境依存なの?
■ このスレッドは過去ログ倉庫に格納されています