C言語なら俺に聞け(入門編)Part 71

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 70
http://hibari.2ch.net/test/read.cgi/tech/1285490211/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 140代目
http://hibari.2ch.net/test/read.cgi/tech/1284632294/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
2デフォルトの名無しさん:2010/10/10(日) 22:41:49
                      ,、
                 _ ,ノ ,ヘ、、
               /´   ノ    `ヽ、
              /     /       ヽ
                i′   ,/         ',
             {    {           }
              ',    `、        ,!
           ___ヽ    `       丿__,,
          , ゝ  `ヽ、         /´   く _
        <-‐''´  ̄ ̄`,ゝ、、___,,, <´ ̄ ̄` ー->
          ` ー''´Z_ノ        ヽ、_ヾ ー ´

        C H I N E S E   R E S T A U R A N T
    __ __ __ __       __     __       __
    `i  | | i'l_i'l_i'     i''´ __`ヽ-ッ _コ  l____ i´__`ー-ッ  _,,.、
     ,!  ,! .l l   _,,,_   └'´__ ``´ レ┐ ┌─┐ ,!'´ ``´ /,r''´
    / 丿 '、'、 l´ __`ヽ-ッi''´__`ヽ-ッ  .l  l  ノ /     / /
   / /   ヽ ヾ´  ``'´└'´,,_``'´   l └ ' ,/   ___,,ノ /
_,,.r'' /      \ `>  r'"´   ``ヽS.) l  「´    「´    _ノ
‘''' ´           `′ └ ''´ ̄``‐-‐'' └ ┘   └‐ '' ´
3デフォルトの名無しさん:2010/10/10(日) 22:43:48
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
4デフォルトの名無しさん:2010/10/10(日) 22:46:40
     ___,. イ´   イ     ̄厂 _ __,.不 ニ-'⌒   `ヽ
    /´      ̄ ̄ ̄ ̄`ー 、  / /´     ,-‐' Y´       ヽ
   /                 ヽ  /                   ',
   /                                        i
  ,'                                    /    |
  !                                   イ     |
  |    !                               │      !
  !    ヽ                               │    |
  |    │                               │    !
  !   │                            ,.- 、   │    |
  !   │   ,...                        ! r‐、`  │   │
  |   │   /r-、ヽ                       ゞ‐' j  │   ! |
  ',  │   !::ゞィ〃                       ゛="   │   |
   ! │    `ー'                             │  !
   | │                                   │  !
   !  │,                                   │  i
   |  │                                   ,'   ',
   |   │                                  │   |
5デフォルトの名無しさん:2010/10/10(日) 23:15:52
てst
6デフォルトの名無しさん:2010/10/11(月) 06:35:53
Win32の構造体宣言でよく見る
HOGESTRUCT hs = {sizeof hs};
って規格的には大丈夫なんでしょうか?
リテラルパース時にはhsが解決されてるのか、仕様書みてもよくわかりませんでした。
7デフォルトの名無しさん:2010/10/11(月) 06:52:13
sizeofは演算子でC89準拠であっても定数扱いだから初期化子に入れても問題ないし
というか何が不安なんだ?
8デフォルトの名無しさん:2010/10/11(月) 08:15:31
演算子じゃなくて、シンボルの話してるんですが。
char *p = (char *)&p;
でもいいんですが、宣言の初期化で宣言元(?)をリテラルに含めていいのか、って話です。
例えばbcc32では下記はエラーになります。gccやtccではOKです。
char *p[] = { (char *)&p };

動作がどーのこーのではなく、規格ではどう定義されてるのか調べてます。
9デフォルトの名無しさん:2010/10/11(月) 08:42:28
すいません、そもそもbcc32は配列のリテラルの処理がおかしいってことが分かりました。
他のコンパイラではOKなので、とりあえず宣言の初期化子に代入先のオブジェクトを含めてよい、
ってことにしておきます。仕様上はよくわかりません。
ちなみに仕様はISO/IEC 9899 の6.7.8を参照していました。

/* オマケ:bcc32のおかしな挙動 */
char g;
int main(void)
{
char q;
char *p1[] = {&g}; /* OK */
char *p2[] = {&q}; /* ERROR:E2063 */
return 0;
}
10デフォルトの名無しさん:2010/10/11(月) 08:59:14
>>9
gのアドレスはリンク時に解決するから定数扱い。
qのアドレスはローカルだから可変値扱い。
bccはc99に対応していないから可変値で初期化できない。
gccやicc、Sun-OSのccはc99をある程度解釈する。
何の問題もない。
11デフォルトの名無しさん:2010/10/11(月) 10:00:17
なるほど、C99ではOKでそれ以前では仕様上NG、ということですね。
VC6.0でエラーにならないなと思ったら/W4で規格外だというエラーがでました。

解決しました、ありがとうございます。
12デフォルトの名無しさん:2010/10/11(月) 12:18:16
宣言で使っていいかどうかって問題じゃないだろ
↓定数でないものが使える宣言と使えない宣言がある
main()
{
int a = printf(0); /* OK */
int b[] = { printf(0) }; /* NG */
}
>>6>>8 の論点は sizeof hs の時点で hs が何のことになっているのか、
&p の時点で p が何のことになっているのかであって、
sizeof や & の結果が定数かどうかではない
13デフォルトの名無しさん:2010/10/11(月) 13:33:01
C言語で動的なn次元確保は可能ですか?
ループにしたがって
n+1,n+2,n+3,n+4,n+l次元みたいな
14デフォルトの名無しさん:2010/10/11(月) 14:20:41
>>13
別に確保はできるよ。
ただし、Cである以上は、確保した領域をどう使うかはプログラマの責任だが
15デフォルトの名無しさん:2010/10/11(月) 14:56:55
>>12
それです、本当に知りたかったことはそれなんですが、
どう見ても仕様書には書いてないように思います。

sizeofに戻ると、初期化リテラルのブロック内で自身の最終情報を得るのは不可能です。
変数が配列でないなどの条件付です。以下を考えてみれば分かります。
int a[] = { sizof a, sizeof a };
これはワンパス的なやりかたで実装されてると解決できません(宣言と初期化を完全に分けれません)。
VC6はゼロ初期化で押し通します。

現実のコンパイラでこの辺の挙動は「未定義」といっていい感じなのは分かりました。
だけど配列でない場合は上手くいく、その歯がゆさ。
16デフォルトの名無しさん:2010/10/11(月) 16:38:56
そりゃそうだ。中身が判らないのに量が判るわけないじゃん。
構造体の場合は中身はこれこれって定義があるんだから量が判って当然だし。
17デフォルトの名無しさん:2010/10/11(月) 17:11:15
>>16
決め付けはよくないですよ。
例えばtccでは正しく初期化されます。
18デフォルトの名無しさん:2010/10/11(月) 18:22:53
「tccでは」
アホか
19デフォルトの名無しさん:2010/10/11(月) 19:45:33
仕様書で記述発見しました。自己解決です。
お騒がせしました。
20デフォルトの名無しさん:2010/10/11(月) 20:05:01
初歩的な質問ですみませんが 
printfで"●"をX回表示させるにはどうすればいいですかね?
21デフォルトの名無しさん:2010/10/11(月) 20:06:53
printf("●");
をX個書く
22デフォルトの名無しさん:2010/10/11(月) 20:09:36
>>21 
なるほど、ありがとうございました
23デフォルトの名無しさん:2010/10/11(月) 22:14:48
>>22
いえいえ
24デフォルトの名無しさん:2010/10/11(月) 23:26:14
>>22
俺にもお礼いえよ
25デフォルトの名無しさん:2010/10/11(月) 23:29:05
>>24
ありがとうございました
26デフォルトの名無しさん:2010/10/11(月) 23:29:54
>>25
どういたしまして
27デフォルトの名無しさん:2010/10/11(月) 23:40:57
そんなそんな
28デフォルトの名無しさん:2010/10/12(火) 07:02:01
自演注意報。
29デフォルトの名無しさん:2010/10/12(火) 11:13:55
for (i = 0; i < X; i++) printf("●");
30デフォルトの名無しさん:2010/10/12(火) 17:13:44
int main(){
int a;
int *p_a;
 a= 100; ←ここで定義するとエラーとなりました。
p_a = &a;

return 0;
}

どうしてなんでしょう?
31デフォルトの名無しさん:2010/10/12(火) 17:14:59
全角の空白が入ってるからじゃないか
32デフォルトの名無しさん:2010/10/12(火) 17:22:24
すいません。
半角に直してもダメみたいです。
33デフォルトの名無しさん:2010/10/12(火) 17:26:06
エラーの内容くらい書けよ
34デフォルトの名無しさん:2010/10/12(火) 17:43:08
ポインタp_aが
ここでは宣言できないと言われました。
a=100;を削除したところ通りました。 どうしてでしょうか?
35デフォルトの名無しさん:2010/10/12(火) 17:48:58
>>34
codepadに問題のソースを貼り付けたまえ。
36デフォルトの名無しさん:2010/10/12(火) 17:52:46
>>30の通りではなく
int a;
a = 100;
int *p_a;
ってなってるんだろ
37デフォルトの名無しさん:2010/10/12(火) 17:55:12
エラーメッセージをコピペすることさえできないクズ
38デフォルトの名無しさん:2010/10/12(火) 17:55:29
>>34
適当な翻訳しなくていいからエラーコード全部出せって
39デフォルトの名無しさん:2010/10/12(火) 17:57:53
エラーメッセージをそのままコピペしろや
40デフォルトの名無しさん:2010/10/12(火) 18:00:05
配列を引数にすると参照渡し、構造体を引数にするとコピー渡しですよね。
構造体を引数にして構造体内の配列をコピー渡ししたいのですが
構造体定義でint a[9]と長さが指定されているものならコピーされましたが
構造体定義でint *aとし、使うときにmallocした配列だとコピーされないように感じます。
可変長配列の場合はできないのでしょうか?
41デフォルトの名無しさん:2010/10/12(火) 18:01:07
長さが分からないからな
42デフォルトの名無しさん:2010/10/12(火) 18:03:20
コピーされるのはポインタ変数だからな
4340:2010/10/12(火) 18:07:43
あー。構造体のメンバとしてはint *aだから*aがコピーされるだけ。
aを配列として扱ってるのはおまえの勝手だろ ってことですか。

では関数の引数に可変長の配列をコピーで渡したい場合はどうしたらいいのでしょうか?
44デフォルトの名無しさん:2010/10/12(火) 18:07:53
コピー渡しとか変な用語作るなよw
45デフォルトの名無しさん:2010/10/12(火) 18:10:19
自分で新しくmallocしてコピーして渡したあとfreeすればいいです
46デフォルトの名無しさん:2010/10/12(火) 18:12:26
関数側でサイズを受け取って、内部でmallocで領域確保してそこにコピーしてやるしかないんじゃね?
47デフォルトの名無しさん:2010/10/12(火) 18:29:31
c++と勘違いしてるとか
48デフォルトの名無しさん:2010/10/12(火) 18:38:37
>>40
できない
49デフォルトの名無しさん:2010/10/12(火) 18:40:01
>>43
コピーされるのは *a でなく a
50デフォルトの名無しさん:2010/10/12(火) 19:00:35
出力変換指定子についての質問です。
printf("%d万",100);の場合、%dに右側の100という文字列を
代入するという考え方で合ってるでしょうか?
51デフォルトの名無しさん:2010/10/12(火) 19:03:50
代入じゃないけど100を参照しにいく
52デフォルトの名無しさん:2010/10/12(火) 19:12:52
>>50
そんなこと知らなくてもCを使うのに困ることはないよ。
その上でどうしても知りたいなら、使ってるコンパイラのソースを入手しなさい。
規格で決まってるのは「どういう結果になるか」だけ。
「どう実現するか」はコンパイラ次第。
53デフォルトの名無しさん:2010/10/12(火) 19:13:56
%dと100が置き換わると考えれば分かりやすいんじゃ
54デフォルトの名無しさん:2010/10/12(火) 19:22:29
cygwin上のgccから以下のプログラムをコンパイルし、C:\にディレクトリ"a"とコンパイルしたプログラムを置いて実行したのですが、失敗してしまいました。
"R:\a"の部分を"b"とすると正常に処理されました。解決策はありますか?

#include <stdio.h>

int main(void)
{
char *oldname = "a";
char *newname = "R:\a";

if( rename( oldname, newname ) == 0 ){
printf( "Rename successflly from %s to %s", oldname, newname );
}
else{
printf( "Rename failed" );
}
return 0;
}
55デフォルトの名無しさん:2010/10/12(火) 19:36:34
R:\\a
56デフォルトの名無しさん:2010/10/12(火) 20:01:41
>>55
ありがとうございました。
リネーム先が"R:\\a"ではまだエラーが出てしまうのですが、試しに"C:\\b"とするとリネームしてくれるので構文に間違いないと思います。
色々粘ってみます。
57デフォルトの名無しさん:2010/10/12(火) 20:07:05
>>56
R:\で実行してないか?
R:\aをR:\aにリネームはできないよ。
58デフォルトの名無しさん:2010/10/12(火) 20:15:03
C:\a を R:\a にもリネームできないと思う
そういうのはリネームじゃなくて移動っていうんだ
59デフォルトの名無しさん:2010/10/12(火) 20:17:21
>>57
ありがとうございます。
C:\に実行ファイルとディレクトリ"a"を置いてやってます。R:\はramdiskです。
60デフォルトの名無しさん:2010/10/12(火) 20:21:27
Windows(CRT)でもPOSIXでも>>58が正解だな
61デフォルトの名無しさん:2010/10/12(火) 20:24:43
>>58>>60
ありゃりゃ、方法からマズかったですか。
調べなおして書き直すことにします。ありがとうございました。
6257:2010/10/12(火) 21:17:12
>>59
すまん>>54全く見ずにレスしちまった。ってもういないか。
63デフォルトの名無しさん:2010/10/12(火) 23:03:49
>54
pathの指定方法が間違っていないかい?
ドライブルートは/cygdriveの下にマウントされる。
char *newname = "R:\a";
ではなくて
char *newname = "/cygdrive/r/a";
だと思うよ。
試しにls /cygdriveに何がマウントされているか、確かめてみて。
6454:2010/10/13(水) 00:04:49
windowsAPIのCopyFileとやらで対処しようとしたら案の定というかBCCに拒否され吠え面かいて戻ってきたら返信が。ありがとうございます。

>>62
いえいえ、>>54みたいな稚拙でイミフな質問を適切に解釈してくださるエスパーの方々には頭が上がりません

>>63
早速以下のように改造のうえコンパイルしてC:\で走らせてみました。
#include <stdio.h>

int main(void)
{
char *oldname = "a";
char *newname = "/cygdrive/r/a";

if( rename( oldname, newname ) == 0 ){
printf( "Rename successfly from %s to %s", oldname, newname );
}
else{
printf( "Rename failed : %s",newname );
}
return 0;
}

するとDOSプロンプト上で次のように結果が得られました。
Rename failed : /cygdrive/r/a

この時プログラムはWindowsディスク上に/cygdrive/r/aを作ろうとしてるんでしょうか?
ちなみにnewnameを"R:\\a"とすると次のようになりました。
Rename failed : r:\a
65デフォルトの名無しさん:2010/10/13(水) 00:12:10
失敗したときのerrnoを確認してみたら
6663:2010/10/13(水) 01:01:06
>64
>するとDOSプロンプト上で次のように結果が得られました。

cygwin bash shell上で実行しないとだめだよ。
このコードで期待通りに動いているよ。

#include <stdio.h>

int main(void)
{
char *oldname = "input.txt";
char *newname = "/cygdrive/c/hoge.txt";

if( rename( oldname, newname ) == 0 ){
printf( "Rename successflly from %s to %s\n", oldname, newname );
} else {
printf( "Rename failed\n" );
}
return 0;
}

実行結果
$ ./main
Rename successflly from input.txt to /cygdrive/c/hoge.txt
67デフォルトの名無しさん:2010/10/13(水) 01:48:10
>>63
cygwinはどっちも受け付ける

>>64
R:\もC:\もWindowsの中だろ

だからさあファイルシステムを跨いだrename()は無理だっつーの
68デフォルトの名無しさん:2010/10/13(水) 02:05:26
>>65
errnoなんてライブラリがあるんですね。勉強になります。

>>66
cygwinのbash上でそのプログラムを実行してみたのですが、同じ結果でした。errnoは2でnot foundみたいでした。私の環境か方法が悪いのだと思います。
その前に元プログラムの*newname = "r:\\a"で試してみたらerrno=13 (permission denied)が出力されました。
というかそのプログラムさえ動かないのは何かマズいミスを犯してる気がするので、明日落ち着いてまた走らせてみます。

>>67
やや、やっぱり私の試してる通りの方法は無理ですか。なんとかAPIを利用しないやり方をと思ったのですが・・・
WindowsAPIの部分をコンパイルするには該当するヘッダファイルを導入すればいいのかな?


色々実験しながらのレスとはいえ、アドバイスを下さる方々に不躾な部分があったかもしれません。お詫び申し上げます。
重ね重ねありがとうございます。
69デフォルトの名無しさん:2010/10/13(水) 02:12:31
cygwinのstrace使ってみるとか
70デフォルトの名無しさん:2010/10/13(水) 05:32:17
cygwinなんて使うのやめたらいいのに。
71デフォルトの名無しさん:2010/10/13(水) 06:08:41
糞アッー!スワップは使えないことは無い
72デフォルトの名無しさん:2010/10/13(水) 10:02:43
>>67
コロンつきのパスを解釈するのはシェルがコマンドラインをパースするときだろ。
アプリ内からライブラリ呼ぶときまでは受け付けてくれないんじゃないかと思うが。

つーか、cygwinスレに行けばいいよ。
73デフォルトの名無しさん:2010/10/13(水) 10:55:44
int main(void)
{
char res67[256];

printf(">>72 つーか、cygwinスレに行けばいいよ。\n");
gets(res67);
if (res67 ==">>67:cygwinスレ行かない\n")
  {
    printf("俺:>>72\n釣りだろ\n");
  }
}
74デフォルトの名無しさん:2010/10/13(水) 11:07:20
gets()使用禁止
75デフォルトの名無しさん:2010/10/13(水) 17:21:54
gets は便利だから学習段階においては積極的に利用すべし。
76デフォルトの名無しさん:2010/10/13(水) 17:23:01
>>74
お前にそれを言う資格はない
77デフォルトの名無しさん:2010/10/13(水) 17:26:37
gets()の罠には一度はまっておけばいいと思うよ。
78デフォルトの名無しさん:2010/10/13(水) 17:32:41
そうそう「転ばぬ先の杖」は初学者の為にならない
一度痛い目を見ておくべき
79デフォルトの名無しさん:2010/10/13(水) 18:03:35
てか、標準入力なんて学習段階でしか使わないんじゃね?
80デフォルトの名無しさん:2010/10/13(水) 18:09:09
そうでもない。リダイレクトして使うことがしばしば。
81デフォルトの名無しさん:2010/10/13(水) 18:09:56
生きがいもなく生きてるくせに妙なこだわりだけはあるんだなお前ら
82デフォルトの名無しさん:2010/10/13(水) 18:11:31
煽りだけが生きがいの人に言われてもw
83デフォルトの名無しさん:2010/10/13(水) 18:14:00
getsだろうがscanfだろうがどうでもいい
84デフォルトの名無しさん:2010/10/13(水) 18:25:06
C自体が時代遅れの古き良き時代の言語なのに痛い目もなにもないよーな
85デフォルトの名無しさん:2010/10/13(水) 18:34:25
staticのローカル変数をchar10コ分確保する場合どっちの記述が正しいですか?
どれも正しくない場合は訂正してください。
1. static char *str = (char *)malloc( sizeof(char) * 10 );
2. static char *str = (static char *)malloc( sizeof(char) * 10 );
86デフォルトの名無しさん:2010/10/13(水) 18:34:56
3. static char str[10];
87デフォルトの名無しさん:2010/10/13(水) 18:38:02
>>86
ごめん。個数は変数で与えられいて動的に確保しなければならない場合は?
88デフォルトの名無しさん:2010/10/13(水) 18:41:32
static char *str;
if (!str) str = malloc(個数);
89デフォルトの名無しさん:2010/10/13(水) 18:42:36
>>87
>>85と言ってることが矛盾してる=釣り
90デフォルトの名無しさん:2010/10/13(水) 18:42:58
>>84
WindowsもLinuxもCで書かれているのに古き良きもないもんだ
91デフォルトの名無しさん:2010/10/13(水) 18:44:00
ifはどういう意味ですか?
初期化してないのに参照できるんですか?
92デフォルトの名無しさん:2010/10/13(水) 18:46:12
そもそも静的変数に不定数の初期化子を代入できない
C++と勘違いしてね?
93デフォルトの名無しさん:2010/10/13(水) 18:49:09
>>90
WindowsはC++だが?
94デフォルトの名無しさん:2010/10/13(水) 18:50:29
>>93
バーカCだよ
MSDN良く見てみろ
俺も最初はC++だと勘違いしていた口だ
95デフォルトの名無しさん:2010/10/13(水) 18:52:36
どっちでもいい
96デフォルトの名無しさん:2010/10/13(水) 18:53:27
>>92
そうですか。
ようは何がしたいかというと呼び出した関数内で静的領域(配列)を動的に確保して
それに値代入して、そのアドレスを返したいんですけど、
こういう場合はどうやって領域確保すりゃいいんですか?
97デフォルトの名無しさん:2010/10/13(水) 18:54:49
>>96
VisualBasicかC#を使う
98デフォルトの名無しさん:2010/10/13(水) 18:55:33
>>97
Cじゃできんってこと?
99デフォルトの名無しさん:2010/10/13(水) 18:55:51
>>96
あたらしい仕様で俺様言語を策定する
100デフォルトの名無しさん:2010/10/13(水) 18:57:51
>>96
どうして静的領域じゃないとだめなん?
ヒープ領域ではだめな理由があるの?
101デフォルトの名無しさん:2010/10/13(水) 18:59:15
>>98
エンジンに翼を付けて飛ばしたいのか?
翼にエンジンを付けて飛ばしたいのか?
102デフォルトの名無しさん:2010/10/13(水) 19:01:03
>>100
ローカル変数として宣言したものを返したいからです。
103デフォルトの名無しさん:2010/10/13(水) 19:02:46
>静的領域(配列)を動的に確保して
おかしくね
104デフォルトの名無しさん:2010/10/13(水) 19:02:47
発想を変えた方が良い
105デフォルトの名無しさん:2010/10/13(水) 19:04:01
>>102
本当のローカル変数は関数を出たら消えてしまうものだよ

staticなローカル変数は特別だと思え
106デフォルトの名無しさん:2010/10/13(水) 19:04:27
醤油をソースの代わりに使うようなもん
107デフォルトの名無しさん:2010/10/13(水) 19:04:54
>>101
飛べばどっちでもいいよ
108デフォルトの名無しさん:2010/10/13(水) 19:07:30
静的なものを動的に確保し静的なものに動的に代入する
109デフォルトの名無しさん:2010/10/13(水) 19:08:43
>>105
そうですよね。
だから消えてしまわないようにして、
ポインタ引き渡しして呼び出した側で使いたいわけです。
110デフォルトの名無しさん:2010/10/13(水) 19:09:17
Cを使う必要があるのか、をまず考える必要があるだろ。
ケーキを切るときはハサミではなくケーキナイフを使う。
紙を切るときは包丁ではなくハサミやカッターを使う。
111デフォルトの名無しさん:2010/10/13(水) 19:10:37
サンダルで登山するようなもん
112デフォルトの名無しさん:2010/10/13(水) 19:11:41
>>109
ヒープ領域で確保したってポインタさえ失わなければ、そしてfree()さえしなければ
消えないじゃん?
113デフォルトの名無しさん:2010/10/13(水) 19:11:45
ヘルメットかぶって飛行機に乗るようなもん
114デフォルトの名無しさん:2010/10/13(水) 19:12:31
動的に確保したものを戻り値にすればいいのでは
115デフォルトの名無しさん:2010/10/13(水) 19:13:00
foo(int *a) { *a = 1; }

int a;
foo(&a);

をポインタ変数に拡張するのと違うの?

hoge(int** a)
{
 *a = malloc()... /* 動的確保 */
}

int *a;
hoge(&a);
116デフォルトの名無しさん:2010/10/13(水) 19:13:49
タバコをいちいち消火器で消すようなもん
117デフォルトの名無しさん:2010/10/13(水) 19:15:18
巨大な配列をグローバルで宣言しとけばいいのです
118デフォルトの名無しさん:2010/10/13(水) 19:17:17
ポインタによる動的なメモリ確保は水面下での破壊をもたらす。
119デフォルトの名無しさん:2010/10/13(水) 19:18:34
>>110
だいぶ書き進めてるんで無理です。
グローバル変数しかないですか?

もし、一文字返すだけなら
void funk(char *moji){
static char a;
a='A';
moji=&a;
return;
}
でいいと思うんですけど、
今やろうとしてるのは構造体の配列をかえすものです。
だだし、その長さが関数内で決まります。
120デフォルトの名無しさん:2010/10/13(水) 19:20:17
ユーザーが故意に引数char *mojiに4Gバイトくらいの文字列を与えたらどうなるんだろう。
121デフォルトの名無しさん:2010/10/13(水) 19:20:23
構造体の長さが変えられると?
122デフォルトの名無しさん:2010/10/13(水) 19:22:45
連結リストじゃなくて?
123デフォルトの名無しさん:2010/10/13(水) 19:23:22
>>118
さっきからうるさいな
ポインタでひどい目に遭ったからと言って八つ当たりするな
124デフォルトの名無しさん:2010/10/13(水) 19:25:18
struct foo {
 int num;
 struct hoge {
 
 } elem[];
};

この末尾が大きさ不定配列の構造体って C89 はセーフだっけ?
125デフォルトの名無しさん:2010/10/13(水) 19:26:16
>>124
ダメ

elem[1]; とか最低でも1の長さが必要
126デフォルトの名無しさん:2010/10/13(水) 19:26:42
何故staticに拘るのか?
皆言ってるようにmallocでヒープ確保すりゃいい話。
127デフォルトの名無しさん:2010/10/13(水) 19:26:54
struct hoge {

 } *elem;
128デフォルトの名無しさん:2010/10/13(水) 19:26:58
>>121
構造体の長さじゃなくて構造体配列の長さ
>>112
違います

言葉足らずですいません
129デフォルトの名無しさん:2010/10/13(水) 19:28:04
>>119
mallocでいいよ。
130デフォルトの名無しさん:2010/10/13(水) 19:29:58
>>128
そんなに構造体配列の長さを可変したいならCをやめてC++のstd::vectorを使えばいいだろ
Cでもrealloc()が使えるけどな
131デフォルトの名無しさん:2010/10/13(水) 19:30:23
構造体配列の長さってなに?
132デフォルトの名無しさん:2010/10/13(水) 19:31:58
struct {} hoge[これ]; じゃないの?
133デフォルトの名無しさん:2010/10/13(水) 19:32:03
>>128
>違います
どこが違うか詳しく
134デフォルトの名無しさん:2010/10/13(水) 19:35:28
やりたいことをソースにしたら、コンパイラに怒られるだけのような
135デフォルトの名無しさん:2010/10/13(水) 19:36:23
>>130
呼び出し側で構造体ひとつ宣言して、そのポインタを引数として与えて、
呼び出された関数内でrealloc()を使って構造体配列の長さを変更すればいいということですね?
それで行ってみようかと思います。
136124:2010/10/13(水) 19:37:06
>>125 thx
Win32 の BITMAPHEADER だったかがこんな構造だったな
と記憶してたが、正確に把握してなかった

struct foo *p = (struct foo *)malloc(sizeof(struct foo) + sizoof(struct hoge) * num);
p->num = num;
p->elem[0] 〜 p->elem[num-1] までは使えるってやつ
137デフォルトの名無しさん:2010/10/13(水) 19:37:20
mallocで確保したメモリーじゃないとreallocできないよ。
138デフォルトの名無しさん:2010/10/13(水) 19:38:52
>>133
構造体の連結リストではなく構造体の配列です
139デフォルトの名無しさん:2010/10/13(水) 19:39:43
昔はトリッキーな書き方してるの見たことあるけど
最近は、見なくなったな
140デフォルトの名無しさん:2010/10/13(水) 19:40:22
>>137
へー そうなんですか。
ありがとうございます。
141デフォルトの名無しさん:2010/10/13(水) 19:40:44
>>138
あーバカバカバカ
基礎からやり直せ

今そんな状態でプログラムを進めると修復不能なバグを作り出すぞ絶対
142デフォルトの名無しさん:2010/10/13(水) 19:42:31
外から渡してもらってreallocしなくても、関数の中でmallocしてポインタ返せばいいんじゃないの。
143デフォルトの名無しさん:2010/10/13(水) 19:46:02
>>142
いやこいつは多分malloc()を全く理解していない
今度はメモリリークを起こすぞ
144デフォルトの名無しさん:2010/10/13(水) 19:50:24
>>142
関数のブロック内でローカル変数に対してmallocした場合
関数のブロックが閉じた時点で領域が解放されてしまうのでダメじゃないですか?
145デフォルトの名無しさん:2010/10/13(水) 19:51:55
>>144
いいえ
明示的にそのポインタを free() しない限り領域は生き残ります
146デフォルトの名無しさん:2010/10/13(水) 19:53:04
まさか gcc のソースだかで使ってる alloca と勘違いしてるのか?
147デフォルトの名無しさん:2010/10/13(水) 19:54:43
>>144
「ポインタを関数の返却値として返す」とはどういう事か理解した方がいい
148デフォルトの名無しさん:2010/10/13(水) 19:56:01
>>145
malloc()で確保した領域は、普通のローカル変数と扱いが違うわけですか?
149デフォルトの名無しさん:2010/10/13(水) 19:56:15
こういう奴は素直にC++に移行してstd::vectorを使った方が無駄な時間を潰さずに済むのにな
150デフォルトの名無しさん:2010/10/13(水) 19:58:20
>>144
どう勘違いしてるように見えます?
151デフォルトの名無しさん:2010/10/13(水) 19:59:46
>>148
違う
つか、変数や領域とポインタが gdgd になってるな…

>>149 そう思う反面スマポで引っかかりそうな気もしないでもないw
152デフォルトの名無しさん:2010/10/13(水) 20:02:53
>>151
スマポはstd::auto_ptrは使用禁止にしてstd::tr1::shared_ptrかstd::tr1::shared_ptrのみ
使用可にするとか制限付けないとなw

多分COAPに引っ掛かってまた悩むw
153デフォルトの名無しさん:2010/10/13(水) 20:04:12
×std::tr1::shared_ptrのみ
○std::tr1::unique_ptrのみ

俺も最初はstd::auto_ptrを入れてsortしたら中身がぶっ壊れて悩んだ
今じゃ代入そのものが不可になってるのが多いけどな
154デフォルトの名無しさん:2010/10/13(水) 20:06:42
あ、ごめん
俺がageてたのか
155デフォルトの名無しさん:2010/10/13(水) 20:09:43
>>148
mallocで確保した領域は、ヒープ内にある。
ローカル変数は、スタック上にある。

スタック上の領域は関数を抜けると無効になる。

関数を抜けても使いたい領域はスタック上に確保する。
だからmallocを使う。
156デフォルトの名無しさん:2010/10/13(水) 20:12:25
スタックとかヒープ領域とか言って通用するかな・・・・
157デフォルトの名無しさん:2010/10/13(水) 20:15:24
>>155
>関数を抜けても使いたい領域はスタック上に確保する。
ヒープ上じゃないんですか
とにかく、参考になりました。
158デフォルトの名無しさん:2010/10/13(水) 20:16:49
>>156
別物だって言うことは分かった
159155:2010/10/13(水) 20:18:06
>>157
ヒープだった。ごめんなさい。

× >関数を抜けても使いたい領域はスタック上に確保する。

○ >関数を抜けても使いたい領域はヒープ上に確保する。
160デフォルトの名無しさん:2010/10/13(水) 20:24:10
>>40
>配列を引数にすると参照渡し、構造体を引数にするとコピー渡しですよね。
Cに参照渡しはないよ。K&Rにもはっきり書いてある。
161158:2010/10/13(水) 20:24:11
そろそろ抜けます。
いままで回答してくださった皆さんありがとう
162デフォルトの名無しさん:2010/10/13(水) 20:50:13
番号コテ使うなら、一連の同じ話題の間は同じのにしてくれ
コテの意味がない
163デフォルトの名無しさん:2010/10/13(水) 20:52:14
しかしお前ら関心するわ
俺は人に教える事はようできん
途中でムカッときてしまう
164デフォルトの名無しさん:2010/10/13(水) 21:11:14
>>163
同じ人間は2人といない。キミと同じ知識、経験を持った人間はいない。
言ってる意味がわかるな?
165デフォルトの名無しさん:2010/10/13(水) 21:15:42
>>163
ここはお前の日記じゃない。
166デフォルトの名無しさん:2010/10/13(水) 21:16:20
>>164
大学の時に教育原理を取って、中学校の数学の免状は持ってるけど
それとは別の問題みたいですね
167デフォルトの名無しさん:2010/10/13(水) 21:17:46
まったく別の問題だね
168デフォルトの名無しさん:2010/10/13(水) 21:19:03
>>165
うるせーわいちいち
169デフォルトの名無しさん:2010/10/13(水) 21:20:14
>>168
アホかうるそれるすぼるんよすにんいっちゃだ
170デフォルトの名無しさん:2010/10/13(水) 21:21:05
>>169
意味不明
日本語でおk
171デフォルトの名無しさん:2010/10/13(水) 21:46:42
うる って打ったらGoogleIMEで候補に出てきてワロタ
172デフォルトの名無しさん:2010/10/14(木) 06:46:41
長い間座ってるとお尻が痛くなるんですがどうすればいいんでしょうか?
173デフォルトの名無しさん:2010/10/14(木) 07:40:40
おっぱいを型にはめようとする人たち
http://togetter.com/li/59043

綾瀬はるかのおっぱいはどの型で宣言すればいいですか?
174デフォルトの名無しさん:2010/10/14(木) 07:43:27
>>173
TwitterネタはTwitterでやれ。
175デフォルトの名無しさん:2010/10/14(木) 14:25:00
>>172
お尻を解放する。
176デフォルトの名無しさん:2010/10/14(木) 15:33:22
ふほっ
177デフォルトの名無しさん:2010/10/14(木) 16:17:53
日の丸の国旗の絵を表示させるプログラムをおしえてください。
178デフォルトの名無しさん:2010/10/14(木) 16:19:12
printf("+----+\n");
printf("|  ● |\n");
printf("+----+\n");
179デフォルトの名無しさん:2010/10/14(木) 16:25:39
それ、バングラディシュじゃん。
180デフォルトの名無しさん:2010/10/14(木) 16:32:35
バングラデシュね
181デフォルトの名無しさん:2010/10/14(木) 16:47:36
#include <stdio.h>
#include <math.h>

#define PGM_ID "P6"
#define W 400
#define H 300

int main(){
int x, y;
unsigned char pixel;

printf("%s\n", PGM_ID);
printf("%d %d\n",W,H);
printf("%d\n", 255 );
for(y=150; y>-150; y--){
for( x=-200; x<200; x++){

if(y<0.75*x+150 && y<-0.75*x+150 && y>-0.75*x-150 && y>0.75*x-150){
putchar(100);
putchar(192);
putchar(67);
}
else{
putchar(255);
putchar(255);
putchar(255);
}}}
return 0;
}
182デフォルトの名無しさん:2010/10/14(木) 21:30:31
>>181
白地に緑の菱形?
183デフォルトの名無しさん:2010/10/15(金) 00:20:15
184デフォルトの名無しさん:2010/10/15(金) 00:30:58
/*
* typ2.c - 標準入力の代わりに、起動時の
* コマンドラインの第一パラメータのファイルを処理
*/
#include <stdio.h>


main(int argc, char *argv[])
{
FILE *fp;
int c;


if (argc != 2){ /* コマンド名も含んだ個数 */
printf("parameter error\n");
exit(1);
}
if ((fp = fopen(argv{1], "r"))==NULL) {
printf("can't open %s\n", argv[1]);
exit(1);
}
while ((c = fgetc(fp)) != EOF)
fputc(c, stdout);
fclose(fp);
exit(0);
}

教えてください 
上のプログラムはコマンドラインで指定したファイルを入力として画面に表示する
ものなんですけど
参考書通りにコンパイルしてもエラーが出てしまいます。
どこを直せばいいですか 参考書まんまのはずなんですが 構文エラーがでます
185デフォルトの名無しさん:2010/10/15(金) 00:33:41
fopen(argv{1], "r")
fopen(argv[1], "r")
186デフォルトの名無しさん:2010/10/15(金) 01:31:39
学習段階の使い捨てプログラムでいちいちエラーチェックなんかしなくていいよ。
argc とか fopen の返りが NULL とか。
187デフォルトの名無しさん:2010/10/15(金) 06:22:59
>>184
括弧が足らない
188デフォルトの名無しさん:2010/10/15(金) 06:24:37
じゃないや、括弧の記号が間違ってるのか
189デフォルトの名無しさん:2010/10/15(金) 06:27:44
>>187-188
お前は>>185も読めないバカなんだから、他人に何かを指摘できるとか考えるな
190デフォルトの名無しさん:2010/10/15(金) 18:35:14
#include <stdio.h>

int main(void)
{
char c = 'A';
char *p;
p= &c;

printf("%c\n",*p);
*p=*p+2;
printf("%c\n",*p);

return 0;
}


実行すると A C って出ますけど
「C」なんて一切出てきてないのに、なぜ A C って表示されるんですか?

まさかchar c = 'A' って宣言すると、
「その+2のアドレスにCもあるよ」って宣言してるのと同じ意味なんでしょうか?

ここまで読み返すと意味不ですが、回答お願いします
191デフォルトの名無しさん:2010/10/15(金) 18:39:33
char c = 'A';
これはc=0x41と同じ
*p=*p+2;
これは
c=c+2;と同じ。よってc=0x43と同じ
これはc='C';と同じ
192デフォルトの名無しさん:2010/10/15(金) 18:40:09
'A' + 2 == 'C'
193デフォルトの名無しさん:2010/10/15(金) 18:42:15
*(p+2) ← 「その+2のアドレスに書いてる値
*p + 2 ← 「そのアドレスに書いてる値に +2 した値
194デフォルトの名無しさん:2010/10/15(金) 18:44:55
asciiコードがわからんのか、ポインタがわからんのか、どっちだ?
195デフォルトの名無しさん:2010/10/15(金) 18:46:58
>「その+2のアドレスにCもあるよ」
ポインタがわかってないみたいだな
196デフォルトの名無しさん:2010/10/15(金) 19:01:34
+2 のアドレスを指すなら書き方は p + 2

*p と書くと、p の指すアドレスに保存されてるデータ。



たとえば char c = 'A'; で、
変数 c の、メモリー中での場所が、たとえば 0x1234 なら、
char* p;
p = &c; で,変数 p に記録される数字も 0x1234 になる。

0x1234 の場所に、実際に記録されてるデータは 'A'
A は、数字に直すと65。  変数 c には(メモリ番地0x1234の場所には)65という数字が記録されている。

p と書くと 0x1234 という数字を参照することになるので、p+2 なら 0x1234 + 2 = 0x1236 となる。 これなら c の +2 先のアドレスと同じ数字。

一方、*p と書くと 変数c(メモリ番地0x1234の場所)に記録されている65という数字を参照することになるので、
*p+2 は 65 + 2 という意味なので、 67 という数字を指す。
printf の %c に 67 という数字を渡すと C と表示される。 (「67ならCと表示する」という決まりなので)


0x1234 + 2 の 0x1236 の場所に、自動的に C (数字の67)が記録されたりはしてないと思います。
197デフォルトの名無しさん:2010/10/15(金) 19:33:47
C言語でオヌヌメのライブラリって何ですか?C++でいうMFCみたいのってないですか?
198デフォルトの名無しさん:2010/10/15(金) 19:34:59
>>197
stdio.h
199デフォルトの名無しさん:2010/10/15(金) 19:35:02
GTK+
Win32API
200デフォルトの名無しさん:2010/10/15(金) 19:35:54
mylib.h
201190:2010/10/15(金) 19:48:08
あーASCIIコード+2ってことですか

わかりましたーすいませんー
202デフォルトの名無しさん:2010/10/15(金) 19:51:12
curses
203デフォルトの名無しさん:2010/10/15(金) 19:56:41
>>196
その説明だとchar以外になったときに
0x1236にならないってハマりそう
204デフォルトの名無しさん:2010/10/15(金) 20:04:26
char *a; int *b;
a = 0; b = 4;

printf("a: %d\n", a);
printf("b: %d\n", b);
printf("a+1: %d\n", a+1);
printf("b+1: %d\n", b+1);
printf("a+b: %d\n", a+b);

これはどうしてなんですか?
205デフォルトの名無しさん:2010/10/15(金) 20:05:12
コンパイラのオススメは何ですか
206デフォルトの名無しさん:2010/10/15(金) 20:06:34
lsi-c試食版
207デフォルトの名無しさん:2010/10/15(金) 20:07:18
ボーランド
208デフォルトの名無しさん:2010/10/15(金) 20:12:51
>>205
Turbo C 2.01
209デフォルトの名無しさん:2010/10/15(金) 20:13:06
>>205
Linux系ならgcc。WindowsならVisual Studioが基本だが
コマンドラインで使うなら、旧bcc(codegearのC++Compiler)も悪くはない

ICCとか一風変わったものに手を出すのは後回しでいい
210デフォルトの名無しさん:2010/10/15(金) 20:16:23
>>205
LCC-Win32
211デフォルトの名無しさん:2010/10/15(金) 20:17:11
>>204
ポインタの基礎を勉強してきなさい。
212デフォルトの名無しさん:2010/10/15(金) 20:18:29
>>206-210
回答ありがとうございます。
試してみます
213デフォルトの名無しさん:2010/10/15(金) 20:19:28
そもそも

char *a; int *b;
a = 0; b = 4;

はコンパイルエラーになりそうな気がするんだが気のせいか?
214デフォルトの名無しさん:2010/10/15(金) 20:20:50
>>208
初心者には統合開発環境の付いた Turbo C++ 1.01 を薦めるべき。
いまどき IDE 無しでは初心者は受け入れられない。
215デフォルトの名無しさん:2010/10/15(金) 20:21:17
>>213
>printf("a+b: %d\n", a+b);
いやこっちだろ
216デフォルトの名無しさん:2010/10/15(金) 20:22:04
>>213
C言語ならNo
違反 では ない
217デフォルトの名無しさん:2010/10/15(金) 20:24:22
>>209
そこで何故MinGWを薦めない?
218デフォルトの名無しさん:2010/10/15(金) 20:26:45
言語そのものの勉強と関係無いところでトラブルを起こしそうだから
219デフォルトの名無しさん:2010/10/15(金) 20:36:10
MinGW使ったことない?っつーかそんな人気ないの?
セットアップ超簡単なんだけどな。BCCよりもね。
出来上がるバイナリもすげー小さいし基本gccだからc99ほぼ対応だし。
いいことだらけ。
220デフォルトの名無しさん:2010/10/15(金) 20:39:17
>>219
使っているが人に勧めるようなものではない
初心者には資料が多いものを勧めるべき
221デフォルトの名無しさん:2010/10/15(金) 20:40:35
仮想マシンのlinux上でgcc
222デフォルトの名無しさん:2010/10/15(金) 20:40:59
gccの資料なんて一番多いけどなw
ソースも入手できるし
223デフォルトの名無しさん:2010/10/15(金) 20:46:45
cygwinの方が楽でない?
MinGWってgccでまともなWindowsアプリにしたいときか64bitにしたいときしか使わない。
今はどうか知らないけどcygwinからオプション一発でMinGWの32bitバイナリ作れたと思うし。
224デフォルトの名無しさん:2010/10/15(金) 20:59:15
>>223
Cygwinはそれこそ使い始めるまでが大変じゃないか?
MSYSもCygwinのコマンドも覚えなきゃならんし、配布時にdllも必要だし。
MinGWはgccをそのままWinに移植しただけだからシンプルだよ。
225デフォルトの名無しさん:2010/10/15(金) 21:02:08
プログラミングやるつもりならunixのコマンドやらvimのコマンドを覚えなきゃならへんねん
226デフォルトの名無しさん:2010/10/15(金) 21:06:09
>>224
VC++ ExpressとSDK付属などのコンパイラ単品を比較してコンパイラ単品に軍配をあげるようなもの
227デフォルトの名無しさん:2010/10/15(金) 21:06:45
>言語そのものの勉強と関係無いところでトラブルを起こしそうだから

を考慮するならシンプルなほうがいいじゃない。
228デフォルトの名無しさん:2010/10/15(金) 21:11:47
Windowsでお勉強ならこれが一番

Visual Studio 2010 Express 日本語版
ttp://www.microsoft.com/japan/msdn/vstudio/express/
229デフォルトの名無しさん:2010/10/15(金) 21:15:23
Windows SDKやら.NET Frameworkやら入れなきゃならないVSよりよっぽど簡単だけどな。
まあいいやこの辺でやめとくよ。
230デフォルトの名無しさん:2010/10/15(金) 21:18:55
2010からWindowsSDKは標準になりますた
231デフォルトの名無しさん:2010/10/15(金) 21:55:03
LiDIAという数論ライブラリがあって巨大整数が使えるのですが、
このライブラリを使っても環境依存しない独立したアプリは作れ
るでしょうか。コンパイラはVSかMINGWのGCCを考えています。
232デフォルトの名無しさん:2010/10/15(金) 22:00:37
>>231
何故それをそのライブラリの開発元に聞かないんだ。
233デフォルトの名無しさん:2010/10/15(金) 22:01:44
開発元はドイツなので・・・
234デフォルトの名無しさん:2010/10/15(金) 22:04:05
斜め読みするに、
Linuxとx86/SPARCの組み合わせしかテストされてないっぽいが
http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/

それに含まれているらしいGMPであれば
何とかなりそうな雰囲気だが、よく知らない

>GMP's main target platforms are Unix-type systems, such as GNU/Linux, Solaris,
>HP-UX, Mac OS X/Darwin, BSD, AIX, etc. It also is known to work on Windows
>in both 32-bit and 64-bit mode.
http://gmplib.org/
235デフォルトの名無しさん:2010/10/15(金) 22:04:35
ドキュメントが読めない状況で、どうやって使ってるの?
236デフォルトの名無しさん:2010/10/15(金) 22:05:02
237デフォルトの名無しさん:2010/10/15(金) 22:06:09
とりあえず実装して試してみます。
238デフォルトの名無しさん:2010/10/15(金) 22:08:58
日本語の本で紹介されていたので使っています。
239デフォルトの名無しさん:2010/10/15(金) 22:09:44
>>233
ドイツ人なら余程のことがない限り拙い英語でも充分遣り取りできると思うが。
240デフォルトの名無しさん:2010/10/15(金) 22:14:15
英語ほとんどわかりません。
エラーメッセージもよくわかりません。
日本語のサンプルコードでプログラムしてます。
241デフォルトの名無しさん:2010/10/15(金) 22:17:50
これはひどい
242デフォルトの名無しさん:2010/10/15(金) 22:19:25
CygwinでCC=gcc-3 CXX=g++-3とやるとコンパイルできるのですが、
MINGWだとコンパイルに失敗します。
古いコンパイラでないと出来ないみたいです。
243デフォルトの名無しさん:2010/10/15(金) 22:23:04
バカもの!いいから英語を嫁!聞くなら嫁!読んでから聞け!以上
244デフォルトの名無しさん:2010/10/15(金) 22:23:34
もうC言語関係ねーじゃん
245デフォルトの名無しさん:2010/10/15(金) 23:23:33
ひょっ
246デフォルトの名無しさん:2010/10/16(土) 12:48:10
>>184を教えてくれ
 気になって先に進めない
247デフォルトの名無しさん:2010/10/16(土) 12:52:08
248デフォルトの名無しさん:2010/10/16(土) 12:52:09
× if ((fp = fopen(argv{1], "r"))==NULL) {
○ if ((fp = fopen(argv[1], "r"))==NULL) {
249デフォルトの名無しさん:2010/10/16(土) 14:26:50
0から3までの4つの整数をランダムに発生させるにはどうすればよいですか?
250デフォルトの名無しさん:2010/10/16(土) 14:28:02
rand()%4
251デフォルトの名無しさん:2010/10/16(土) 14:43:22
ありがとうございます
252デフォルトの名無しさん:2010/10/16(土) 14:51:23
>>250
rand() のモジュロをとるのはよくないうんぬんかんぬん
http://www.kouno.jp/home/c_faq/c13.html#16
253デフォルトの名無しさん:2010/10/16(土) 14:54:03
4つ程度なら問題なかろう
254デフォルトの名無しさん:2010/10/16(土) 14:58:00
むしろ小さければ小さいほど顕著になる問題なのでは?
255デフォルトの名無しさん:2010/10/16(土) 15:00:28
違う
RAND_MAXに近づけは近づくほど精度が悪くなる
よく考えれば分かるだろうに
256デフォルトの名無しさん:2010/10/16(土) 15:09:45
それは別の問題だろ
257デフォルトの名無しさん:2010/10/16(土) 15:11:05
小さくても悪くなる。
http://www.kouno.jp/home/c_faq/c13.html#16
>なぜな ら乱数発生器の多くで下位のビットは悲惨なほどランダムでない

一見ランダムに見えていても二つ組、三つ組み、4次元、5次元、と次数をあげていくと、わかったものではない。
258デフォルトの名無しさん:2010/10/16(土) 15:15:28
4*3*2*1のパターンしか無いのな
259デフォルトの名無しさん:2010/10/16(土) 15:20:56
じゃあどう書けば「いいの?
260デフォルトの名無しさん:2010/10/16(土) 15:23:42
続け様に2回も貼られてるリンク先を読まない人って
261デフォルトの名無しさん:2010/10/16(土) 15:24:21
(rand()>>1)%4
262デフォルトの名無しさん:2010/10/16(土) 15:44:15
いつまでRAND_MAXは0x7FFFなんですか?
精度が低すぎて使い物にならないんですが。
263デフォルトの名無しさん:2010/10/16(土) 15:45:57
君が他のコンパイラを導入するまで
264デフォルトの名無しさん:2010/10/16(土) 15:46:05
265デフォルトの名無しさん:2010/10/16(土) 15:52:57
メルヘンツイッターか。
266デフォルトの名無しさん:2010/10/16(土) 16:50:39
>>262
lsi-c ですか?
267デフォルトの名無しさん:2010/10/16(土) 16:55:50
いつまでCHAR_BITは0x8なんですか?
精度が低すぎて使い物にならないんですが。
268デフォルトの名無しさん:2010/10/16(土) 17:01:22
>>267
デジタルシグナルプロセッサ環境マヂおすすめ
CHAR_BIT==32とか有効ビット!=ビット数とか味わえるよ
269デフォルトの名無しさん:2010/10/16(土) 17:12:22
DSP使ったことあるけど
CHAR_BIT は 8 だけど、4byte境界以外のアクセスは例外発生
ってコンパイラだった
270デフォルトの名無しさん:2010/10/16(土) 17:14:26
8bitの処理が必要になったときはどうするんだろうね?
271デフォルトの名無しさん:2010/10/16(土) 17:21:49
>>248 俺には同じに見えるんですが何が違うのかおしえて
272デフォルトの名無しさん:2010/10/16(土) 17:24:26
視力
273デフォルトの名無しさん:2010/10/16(土) 17:26:55
>>270
イミディエイトアドレス に 境界外の値が使えない
ってだけなので、ビットシフトとマスクで 値操作そのものはなんとかなるよ
あとはインラインアセンブラで SSEのSIMD的なレジスタ分配コードを経由させる

>>271
上: argv 直後 { からす括弧
下: argv 直後 [ カギ括弧
274デフォルトの名無しさん:2010/10/16(土) 17:27:22
>>271

×  { 1 ]
○  [ 1 ]
275デフォルトの名無しさん:2010/10/16(土) 17:27:39
>>271
argvの次の1文字
276デフォルトの名無しさん:2010/10/16(土) 17:28:16
>>271です
正解のほうをコピーしてみたら警告はでましたがエラーなく実行できました
どこが間違ってたか教えて〜
277デフォルトの名無しさん:2010/10/16(土) 17:29:12
↑ありがとうございます↑
278デフォルトの名無しさん:2010/10/16(土) 17:31:01
↑どういたしまして↑
279デフォルトの名無しさん:2010/10/16(土) 17:31:39
fgetsで取得した文字列(仮にlineとして)を char *tekitou = "nanchara-kanchara"みたいな他の文字列と結合したいんですけど
結合自体はstrcpyとかstrcatでいいとわかったんですが
その時メモリを動的に設定するにはどうしたらいいんでしょうか良いサンプルコードが載ったサイトなど教えてください
280デフォルトの名無しさん:2010/10/16(土) 17:31:45
↑さようなら↑
281デフォルトの名無しさん:2010/10/16(土) 17:36:42
↑ありがとうございます↑
282デフォルトの名無しさん:2010/10/16(土) 17:43:42
↑/→\↓/←\↑
283デフォルトの名無しさん:2010/10/16(土) 17:44:48
C言語で巨大整数を扱うのに適したライブラリは何ですか?
例えばNTL、GMP、LiDIAなどでJAVAみたいにBigIntegerのような
データ型が定義されて意識することなく塩山市などの計算が簡単に
出来るような処理系を探しています。
284デフォルトの名無しさん:2010/10/16(土) 17:48:50
C言語プログラマという生き方ではそういうのは自作することになっている
285デフォルトの名無しさん:2010/10/16(土) 17:54:53
逆に言えば、作ろうと思わない時点にCには向いてない。
もっとライブラリ豊富な言語に移行したほうがハッピーになれるよ。
286デフォルトの名無しさん:2010/10/16(土) 18:00:52
じゃあなんでみんな数論ライブラリ作ってるの?
287デフォルトの名無しさん:2010/10/16(土) 18:02:58
>>279
realloc() を使います。
http://codepad.org/igxPlgfy
288デフォルトの名無しさん:2010/10/16(土) 18:03:21
塩山市笑う。
Cでは演算子を再定義出来ないから、JAVAのBigIntegerのような事は出来ない。
したがって、どれを使っても大差は無い。むしろ、ライセンス条件が選択の鍵。
GMPをダイナミックリンクしとけばいいんじゃねーの。

http://ja.wikipedia.org/wiki/%E5%A4%9A%E5%80%8D%E9%95%B7%E6%95%B4%E6%95%B0#.E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA
289デフォルトの名無しさん:2010/10/16(土) 18:08:58
内部的に文字列で巨大整数を扱うような処理をカプセル化してライブラリ化すればいいだけじゃないの
290デフォルトの名無しさん:2010/10/16(土) 18:14:11
昔GCC2.95の頃はC++でIntegerという型があってよくそれを使ってました。
でも8000ビットを超えると計算結果が正しくなくなるというバグが
ありました。
その後に出てきたのがGMPでしたけど、使いにくいので使ってません。
291デフォルトの名無しさん:2010/10/16(土) 18:45:53
Rubyで作ってきた関数の便利さを生かしながら、性能の高速化を求める
にはJAVAに移植した方がいいのでしょうか。
292デフォルトの名無しさん:2010/10/16(土) 18:47:29
java はそのうち使うだけで oracle に請求されるようになります。
293デフォルトの名無しさん:2010/10/16(土) 18:59:57
windowsでsystem関数を使ってBATファイルを作りそれをスタートアップに登録させたいのですが
スタートアップのフォルダパス取得方法わかりません、教えてくれませんか。
294デフォルトの名無しさん:2010/10/16(土) 19:03:33
C:\Documents and Settings\<ユーザー名>\スタート メニュー\プログラム
295デフォルトの名無しさん:2010/10/16(土) 19:05:25
296デフォルトの名無しさん:2010/10/16(土) 19:10:21
>>293
SHGetSpecialFolderPath
297デフォルトの名無しさん:2010/10/16(土) 19:14:50
>>293
とても良い事を教えてあげよう。

http://www.google.comをWebブラウザで開いて、真ん中にあるテキストボックスに
「スタートアップフォルダ 取得」って入力して、その右の検索ボタンを押すんだ。
298デフォルトの名無しさん:2010/10/16(土) 19:17:10
いくら入門スレでもそこまで親切に教えるのはどうかと
299デフォルトの名無しさん:2010/10/16(土) 19:30:41
ちゃんとお礼言っとけよ
300デフォルトの名無しさん:2010/10/16(土) 19:41:43
ふっほっ
301デフォルトの名無しさん:2010/10/16(土) 19:44:30
ちゃんとお札貼っとけよ
302デフォルトの名無しさん:2010/10/16(土) 19:46:05
アリガタマキン ( ´∀`)ノ⌒ω)Д`)ブニュ
303デフォルトの名無しさん:2010/10/16(土) 22:15:56
(`・ω・´)シャキーン
304デフォルトの名無しさん:2010/10/16(土) 22:27:00
日本語とかの2バイト文字の1バイト目が128を超えることってありますか?
305デフォルトの名無しさん:2010/10/16(土) 22:29:43
ふつーにおきる
306デフォルトの名無しさん:2010/10/16(土) 22:33:25
VCならchar型は0〜255バイトまで表現できますけど、
VC以外のコンパイラで符号ありのchar型の場合は、
unsigned char型で読むべきなのでしょうか?
307デフォルトの名無しさん:2010/10/16(土) 22:34:43
VC++もデフォはcharはsingedだが?
308デフォルトの名無しさん:2010/10/16(土) 22:39:31
何をunsigned char型で読むべきかと質問しているのか?
309デフォルトの名無しさん:2010/10/16(土) 22:42:08
文字列リテラル "abc" のデフォルトの型の話? < VCで unsigned char
310デフォルトの名無しさん:2010/10/16(土) 22:44:40
VCってデフォってcharはunsignedじゃありませんでしたっけ?

主に2バイト文字を読むときはunsigned charで読むべきなのかと思いまして。。
311デフォルトの名無しさん:2010/10/16(土) 22:46:27
何のために/Jが有ると思ってんの
312デフォルトの名無しさん:2010/10/16(土) 22:56:38
何ですか。/Jって?
313デフォルトの名無しさん:2010/10/16(土) 23:21:28
/.Jならわかるんだけど
314デフォルトの名無しさん:2010/10/16(土) 23:23:19
わかるならべつにいいじゃん

なにもったいぶっちゃってんの
315デフォルトの名無しさん:2010/10/16(土) 23:24:27
ググれ無いバカには不要のものだよ
316デフォルトの名無しさん:2010/10/16(土) 23:40:53
/Jつけたら、unsignedになるんですね。

本題に戻りたいんですが、
日本語などの2バイト文字を読むには、unsigned charで読むべきなのでしょうか
317デフォルトの名無しさん:2010/10/16(土) 23:45:50
2バイトならwchar_tだろ
318デフォルトの名無しさん:2010/10/16(土) 23:47:22
>>317
最高にアホ
319デフォルトの名無しさん:2010/10/16(土) 23:58:55
2バイト文字ならwcharだろ。
多バイト文字は2バイトとは限らんよ。
つーか、Windows の場合は2バイト文字とマルチバイト文字はちゃんと区別されてるから、
普通は両対応させるためにマクロの TCHAR を使う。
リテラル文字列も生の "" を使ったりはしない。
まあ、出来てないゆとりも多いけどな。
320デフォルトの名無しさん:2010/10/17(日) 00:00:41
>>319
最高にアホ
321デフォルトの名無しさん:2010/10/17(日) 00:03:02
いえ、char型の時の話をしてるんですが。。。
322デフォルトの名無しさん:2010/10/17(日) 00:04:22
>>316
ビットの並びが先にある。
その値を文字として解釈させるなら符号に意味は無い。

つまり好きにしろってこと。
323デフォルトの名無しさん:2010/10/17(日) 00:05:52
だから2バイト文字つったら普通は UTF-16 とかだろ。
それを char で扱うのは良くない。
324デフォルトの名無しさん:2010/10/17(日) 00:10:31
最上位ビットが立ってて、符号有りだったらマイナスの値になるけど、
別に文字として解釈されるから、関係ないってことでいいですか?
325デフォルトの名無しさん:2010/10/17(日) 00:15:43
使い方による。
符号の扱いが違うんだから同じなわけがないだろ。
326デフォルトの名無しさん:2010/10/17(日) 00:17:17
問題ない
327デフォルトの名無しさん:2010/10/17(日) 00:17:36
英語以外ならUTF16がスタンダードだろ。
これが便利なのは間違いない。
328デフォルトの名無しさん:2010/10/17(日) 00:19:10
え?
329デフォルトの名無しさん:2010/10/17(日) 00:19:14
wchar関係が揃ってない環境が今だにあるもんで
330デフォルトの名無しさん:2010/10/17(日) 00:20:29
符号はプログラムが四則演算、比較ょするときにきいてくる。
文字列操作では関係無い。
331デフォルトの名無しさん:2010/10/17(日) 00:21:56
比較ょ
332デフォルトの名無しさん:2010/10/17(日) 00:25:28
>>327
同意。
だが俺は Shift-JIS を使い続ける。
333デフォルトの名無しさん:2010/10/17(日) 00:26:43
utf8のほうがいいだろ・・・
334デフォルトの名無しさん:2010/10/17(日) 00:27:29
まあ、なんとなく分かったんでよしとします。

どもありがとうございました。
335デフォルトの名無しさん:2010/10/17(日) 00:38:24
string型みたいなのがあったら、こんな疑問を持つ入門者も現れなかっただろうに。
何でcharacter型なのに符号付けちゃったのかね?
336デフォルトの名無しさん:2010/10/17(日) 00:41:19
>>333
プッ
あんなデータ間延びする形式ありがたがっちゃってんの?w
337デフォルトの名無しさん:2010/10/17(日) 00:44:38
文字を扱うには「char」
符号付きの小さい整数を扱うには「signed char」
符号なしの小さい整数を扱うには「unsigned char」
338デフォルトの名無しさん:2010/10/17(日) 00:45:49
>>336
で、サロゲートペアとか使っちゃうのw
339デフォルトの名無しさん:2010/10/17(日) 00:46:59
>>336
unicodeが16ビットで表現できると思ってるのか・・・
340デフォルトの名無しさん:2010/10/17(日) 00:48:31
そこでUTF-32の出番ですね
341デフォルトの名無しさん:2010/10/17(日) 00:52:12
そもそも unicode(笑) だろ。
342デフォルトの名無しさん:2010/10/17(日) 00:53:31
>>337
整数は int 使えよ。
343デフォルトの名無しさん:2010/10/17(日) 00:58:10
charと同じサイズのストレージで整数を扱いたい奴もいるだろ
344デフォルトの名無しさん:2010/10/17(日) 01:04:24
CJK統合漢字なんてアホなもの作らなければ、UTF-32が絶対神だったんだけどな。

まあ、いまさら、どうでもいいわ。
Unicodeが滅びるまでUTF-16でゴニョゴニョやればいいんじゃないの。
345デフォルトの名無しさん:2010/10/17(日) 01:10:33
UTF-32が一番いいんだろうけど。容量がな。
UTF8 よりUTF16 。UTF16 よりUTF32だろうけど。
英語圏で使う限りは、UTF32を主流にして良い事がない。
するとUTF8になってしまうな。多勢派。
346デフォルトの名無しさん:2010/10/17(日) 01:12:11
携帯も同じ事だな。
UTF8やUTF16より、容量食わないEUCやSJISを使う。
347デフォルトの名無しさん:2010/10/17(日) 01:15:39
容量(笑)
348デフォルトの名無しさん:2010/10/17(日) 01:21:22
EUCやSJISを使うのは、ガラパゴス技術者がガラパゴスミドルを使い続けるためだろ。
そういう連中が「容量」を言い訳にしてるのかもしれないが、容量は関係ない。
単なる既得権益者の妄言。
349デフォルトの名無しさん:2010/10/17(日) 01:29:22
いまさらeuc,sjisは日本語だけって制限あるからきつい
350デフォルトの名無しさん:2010/10/17(日) 01:30:21
美味い
351デフォルトの名無しさん:2010/10/17(日) 01:39:16
何がきついんだよw
日本語と、英語も使えるし充分だろ。
352デフォルトの名無しさん:2010/10/17(日) 01:42:03
君には充分なんだろうな
353デフォルトの名無しさん:2010/10/17(日) 02:00:17
キリルとギリシャも含んでるしな
アラビア、インドと中国を省く全世界の文字を網羅しているといっても過言じゃないな
354デフォルトの名無しさん:2010/10/17(日) 02:05:28
そこまで気にするんだったら超漢字OSを使うしかないな。
あれなら海外SF作品の言語から指輪物語エルフの文字まで網羅してるもんな。
355デフォルトの名無しさん:2010/10/17(日) 02:10:02
EUC、SJISはさっさと滅びろ。

こんなローカル文字コードに対応するのは時間の無駄以外の何物でもない。
356デフォルトの名無しさん:2010/10/17(日) 02:14:56
WEBに関してはSJIS,EUCは滅びて欲しい
357デフォルトの名無しさん:2010/10/17(日) 03:27:32
切り替えて使うISO-2022みたいのが正解だと思うんだけどな。
358デフォルトの名無しさん:2010/10/17(日) 11:01:40
>>319
教本を参考にしてVC++2008でscanf使おうとするとビルドで警告が出るのですが、
どういう記述にするのがWindowsの作法なんですか?

/*今警告の出る記述*
int res;
scanf("%d", &res)
359デフォルトの名無しさん:2010/10/17(日) 11:20:38
scanf_s
360デフォルトの名無しさん:2010/10/17(日) 11:21:51
>>358
Windowsの作法というかVC流としては scanf_s を使うんじゃね
http://msdn.microsoft.com/ja-jp/library/w40768et.aspx
非標準 (VCでしか使えないので他のコンパイラと互換性がない) だけどな
361デフォルトの名無しさん:2010/10/17(日) 11:36:40
>>359,360
アリガトウございます。
scanf_sにしないといけないのですね。やってみます。
362デフォルトの名無しさん:2010/10/17(日) 11:48:58
>>358
警告の文面はちゃんと読んだか?
Windows かどうかとは、あるいは VC かどうかとさえ関係ない内容だぞ

scanf_s を使えと言ってくるところだけが VC の癖で
あとは C の一般論だ
363デフォルトの名無しさん:2010/10/17(日) 12:15:32
>warning C4996:'scanf':This function or variable may be unsafe.
>Consider using scanf_s insted.
>To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
>See online help for details.

この警告の内容ってそういうことだったのですね・・・orz
scanf_sにしたら警告、消えました。
ありがとうございます。。
364デフォルトの名無しさん:2010/10/17(日) 12:21:53
>>257
C FAQって20年くらい前の情報だしな。
今はrand()ですむような用件ならrand()%Nで十分。
365デフォルトの名無しさん:2010/10/17(日) 12:31:39
>>345
32ビットでも8ビットでも結局一文字の長さは可変長なんで、
コードを書く立場からするとUTF32でもべつに楽になるわけじゃないし
なんでもいい感じ。
文字を16bitで扱ってる言語とかOSとかむしろ失敗な感じ。
8ビットのままでよかった。
366デフォルトの名無しさん:2010/10/17(日) 12:39:32
UTF32は固定長だろ
367デフォルトの名無しさん:2010/10/17(日) 12:42:17
>>366
結合文字があるから可変長。
368デフォルトの名無しさん:2010/10/17(日) 12:45:16
> warning C4996:'xxxx:This function or variable may be unsafe.
安全でない変数って例えば、どういうの?
369デフォルトの名無しさん:2010/10/17(日) 12:57:58
たとえば10文字しかないバッファに11文字以上入れようとしたり
370デフォルトの名無しさん:2010/10/17(日) 13:20:33
バッファサイズのチェックは実行時だから、それは違うと思う。
371デフォルトの名無しさん:2010/10/17(日) 13:21:59
scanf の %d には gets のような意味のリスクはない
372デフォルトの名無しさん:2010/10/17(日) 13:24:41
>>371
それ、誰へのレス?
373デフォルトの名無しさん:2010/10/17(日) 13:31:00
369
374デフォルトの名無しさん:2010/10/17(日) 13:33:12
ヘッダーで_CRT_INSECURE_DEPRECATE_GLOBALSで定義されてるのがそうかな。
timezoneとかがそれに該当するらしいけど、なんで危険なんだろう。
グローバル変数でマルチスレッドと相性悪いのはわかるけど。
375デフォルトの名無しさん:2010/10/17(日) 13:35:58
>セキュリティに関するメモ :
>scanf で文字列を読み取る場合は、書式が %s の桁数を必ず指定してください。
>たとえば、"%s" ではなく、"%32s" と指定します。指定しなかった場合は、入力の書式が正しく指定されず、
>バッファ オーバーランが発生しやすくなります。または、scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l または fgets の使用を検討してください。
376デフォルトの名無しさん:2010/10/17(日) 13:42:22
%dと%sは違うでしょ
377デフォルトの名無しさん:2010/10/17(日) 13:45:42
一々フォーマットの中身をみて%dと%sでワーニングの内容を変える訳ないだろ??
378デフォルトの名無しさん:2010/10/17(日) 13:49:03
M$「四の五の言わずに新しいの使っとけばいいんだよ」
379デフォルトの名無しさん:2010/10/17(日) 13:51:03
>>377
フォーマットと実際に渡すポインタの型が違うと警告出すコンパイラも
あるんで、ありえなくはない。
380デフォルトの名無しさん:2010/10/17(日) 13:52:15
381デフォルトの名無しさん:2010/10/17(日) 13:58:50
>>377
gccはフォーマット文字列に対して正しい引数が渡されてる事を見るよ。

>>380
新しいの使っても、%sにint渡すエラーは解消できない。
382デフォルトの名無しさん:2010/10/17(日) 14:02:48
>>371
あるだろ。char*を渡した場合とか。

char a[4];
scanf("%d", a+3);
383デフォルトの名無しさん:2010/10/17(日) 14:43:42
たとえば、すべてが2バイト固定長の文字コードの場合、
あAいIうUえEおO
という文字列なら、”あ”を読んだあと、2バイト先に”A”があり、さらに2バイト先に”い”があり、さらに2バイト先に”I”が記録されることになる。固定長なら。
これなら、単純に「一文字読む毎に、2バイトずつ進める」という簡単な動作だけで読めてしまう。だから簡単。

一文字が3バイト固定でも、4バイト固定でも、話は同じ感じになる。

4バイトで表現できる数字は、42億もあるので、これなら未来永劫、新文字などの割り当てスペースが足りないという問題は起こらないとおもう。
だから、4バイト固定長の文字コードがあっても良いのではないかなぁ…と個人的には思う。

UTF8の場合、文字コードのバイト長が可変なので、たとえば
あAいIうUえEおO
なら、”あ”を読んだあと、3バイト先に”A”があり、さらに1バイト先に”い”があり、さらに3バイト先に”I”が記録されることになる。可変長なので読むのがめんどくさい。
実はたいして難しいことはしてないのだけど、それでも、固定長を読むのよりは難しいと思う。難しいというか、めんどくさい。

文字コードの仕様の中に、可変長による圧縮効果を巧みに含めたって、仕方ないと思う。個人的に。
可変長にするための情報を、各文字に記録してるからこそ、可変長にできるわけで、その情報を記録する分だけ4バイト中で使えるビット数が少ない。
だからたとえば最大4バイトの可変長にしたとしても、その4バイトに記録できる文字種類は42億よりも少ない。
圧縮は、圧縮のそれでやればいいのであって、なにも文字コードの仕様の中に、結果的にデータが圧縮されるような巧みな仕組みを含めなくても良いとおもう。個人的に。
もしも通信量などを節約したいのならば、そういうデータ圧縮は、文字コードの仕様としては含めずに、別途、データ圧縮のそれに任せてしまえばいいと思う。

4バイト固定長のユニコードが普及してくれた方がありがたい。と思う。個人的に。なぜなら、その文字列はとても単純な構造の配列だろうから。書くのも読むのもずっと気軽で簡単だろうから。
384デフォルトの名無しさん:2010/10/17(日) 14:44:51
長いから4バイトにまとめろ
385デフォルトの名無しさん:2010/10/17(日) 14:46:49
無理
386デフォルトの名無しさん:2010/10/17(日) 14:56:18
長文ウザイ
読む気がしない
387デフォルトの名無しさん:2010/10/17(日) 14:58:59
長文読めない人間は文字コードの議論に参加しなくていいよ。お前らに関係ないから。
388デフォルトの名無しさん:2010/10/17(日) 15:00:07
unicodeの規格で結合文字が最大どのくらい結合されるのかしらないけど、
一文字を固定長にしたかったら、少なくとも百数十ビットになる。
389デフォルトの名無しさん:2010/10/17(日) 15:02:30
>>387
自分の言いたいことを短くまとめられない奴が言えるか?
390デフォルトの名無しさん:2010/10/17(日) 15:02:43
いまどき一文字が32ビットで収まると思ってるやつも参加しないほうがいいよ。
391デフォルトの名無しさん:2010/10/17(日) 15:03:44
>>388
その根拠は?
392デフォルトの名無しさん:2010/10/17(日) 15:04:33
>4バイトで表現できる数字は、42億もあるので、これなら未来永劫、新文字などの割り当てスペースが足りないという問題は起こらないとおもう。

初期のIPプロトコル設計者も同じような考えで失敗したわけだが。
393デフォルトの名無しさん:2010/10/17(日) 15:04:52
>>391
結合文字でググったら、一文字15バイトもあるって書いてあるページがあった。
394デフォルトの名無しさん:2010/10/17(日) 15:06:20
UnicodeとUTF-8の違いは? その2
http://hibari.2ch.net/test/read.cgi/tech/1274937437/

こっちでやれクズ共
395デフォルトの名無しさん:2010/10/17(日) 15:06:37
またバイトとビットの区別がついていない奴か
396393:2010/10/17(日) 15:08:05
>>391
http://www.bekkoame.ne.jp/~iimori/sw/UnicodeUtilsOSAX.html
よく読んだら15バイトってのは、UTF8でのバイト数だった。
でもこの有限会社とか、10バイトあるな。
397デフォルトの名無しさん:2010/10/17(日) 15:13:27
>>396
そこのサイト
書いた人間の性格の悪さがにじみ出るキモイ文章だな
398デフォルトの名無しさん:2010/10/17(日) 15:18:21
結合文字の「1文字」に必要なバイト数が多くなるのはUnicodeのせいではないだろw

Unicodeは結合文字の扱いを定義しているからそれを文字として表せるのであって、
他の文字コードで同様のことをやろうと思えば、同程度のバイト数と、別途結合文字を形成するためのロジックが必要になる。

そういう意味では、むしろ別途ロジックが必要にならないUnicodeの方が結合文字に必要なバイト数は少なくて済む、といえる。
399デフォルトの名無しさん:2010/10/17(日) 15:24:08
>>382
char a[4];
gets(a + 3);

こんなの gets が悪いんじゃない
400デフォルトの名無しさん:2010/10/17(日) 17:05:07
そもそも「1文字」の単位として byte があるんだから、
1 byte に納まりきらなかったなら byte の bit 幅の方を拡張するのが筋ってものだろう。
英語圏なら 8 ビットで充分だったからそうなってるだけだろ。
そんなもんそのまま受け入れる義理は無い。
ちゃんと1文字が 1 byte に入るように設計しろ。
401デフォルトの名無しさん:2010/10/17(日) 17:09:40
可変長で扱いやすい仕組みにすべきだったな
Unicodeは設計の根底部分が間違っている
402デフォルトの名無しさん:2010/10/17(日) 17:14:16
UTF-8は可変長で扱いやすいが?
403デフォルトの名無しさん:2010/10/17(日) 17:19:14
UTF-8はエンコーディングだ
もっともUTF-8が無けりゃUnicodeは死んでいた
それなら元から可変長前提にしていれば良かったってこと
404デフォルトの名無しさん:2010/10/17(日) 17:22:42
可変長前提で作るなら文字列ベースのバイナリフォーマットで定義すればいいのに
ジジイの思考は無駄が多いよねー
405デフォルトの名無しさん:2010/10/17(日) 17:26:09
>>403
は?
じゃあ、文字集合のUCS-4に何か問題があるのか?
可変長にするまでもなく、まだまだ文字を増やす余地があるのだが。

そもそも文字集合はエンコーディングを前提とするものだろう。
お前が何を可変長前提にしていればよかったと言っているのか全くわからん。
406デフォルトの名無しさん:2010/10/17(日) 17:29:07
わからんならレスしなくてもいいよ
407デフォルトの名無しさん:2010/10/17(日) 17:31:22
そうだな。>>403のトンチンカンな書き込みに反応したのは正直無駄だった。
408デフォルトの名無しさん:2010/10/17(日) 17:34:29
自分が立てたスレに帰れよ。

文字コードの種類は何故複数あるのでしょうか?
http://hibari.2ch.net/test/read.cgi/tech/1093251312/
409デフォルトの名無しさん:2010/10/17(日) 17:39:57
Cで書いたプログラムを他の人も
起動できるようにするには如何すれば良いんですか?
あとソースを書くときにはVisual C++ 2010を使ってます。
410デフォルトの名無しさん:2010/10/17(日) 17:41:24
他の人が起動できなくする方が難しいと思う。
411デフォルトの名無しさん:2010/10/17(日) 17:43:27
>>410
MSVCR100.dll が見つからなかったため、このアプリケーションを
開始できませんでした。アプリケーションをインストールし直すと
この問題は解決される場合があります。

と出て他の人は起動できないらしいです
412デフォルトの名無しさん:2010/10/17(日) 17:46:29
413デフォルトの名無しさん:2010/10/17(日) 17:46:52
MSVCR100.dll が何なのかは調べたのか?
414デフォルトの名無しさん:2010/10/17(日) 17:47:21
>>412
了解です。ありがとうございます。
415デフォルトの名無しさん:2010/10/17(日) 17:49:59
>>409
RCの設定を
/MD(/MDd)から/MT(/MTd)に変更すれば
ランタイムインストールして貰わなくても動くよ
416デフォルトの名無しさん:2010/10/17(日) 18:06:16
デバッグビルドは放流しちゃダメ〜
417デフォルトの名無しさん:2010/10/17(日) 18:14:06
>>415
できました!ありがとうございます
418393:2010/10/17(日) 20:52:43
>>398
まあ、いい悪いの話じゃなくて、一文字を固定長にしてどうこうみたいな
話は成り立たないねって話。

>>400
文字列の操作を、バイトとかビットとか意識しないで扱えるようにするほうが
いいだろうね。
419デフォルトの名無しさん:2010/10/17(日) 20:59:57
だから、文字コードの1文字のバイト数の議論に、統合文字を出すのがおかしいって話だろ。
420393:2010/10/17(日) 21:04:08
>>419
おかしくはないよ。
途中でぶった切れないんだから、一文字として扱わないと。

C#とかちゃんと一文字としてあつかってる。
421デフォルトの名無しさん:2010/10/17(日) 21:08:53
だから他のスレでやれっつってんだろーが
422デフォルトの名無しさん:2010/10/17(日) 21:10:26
>>420
おk。
お前とは話が噛み合わないみたい。
423393:2010/10/17(日) 21:15:20
そもそも一文字32ビットにすれば、処理が単純になっていいよねって話なんでしょ。

で、結合文字があるから結局マルチバイトのエンコーディングの文字列と
処理の手間は変わらない、一文字一バイトでいいよって反論。

それに結合文字は関係ないって言ってもしょうがない。
実際の処理で無視できないんだから。
424デフォルトの名無しさん:2010/10/17(日) 21:18:08
ホントに人の話を聞かない奴らだな。
文字コードの話は専用のスレがあるんだからそこでやれ。
言ってる意味わかるか?
そこでやれ。
425393:2010/10/17(日) 21:22:41
>>424
単に無視されてるって気づけよ。
426デフォルトの名無しさん:2010/10/17(日) 21:23:07
ワンセグに対応しない携帯電話があっていいように、統合文字に対応しない文字処理系も当然ある。

統合文字に対応しなければUnicodeのエンコーディングは基本的に高々4バイトだ。
427デフォルトの名無しさん:2010/10/17(日) 21:27:22
誘導

文字コード総合スレ part6
http://hibari.2ch.net/test/read.cgi/tech/1278923059/
428デフォルトの名無しさん:2010/10/17(日) 21:28:29
ふひょっ
429393:2010/10/17(日) 21:29:21
>>426
ま、個々のアプリとかシステムなら、入ってるときに結合文字ははじいて
中身は32ビット固定で処理するとかありかもな。
でも上のほうで32ビットにすればいいって言ってたやつはそういう意味じゃ
なかっただろ。

俺の働いてるようなITドカタの現場だとサロゲートペアにさえ対応しない。
その意味じゃ16ビットでも十分だな。
430デフォルトの名無しさん:2010/10/17(日) 21:30:26
文字コード総合スレ part6
http://hibari.2ch.net/test/read.cgi/tech/1278923059/
431393:2010/10/17(日) 21:32:07
でも、一文字32ビットで処理してる処理系ってあんまりなさそうだし、
わざわざ一文字32ビットの処理を手作りしてサロゲートペアのみ対応って
中途半端だな。
432デフォルトの名無しさん:2010/10/17(日) 21:33:03
>>431
死ね
お前が存在することなんて誰も望んでないから
喜んでくたばれ
433デフォルトの名無しさん:2010/10/17(日) 21:33:35
 
434デフォルトの名無しさん:2010/10/17(日) 21:34:26
だから、UTF-8でいいって。

EUC、SJISは滅びろ。
435デフォルトの名無しさん:2010/10/17(日) 21:41:55
だから、UTF-8でいいって。

EUC、SJISは滅びろ。
436デフォルトの名無しさん:2010/10/17(日) 21:43:04
だから、UTF-8でいいって。

EUC、SJISは滅びろ。
437デフォルトの名無しさん:2010/10/17(日) 21:43:11
大事なことなので2回言いました。
438デフォルトの名無しさん:2010/10/17(日) 21:44:17
大事なことなので2回言いました。
439デフォルトの名無しさん:2010/10/17(日) 21:53:03
UTF-8 が日本で流行ることは無いだろう。
無駄すぎる。
440デフォルトの名無しさん:2010/10/17(日) 21:54:47
国内のユニコードで一番のシェアはUTF8だろ。
unixの標準もこれだろ。
441デフォルトの名無しさん:2010/10/17(日) 21:57:32
だからスレチだとry
442デフォルトの名無しさん:2010/10/17(日) 22:05:06
何が無駄なのか。意味不明。

そもそも、既にUTF-8は流行ってるし。
443デフォルトの名無しさん:2010/10/17(日) 22:06:43
トリップつけてくんない?
444デフォルトの名無しさん:2010/10/17(日) 22:07:04
データ量が肥大するだろ。
なんで英語圏の連中の都合に合わせて窮屈な思いしなきゃならんのだ。
445デフォルトの名無しさん:2010/10/17(日) 22:09:08
>>444
トリつけろクズ
446デフォルトの名無しさん:2010/10/17(日) 22:09:18
>>444
お前は今すぐ画像非表示にして、Youtubeとニコ動には絶対アクセスするな。
447デフォルトの名無しさん:2010/10/17(日) 22:10:34
標準入力から一文字単位に読み、0から256までの値がそれぞれ何回
出てきたかという回数を標準出力に出力するプログラムなのですが

#include <stdio.h>

#define MAXCHAR 256

main()
{
int count[MAXCHAR];
int c;
int i;

for (i = 0; i < MAXCHAR; i++)
count[i] = 0;
while ((c = getchar()) != EOF)
count[c]++;
  for (i = 0; i < MAXCHAR; i++)
printf("%d: %d\n", i, count[i]);
}
エラーが出てしまいました。どこが間違っているんですか
448デフォルトの名無しさん:2010/10/17(日) 22:14:37
とりあえず、{}をきちんとつけよう
449393:2010/10/17(日) 22:15:06
そのうちUTF-8に収束しそうだけど、ITドカタとか異様にSJISとかEUC好きがいるからな。
450デフォルトの名無しさん:2010/10/17(日) 22:16:03
>>447
エラーが出たならそれ貼れよ。
451デフォルトの名無しさん:2010/10/17(日) 22:16:47
>>447
全角スペース入ってるよ。
452デフォルトの名無しさん:2010/10/17(日) 22:20:56
>>447
0から256って段階でイヤな感じの問題だな。
453デフォルトの名無しさん:2010/10/17(日) 22:24:36
>>447
return 0; とかがないからじゃないの。

main()って書いても、実際は int main(void) なんでしょ。
454デフォルトの名無しさん:2010/10/17(日) 22:28:20
それは警告出るだけじゃね
455デフォルトの名無しさん:2010/10/17(日) 22:30:36
警告のことをエラーって言ってる可能性もあるな。
456デフォルトの名無しさん:2010/10/17(日) 22:44:53
>>447です
警告もでますがエラーもでました 
>>451場所を教えてくれると助かります
457デフォルトの名無しさん:2010/10/17(日) 22:45:40
>>447
全角スペースを抜いたら、私の環境ではちゃんとうごきました。
458デフォルトの名無しさん:2010/10/17(日) 22:46:06
>>456
一箇所だけ不自然にインデントが入ってるところ。
459デフォルトの名無しさん:2010/10/17(日) 22:48:30
>>456
count[c]++;
  for (i = 0; i < MAXCHAR; i++) <---- この行の頭に二つ
printf("%d: %d\n", i, count[i]);
460デフォルトの名無しさん:2010/10/17(日) 22:48:31
エディタに何を使ってるのかしらんが、今すぐ全角スペースを表示する設定に変えるべき
461デフォルトの名無しさん:2010/10/17(日) 22:48:48
そういうミスするならインデントしてくれるエディタ使え
462デフォルトの名無しさん:2010/10/17(日) 22:48:51
全角スペースを可視化するエディタ使え
463デフォルトの名無しさん:2010/10/17(日) 22:54:55
インデントはTabキーだろ
464デフォルトの名無しさん:2010/10/17(日) 22:58:51
CP437を使え。
465デフォルトの名無しさん:2010/10/17(日) 22:59:19
ありがとうございます
>>462->>463
メモ帳でソースファイルを作成しています。エディタでいいの教えてください
466デフォルトの名無しさん:2010/10/17(日) 23:00:03
467デフォルトの名無しさん:2010/10/17(日) 23:00:50
VimとかEmacsとか勧める奴
468デフォルトの名無しさん:2010/10/17(日) 23:01:49
469デフォルトの名無しさん:2010/10/17(日) 23:03:59
「入門vi」は分かりやすい
470デフォルトの名無しさん:2010/10/17(日) 23:04:23
471デフォルトの名無しさん:2010/10/17(日) 23:04:31
エディタじゃなくて文字セットを変えろっての。
バックスラッシュ表示できないと不便だろ。
??/ みたいに書かないといけないから面倒だし。
472デフォルトの名無しさん:2010/10/17(日) 23:04:33
ども みんな頼りになります
473デフォルトの名無しさん:2010/10/17(日) 23:06:49
バックスラッシュと同じコードポイントで文字が表示されない文字セットなんてあるの?
474デフォルトの名無しさん:2010/10/17(日) 23:07:58
475デフォルトの名無しさん:2010/10/17(日) 23:09:49
便意があるのに便が出ません。
どうすればいいですか?
476デフォルトの名無しさん:2010/10/17(日) 23:13:48
便秘薬でも飲めば
477デフォルトの名無しさん:2010/10/17(日) 23:13:54
それは便秘です
478デフォルトの名無しさん:2010/10/17(日) 23:15:08
ラジヲ体操
・からだを横にまげる運動
・からだをねじる運動

をシツコク行います。
479デフォルトの名無しさん:2010/10/17(日) 23:42:32
てっとりばやく浣腸で。
480デフォルトの名無しさん:2010/10/17(日) 23:48:31
エディターなら EDLIN 使えよ。色々と捲るぞ。
481デフォルトの名無しさん:2010/10/17(日) 23:56:41
ネタにもならん
482デフォルトの名無しさん:2010/10/18(月) 00:11:57
みんなでエディターつくってあげれば?
C言語で。
初心者向けのいい講座になるでしょう。
483デフォルトの名無しさん:2010/10/18(月) 00:13:06
スレ違い
484デフォルトの名無しさん:2010/10/18(月) 00:13:15
エディタが初心者向け?
485デフォルトの名無しさん:2010/10/18(月) 00:16:24
エディタはハッカーが作らないとさ
486デフォルトの名無しさん:2010/10/18(月) 00:19:17
きゅきゅっ
487デフォルトの名無しさん:2010/10/18(月) 00:21:48
連結リストとかギャップバッファとかやるのかね
EDITコントロール貼り付けるだけじゃだめか?
488デフォルトの名無しさん:2010/10/18(月) 00:32:09
そんなの誰が使うんだよ
489デフォルトの名無しさん:2010/10/18(月) 00:41:33
>>484
題材としては初心者向けだよ。
490デフォルトの名無しさん:2010/10/18(月) 00:43:14
>>489
え?
491デフォルトの名無しさん:2010/10/18(月) 00:48:24
DOS窓で使うCUIのエディタを作るのは覚えて一年くらいの人には良い勉強かも知れないね
まぁ使い物になるモノはできないだろうけど
492デフォルトの名無しさん:2010/10/18(月) 00:49:14
>>489
必要になるアルゴリズムを列挙してみなよ
できるならねw
493デフォルトの名無しさん:2010/10/18(月) 00:52:04
>>492<-誰かこいつのバカさ加減をとめてくれないか?
アルゴリズムだとさ、笑い過ぎて腹痛い。
494デフォルトの名無しさん:2010/10/18(月) 00:54:04
流れをブッタ切って本当に悪いんだが…
俺は専門学校に通っていて、周りはC、C++をあまりやらずに
ゲームプログラミングをしている。俺は意味も分からないまま
プログラミングをするのが嫌だから、CとC++の本を読んで
勉強しているんだけど…このままじゃダメなのかな…
クラスの人たちは何だかんだで3Dゲーム(学校のライブラリを使っている)
を作ったりしてるし、凄い置いていかれた気分になってしまった…
495デフォルトの名無しさん:2010/10/18(月) 00:56:04
C++がわからないのに3Dのゲーム作れるはずがないだろ
496デフォルトの名無しさん:2010/10/18(月) 00:56:54
>>494
ダメだな。だいたい空気読めないみたいだし。
むいてないよ。やめたら?
497デフォルトの名無しさん:2010/10/18(月) 00:57:23
基礎の無いままで何を積み上げても無意味だよ。
498デフォルトの名無しさん:2010/10/18(月) 00:57:37
>>494
はったりの世界でもあるからとりあえずなんか作ることも必要。
クラスの連中がやってることは軽くこなした上で
基礎を追い求めるくらいの意気込みが必要。
499デフォルトの名無しさん:2010/10/18(月) 00:58:14
C++もゲームプログラミングも両方やらないと駄目に決まってるだろ
500デフォルトの名無しさん:2010/10/18(月) 00:59:54
>>494
専門学校ではほとんど学校側がソースコードを組んであって
ほんの少しパラメータを弄ったりしているだけという書き込みを見たことがある

それが本当ならツクールを弄ってるのと変わらないだろうから焦る必要は全く無い
501デフォルトの名無しさん:2010/10/18(月) 01:00:11
>>494
つうかその話をここで続けるつもりならコテつけてくれないかな
502デフォルトの名無しさん:2010/10/18(月) 01:00:18
一番いらないのがC++だな。
基礎と3Dはやったほうがいい。
正直専門やゲーム会社新卒レベルのC++なんてひどいもん。
503デフォルトの名無しさん:2010/10/18(月) 01:02:03
あと実践踏まないで基礎など理解できるわけもない。
504デフォルトの名無しさん:2010/10/18(月) 01:02:11
Cを習得する+3Dゲームを1から作る
を1年で出来ないなら辞めちまえ
505デフォルトの名無しさん:2010/10/18(月) 01:03:02
やっぱり面接でFizzBuzzするべき?
506デフォルトの名無しさん:2010/10/18(月) 01:03:20
C++いらないとかヤバいだろ
クラスを使わずC言語のみで開発するのか
507デフォルトの名無しさん:2010/10/18(月) 01:03:51
C++のまえにメモリ管理やポインタすら怪しいやつが多すぎだから
508デフォルトの名無しさん:2010/10/18(月) 01:04:31
釣りだから。ヤベーお前らバカじゃね?マジレスしてんじゃねーよ!
笑うっっw
509デフォルトの名無しさん:2010/10/18(月) 01:04:56
動作のコストは掛かるかもしれないが。
とりあえず動かすという観点でSTLは使えるだろ
C言語で文字列操作、動的なメモリ確保したら多くのコードがいるぞ。
510デフォルトの名無しさん:2010/10/18(月) 01:05:37
そんなレベルじゃ仕事のコードは書かせられない。
511デフォルトの名無しさん:2010/10/18(月) 01:13:54
STLやC++が禁止でない限りは、
使った方が成果/労働の比率は良くなるだろうって事。
STLがもしボトルネックでも完成後にパフォーマンス調べられるし。
512デフォルトの名無しさん:2010/10/18(月) 01:21:09
仕様

le ファイル名 ins 10 3 A
で、ファイルの10行目、3文字目に、文字Aを挿入する。
例:ABCD → ABACD

le ファイル名 clear 10 3
で、ファイルの10行目、3文字目の文字を切り取って消去する。
例:ABCD → ABD


le をできる限り短い行数で実装せよ。ただしlibc以外のライブラリを使用してはならない。
513デフォルトの名無しさん:2010/10/18(月) 01:25:04
行数か
あんまりいい指標じゃないと思うんだが
514デフォルトの名無しさん:2010/10/18(月) 01:26:09
じゃあバイト数で
515デフォルトの名無しさん:2010/10/18(月) 01:26:52
;で一行とカウント。
516デフォルトの名無しさん:2010/10/18(月) 01:29:34
494です。わざわざ俺なんかのためにレスしてくれてありがとう!
凄いやる気が出たよ!これからは両方頑張ってみます!
本当にありがとう!!
517デフォルトの名無しさん:2010/10/18(月) 01:29:52
つまらん。
もう寝るワ
518デフォルトの名無しさん:2010/10/18(月) 01:55:12
とりあえず書いてみたが、俺ももう寝る
http://codepad.org/31P3pvVG
519デフォルトの名無しさん:2010/10/18(月) 10:33:26
スレ違いっつーか板違い。マ板でやれ。
520デフォルトの名無しさん:2010/10/18(月) 14:10:49
うひゃー。くまちゃんだよー☆
521デフォルトの名無しさん:2010/10/18(月) 14:56:01
楕円曲線の計算なのですが、アフィン座標から射影座標に変換すると
正しく位数が計算されません。正確には無限遠点の数が変わってしまいます。
スレ違いかもしれませんが知っている人がいたらどうすればいいのか
教えてください。
522デフォルトの名無しさん:2010/10/18(月) 14:59:22
ポインタ型にconstをつけると、値は参照できるけど、
変更できなくなるってことでいいですか?
523デフォルトの名無しさん:2010/10/18(月) 14:59:59
適切なスレに行けばいいと思います。
524デフォルトの名無しさん:2010/10/18(月) 15:00:40
急いでるから早くしてほしいです。
525デフォルトの名無しさん:2010/10/18(月) 15:00:45
>>522
どこにconstをつけるかで異なります。
526デフォルトの名無しさん:2010/10/18(月) 15:04:16
>>521
自分のあなるにおちんちんを入れればわかるよ
527デフォルトの名無しさん:2010/10/18(月) 15:05:05
const int* test
これならどうなりますか?
528デフォルトの名無しさん:2010/10/18(月) 15:08:13
constなintを指すtest
529デフォルトの名無しさん:2010/10/18(月) 15:17:49
ではそのようにすれば、testが指し示す値を書きかえれなくなるってことで
いいでしょうか?
530デフォルトの名無しさん:2010/10/18(月) 15:24:49
× アナル
○ アヌス
531デフォルトの名無しさん:2010/10/18(月) 15:39:35
ローマ神話の出入り口と扉の神。前後2つの顔を持つのが特徴である。
532デフォルトの名無しさん:2010/10/18(月) 15:46:27
C言語でオンラインFPSゲームのチートを作りたいのですが・・・

どこから何をやればいいのか全くわかりません・・・

誰か教えてください
533デフォルトの名無しさん:2010/10/18(月) 15:49:51
>>532
>ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
534デフォルトの名無しさん:2010/10/18(月) 15:59:13
535デフォルトの名無しさん:2010/10/18(月) 18:21:52
チートは「ウイルス、ハッキング・クラッキング」のいずれでもない。
風紀委員死ね。
536デフォルトの名無しさん:2010/10/18(月) 18:30:30
>>535
鼬害。
537デフォルトの名無しさん:2010/10/18(月) 18:45:55
>>535
残念ながらチートはハッキング・クラッキングに入る.
538デフォルトの名無しさん:2010/10/18(月) 19:10:32
539デフォルトの名無しさん:2010/10/18(月) 19:49:49
>>537
入らねーよ。カス。
540デフォルトの名無しさん:2010/10/18(月) 19:58:03
>>539
実行中のプログラムに他のプログラムから干渉してデータの改ざんを行うんだから
クラッキングには入りそうだけどな
つかオンラインゲームのFPSのチートとかになると運営側のサーバーをクラックしないとできないんじゃね?
541デフォルトの名無しさん:2010/10/18(月) 20:09:11
例えば聖剣で敵に回復魔法かけてオーバーフローさせる手があったね。
あれはチート(ズル)に入ると思うけど、別に問題ない気がする。

そのゲームの利用規約に書いてある筈だよ。
クラッキングとかチート以前に、規約違反ってことになると思う。
その規約違反の種類がクラックだのチートってことでしょ。

昔クラック用サーバというのがあって、クラックして進入してよい、としてある。
進入したら、その脆弱部分を教えてもらって、セキュリティに役立てるとかするわけ。
今も探せばあるかもしれん。
542デフォルトの名無しさん:2010/10/18(月) 20:41:05
> 実行中のプログラムに他のプログラムから干渉してデータの改ざんを行うんだから
> クラッキングには入りそうだけどな
バカ言え。アンチウイルスもそういうプログラムだが、クラッキングか?
543デフォルトの名無しさん:2010/10/18(月) 20:42:31
クラッキングとハッキングは違う
チートとグリッチ(バグ利用)は違う
544デフォルトの名無しさん:2010/10/18(月) 20:55:18
それらはいずれも「現象」ではなく「行為」を指す言葉だ。
すなわち、それを行う目的によって変わる。
トロイの木馬はリモートサーバーにもなるし、ファイアーウォールはマルウェアにもなる。

んでスレ違いだからどっか行け。
545デフォルトの名無しさん:2010/10/18(月) 22:17:31
このプログラムを実行したら、
bb
aa
10, 10
と表示されました。
なんでaa, bbの順じゃないですか。
どういう仕組みでこういう順番になってますか。

#include <stdio.h>

int main()
{
printf("%d, %d\n", puts("aa"), puts("bb"));
return 0;
}
546デフォルトの名無しさん:2010/10/18(月) 22:23:06
>>545
実装の都合で。
547デフォルトの名無しさん:2010/10/18(月) 22:28:37
実装が最適化できるように、関数引数をどういう順序で評価するかは決まってない
aa bbでもbb aaでも仕様通り。そういうのに依存したコードは書いちゃダメ
548デフォルトの名無しさん:2010/10/18(月) 22:40:20
引数が評価される順序は未定義
549デフォルトの名無しさん:2010/10/18(月) 22:55:26
可変長引数はスタックにどの型の値が何個詰まれたかわからないんで、
フォーマット文字列がスタックの一番上に詰まれるようになってる。
(フォーマットを見て、値が何個つまれてるか判断する)
それで右側から評価されてる。
550デフォルトの名無しさん:2010/10/18(月) 22:57:07
規格の話をしているときに実装の話を持ち出す奴
551デフォルトの名無しさん:2010/10/18(月) 23:04:50
>>550
なんかまずいの?
規格ではこうで、>>545の現象はこういうことでって説明で別に問題ないと思うけど。
552デフォルトの名無しさん:2010/10/18(月) 23:16:09
>>549
コンパイル時に型も個数も分かっているからどうとでもなるよ
553デフォルトの名無しさん:2010/10/18(月) 23:16:25
>>549
実装考えたらそうだね
逆に aa->bb の順で処理するのは面倒くさそうだ

スタックに引数が右から積まれるのって規格だっけ?(PASCAL型とかの例外が今は有るけど)
だとするならば引数は右から評価されるってのも規格の一部と言える気もする
554デフォルトの名無しさん:2010/10/18(月) 23:17:46
>>552
呼び出された側のコンパイル時に決定してないだろアホか?
555デフォルトの名無しさん:2010/10/18(月) 23:18:50
>>554
アホはお前だろw
556デフォルトの名無しさん:2010/10/18(月) 23:21:00
>>552
どうとでもなるけど、まあ、よくある実装の例を出しただけだよ。
557デフォルトの名無しさん:2010/10/18(月) 23:21:33
>>553
C言語の規定にスタックなんぞ無い
それはCPUの都合だ
558デフォルトの名無しさん:2010/10/18(月) 23:33:32
>>548 未定義でなく不定
559デフォルトの名無しさん:2010/10/18(月) 23:34:03
>>552
どうにもならない。呼び出され側はコンパイル時点で呼び出し側の個数も型もわからない。
560デフォルトの名無しさん:2010/10/18(月) 23:34:54
第一引数でおしえてあげないといけない。
561デフォルトの名無しさん:2010/10/18(月) 23:36:03
>>559
加算も出来ないCPUなんて使ってるのかよw
562デフォルトの名無しさん:2010/10/18(月) 23:52:10
分割コンパイルとかしたことないのけ
563デフォルトの名無しさん:2010/10/18(月) 23:55:07
呼び出され側がどうこう言ってる奴がおかしいだけ
564デフォルトの名無しさん:2010/10/18(月) 23:59:44
>>559 Cでは無理だけど、最近の言語だと、カリー化で解決できたりするね
565デフォルトの名無しさん:2010/10/19(火) 00:06:03
>>564
そんなことはないよ
スタックに積むってのは特別な事じゃない
特定箇所に値を書き込んでスタックポインタを進めているだけだから
SP+8 に書き込みとかで簡単に実現できる
566デフォルトの名無しさん:2010/10/19(火) 00:11:23
x64ではスタックには乗せないのだ。
567デフォルトの名無しさん:2010/10/19(火) 00:13:35
>>566
stdcall でも乗せないの?
568デフォルトの名無しさん:2010/10/19(火) 00:21:50
レジスタ渡しでも、可変長の時は呼び出された方でスタックに積んでるんじゃないの?
gccでそういう事してるの見たことあるよ。
569デフォルトの名無しさん:2010/10/19(火) 01:18:06
仕事でもないのにこんな時間までバグ取りしてやっと終わった。
アフィン座標と射影座標では無限遠点の表現が違っていて、判定条件を
知らないまま2日無駄にした。
570デフォルトの名無しさん:2010/10/19(火) 05:55:48
入門者にお薦めのCPPは何がありますか?
571デフォルトの名無しさん:2010/10/19(火) 05:58:33
ない
572Perl忍者 ◆M5ZWRnXOj6 :2010/10/19(火) 09:46:38
まだこのウンコスレあったの





















きも
573デフォルトの名無しさん:2010/10/19(火) 10:30:35
お前が立てた「Perl忍者です Perlプログラマになりたいです」
とかいうスレより遥かにまし

ttp://hibari.2ch.net/test/read.cgi/tech/1284704280/l50

こっちはマジで気持ち悪い
574デフォルトの名無しさん:2010/10/19(火) 12:27:33
教えてほしいです。
JAVAからJNIの仕組みを利用してCのI/Fを使おうとしています。JAVA側から引数でint型で1を渡そうとしていますが受け取るC側でint型の1と認識できますか?

575デフォルトの名無しさん:2010/10/19(火) 15:07:11
>>574
JNI で自動生成されるヘッダを正しく使うなら可能
多分ヘッダでは long になってると思うけどw
576デフォルトの名無しさん:2010/10/19(火) 20:20:58
>>572
http://cruel.org/freeware/hacker.html
>ハンドル名にまつわる問題については、もうちょっと詳しく書いておきましょうか。ハンドルの陰にアイデンティティを隠すのは、クラッカーや、warez d00dz や、他の下等な生の形態に特徴的な、子どもじみた愚かな行動です
577デフォルトの名無しさん:2010/10/19(火) 20:38:58
>>576
なんなの、この人は
578デフォルトの名無しさん:2010/10/19(火) 21:31:10
#include <stdio.h>

int main(void)
{
printf("ああああああああ\tあああ\n");
printf("ああああ\tああああああああ\n");
return 0;
}

揃わないんですけどどう解決したらいいですか?
579デフォルトの名無しさん:2010/10/19(火) 21:33:00
>>578
なにが揃わないの?
580デフォルトの名無しさん:2010/10/19(火) 21:35:51
文字コード変えてみろ。
581デフォルトの名無しさん:2010/10/19(火) 21:36:23
そもそも「あ」の数が違うんですけど
582デフォルトの名無しさん:2010/10/19(火) 21:37:56
TABはそういう風に使うもんじゃねえから
583デフォルトの名無しさん:2010/10/19(火) 21:40:46
8字以上は揃わない
584デフォルトの名無しさん:2010/10/19(火) 21:47:42
いや差が4字以上でしょ?
585デフォルトの名無しさん:2010/10/19(火) 21:52:25
ああああああああ    あああ
ああああ        ああああああああ

こんな感じの出力を期待してるのかね。
586デフォルトの名無しさん:2010/10/19(火) 21:54:34
荒らしツール僕も作りたいです
587デフォルトの名無しさん:2010/10/19(火) 21:57:43
\tは最大で4字分のインデントを入れるそれ以上必要なら\t\tとかにする
588デフォルトの名無しさん:2010/10/19(火) 22:00:51
このスレレベル低いね
589デフォルトの名無しさん:2010/10/19(火) 22:01:05
お前に合わせてやってんだろ
590デフォルトの名無しさん:2010/10/19(火) 22:03:25
まじで分からないわけじゃなくてかまって欲しくて、変な質問してるんだろ?
591デフォルトの名無しさん:2010/10/19(火) 22:05:14
>>578
ありがとうございます
解決しました
592デフォルトの名無しさん:2010/10/19(火) 22:06:31
ここまで俺の自演
593デフォルトの名無しさん:2010/10/19(火) 22:24:47
エラー直してください
今から二回に分けて貼ります

/*
* cat3 ファイルを連結して出力
* パラエータがないときには標準入力を処理
*/
#include <stdio.h>
#include <stdlib.h>


void do_one(FILE *);
void cant(char *);

main(int argc, char **argv)
{
FILE *fp;

--argc; /* argv[0]の分だけ減らす*/
++argv; /* argv[0]を読み飛ばす*/
if (argc == 0) /* パラメータ無し */
do_one(stdin);/*標準入力を処理*/
else{
while (argc--){
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
594デフォルトの名無しさん:2010/10/19(火) 22:27:02
>>593のつづき 



argv++;
}
}
return (0);
}


void do_one(FILE *fp)
{
int c;


while ((c = fgetc(fp)) != EOF)
fputc(c,stdout);
}



void cant(char *name)
{

fprintf(stderr,
"can't open %s\n",name);
exit(1);
}
595デフォルトの名無しさん:2010/10/19(火) 22:29:33
安価越しに見ても揃ってないし、codepadとかで上げればいいのに
596デフォルトの名無しさん:2010/10/19(火) 22:34:19
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
>>>> else {
do_one(fp);
fclose(fp);
>>>> }
597デフォルトの名無しさん:2010/10/19(火) 22:34:32
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  char cmd[100];
  int cnt = 0;
  while(0 < --argc){
    sprintf(cmd, "cat %s\0", argv[++cnt]);
    system(cmd);
  }
  return 0;
}
598デフォルトの名無しさん:2010/10/19(火) 22:41:28
>>596
exit()で終わってるから、それは関係ないだろ。
599デフォルトの名無しさん:2010/10/19(火) 22:43:08
>>595 http://codepad.org/H27oGOqh
 初めて使ったよ
600デフォルトの名無しさん:2010/10/19(火) 22:46:45
>>599
20行目、ふいた。
601デフォルトの名無しさん:2010/10/19(火) 22:50:57
602デフォルトの名無しさん:2010/10/19(火) 22:52:05
なんっで、そーなるのっ!
603デフォルトの名無しさん:2010/10/19(火) 22:52:17
}ねえじゃん
604デフォルトの名無しさん:2010/10/19(火) 22:52:28
せめてコンパイルの通るソースを出せww
605デフォルトの名無しさん:2010/10/19(火) 22:54:39
なんで>>593-594 に改変いれてバグってんだ。
606デフォルトの名無しさん:2010/10/19(火) 22:56:08
>>593-594は動くはずだが、何をもってエラーと言っているのだ?
607デフォルトの名無しさん:2010/10/19(火) 22:56:36
おかしいな 教科書のとおりなんです
 エディタもメリーつかってるんですが
608デフォルトの名無しさん:2010/10/19(火) 23:00:06
エラーか警告のメッセージも貼れや
609デフォルトの名無しさん:2010/10/19(火) 23:00:18
このスレに貼ったコードは、とりあえずコンパイルは通るじゃん。
なんでcodepadに貼るときに改悪してるんだ。
610デフォルトの名無しさん:2010/10/19(火) 23:00:29
>>606 1>c:\cprogram\test\cat3.c(20) : error C2181: else 文が if と一致しません。
1>c:\cprogram\test\cat3.c(33) : error C2143: 構文エラー : ';' が '型' の前にありません。
1>c:\cprogram\test\cat3.c(38) : error C2065: 'c' : 定義されていない識別子です。
1>c:\cprogram\test\cat3.c(39) : error C2065: 'c' : 定義されていない識別子です。

ようわからん
611デフォルトの名無しさん:2010/10/19(火) 23:01:58
やっぱここの人たちレベル低いね
612デフォルトの名無しさん:2010/10/19(火) 23:02:33
codepadに貼ったのは質問者なのか?
それとも>>610の馬鹿か?
613デフォルトの名無しさん:2010/10/19(火) 23:04:11
入門スレだからそりゃそうだろ
>>610

20行目
× else{

○ }else{


35行目
× intc;

○ int c;
intの後に半角スペース
614デフォルトの名無しさん:2010/10/19(火) 23:05:38
>>610
このスレにはってあるコードはそんなエラーでないだろ。
615デフォルトの名無しさん:2010/10/19(火) 23:07:54
>>593-594のソースなら
・C99でコンパイルしている(mainの戻り値の型なし)
・C++でコンパイルしている(同上)
・実行時エラーとコンパイル時警告の区別がつかない
のどれかだろう
616デフォルトの名無しさん:2010/10/19(火) 23:09:29
↑ みなさんありがとうございます
解決しました
>>614 ちょこちょこ変えてた
617デフォルトの名無しさん:2010/10/19(火) 23:14:39
>>616のコンパイル結果です(Cygwin

$ gcc cat3,c
gcc: cat3,c: No such file or directory
gcc: no input files

618デフォルトの名無しさん:2010/10/19(火) 23:15:49
,(カンマ)と.(ピリオド)
619デフォルトの名無しさん:2010/10/19(火) 23:25:40
>>616-617は間違いです
コンパイルの仕方間違えた
620デフォルトの名無しさん:2010/10/19(火) 23:32:11
>>613のとおりなおしたらおkでした
 お騒がしてすみません 
621デフォルトの名無しさん:2010/10/19(火) 23:33:30
なんだったんだろう。うんこの切れが悪いような気持ち悪さだ。
622デフォルトの名無しさん:2010/10/20(水) 00:24:04
voidにしているのにreturn入れる意味はエラーチェックできるぐらいしかない?
623デフォルトの名無しさん:2010/10/20(水) 00:24:49
ハァ?
624デフォルトの名無しさん:2010/10/20(水) 00:25:20
残りの処理をすっとばして終了したい時とか
625デフォルトの名無しさん:2010/10/20(水) 00:26:37
>>622
関数から抜けるのに普通に使うだろ
626デフォルトの名無しさん:2010/10/20(水) 00:57:13
超初歩的なことかもしれないが教えてください

gtのファイルをUSBに入れて違うパソコンで作業したいんだが

コンパイルするとcannot output…みたいに出てきてしまうんだが、どうすればいい

自分のパソコンは修理中
627デフォルトの名無しさん:2010/10/20(水) 01:40:10
どうやってUSBに入れたんだ
628デフォルトの名無しさん:2010/10/20(水) 01:48:29
>>627
ド、ドラックして
629デフォルトの名無しさん:2010/10/20(水) 01:54:57
>>628
エス…か…
薬の影響で錯乱状態だな
630デフォルトの名無しさん:2010/10/20(水) 01:59:02
質問させて頂きます。
以下のリスト構造を作ったのですが新しいセルを作って
構造体のname[32]に文字列を入力する時にgets(mp -> name)にすると
氏名入力 ---> 年齢入力 ---> みたいな感じで氏名入力が飛ばされてしまうのですが
scanf("%s", mp -> name)にすると上手くいきます。
またscanf("%s", &mp -> name)でも何故か動きました。
理由を考えたのですがどうしても分からなかったので
つたない説明ですがエスパーの方おりましたらお願いします。
631デフォルトの名無しさん:2010/10/20(水) 02:00:30
typedef struct Data {
char name[32];
int age;
struct Data *next;
} Meibo;


void write_meibo(Meibo *head)
{
Meibo *p, *mp;
int a;
p = head;
while (p -> next != NULL) {
p = p -> next;
}

mp = (Meibo*)malloc(sizeof(Meibo));
if (mp == NULL) {
perror("メモリ確保に失敗しました\n");
exit(-1);
}

printf("氏名入力 ---> ");
scanf("%s", mp -> name);  /* gets(mp -> name)では出来ない
printf("年齢入力 ---> ");
scanf("%d", &(mp -> age));
mp -> next = NULL;
p -> next = mp;

}
632デフォルトの名無しさん:2010/10/20(水) 02:01:22
なるほどありがとうございました
633デフォルトの名無しさん:2010/10/20(水) 02:12:11
>>629
ドラッグだよ

やはり他のパソコンで1から環境設定とかインストールしないといけないの?
634デフォルトの名無しさん:2010/10/20(水) 02:12:56
パス通せ
635デフォルトの名無しさん:2010/10/20(水) 02:13:37
センタリング
636デフォルトの名無しさん:2010/10/20(水) 02:15:22
     / ̄ ̄\ 落ち着け
    /   _ノ  \
    | u   ( ●)(●)   ____
.    |     (__人__)  /:::::::::  u\
     |     ` ⌒´ノ/ノ└ \,三_ノ\    ,∩__
.     |        /::::::⌒( ●)三(●)\ fつuu
.     ヽ       |:::::::::::::::::⌒(__人__)⌒ |  |   |
      ヽ      \::::::::::   ` ⌒´   ,/ _ |   |
    /  ̄\   /⌒ .ヽ          i    丿
    |  ヽ、 \/   /(⌒)       ξ) ̄ ̄´
        \ ./   / /          |
637デフォルトの名無しさん:2010/10/20(水) 05:05:48
>>630
gets() と scanf() の仕様による
gets() は \n の検出で処理を完了するが scanf() は終端の \n を読み取らない為、バッファに残す
よって scanf() の直後に gets() を呼ぶと gets() はバッファに残った \n を取得し即時終了する

while( 1 ) {
 printf( "Name>" ); 
 gets( name );
 printf( "Age>" ); 
 scanf( "%d", &age );
}

上記処理において一回目の gets() は正常に動作するが、2回目以降は即時終了となるために Name>Age> と表示される
638Perl忍者 ◆M5ZWRnXOj6 :2010/10/20(水) 12:25:35
まだこのスレあったの?

























きも
639デフォルトの名無しさん:2010/10/20(水) 13:52:32
まだこのコテハン居たの?



きも
640デフォルトの名無しさん:2010/10/20(水) 13:58:34
ま________の?
きも

巻物?なんか忍者っぽいな
641デフォルトの名無しさん:2010/10/20(水) 17:08:52
Q.20世紀の中で、月の初め(1日)の曜日が日曜日になっているのは何回あるか?
という問題を解いていて、困っています。

 サイトでツェラーの公式を見つけたので、以下の公式を使って解いています。


   h百y年m月d日の曜日を求めることを考える。

   (例えば、2001年11月3日の場合、h=20、y=1、m=11、d=3 である)

   (注意) 1月、2月は、前の年の13月、14月として計算する。

   W = y+[y/4]+[h/4]−2h+[13(m+1)/5]+d

   土日月火水木金土 = 0123456 に対応


解いてみたプログラムがこちらです。

http://codepad.org/3g3tX4iN

答えは171 らしいですが、どうしても正解に辿り着けません。
どこが間違っているか、ご指摘お願いします。
642デフォルトの名無しさん:2010/10/20(水) 17:12:40
>>641
Wを7で割ったmodの値が曜日に変換されます
643デフォルトの名無しさん:2010/10/20(水) 17:13:27
>>641
>   土日月火水木金土 = 0123456 に対応
土曜日が二回ある
日曜日は0じゃなかったかな
644デフォルトの名無しさん:2010/10/20(水) 17:20:35
>>643
あ、ほんとだ。

この公式では
0123456が
土日月火水木金
に対応してるみたいです。
645デフォルトの名無しさん:2010/10/20(水) 17:32:32
1年を3〜14月でやってるだけで
(注意) 1月、2月は、””前の年””の13月、14月として計算する。
が入ってない
646デフォルトの名無しさん:2010/10/20(水) 17:34:13
なんだこの読み難いコードは。
647デフォルトの名無しさん:2010/10/20(水) 17:36:27
タブの設定を4にしてくれ
648デフォルトの名無しさん:2010/10/20(水) 17:39:56
>>637
よく分かりました。
ありがとうございました。
649デフォルトの名無しさん:2010/10/20(水) 17:45:46
>>645
1月が13とみなされ、
2月が14とみなされるので、
3〜14の間をループさせるように作りました。

>>645
すいません・・・。
650デフォルトの名無しさん:2010/10/20(水) 17:51:29
>>644
プログラムは別のサイトで見つけてきたりしてない?
使いやすいようにずらしてあると思うんだけど
651デフォルトの名無しさん:2010/10/20(水) 17:53:33
>>650
自分で書きましたよ?
652デフォルトの名無しさん:2010/10/20(水) 18:00:22
>>638
http://cruel.org/freeware/hacker.html
>ハンドルの陰にアイデンティティを隠すのは、クラッカーや、warez d00dz や、他の下等な生の形態に特徴的な、子どもじみた愚かな行動です。
653デフォルトの名無しさん:2010/10/20(水) 18:23:54
>>651
-1じゃなくて-6だな
あと>>645に対応する必要があるけど
このままだと1901年3月から2001年2月になるような
654デフォルトの名無しさん:2010/10/20(水) 18:39:19
>>653
3から始まってるので、
3月→4月→5→6→7→8→9→10→11→12
となりますが、
12→13(1月)→14(2月)
という風に、12月から1月、2月と、回ってきます。


-6にしたら答えに辿り着きました
ありがとうございました
655デフォルトの名無しさん:2010/10/20(水) 18:51:39
1901年の1月2月を2001年の1月2月と同じ曜日とみなして問題ないの?
656デフォルトの名無しさん:2010/10/20(水) 18:55:17
シーーー!
657デフォルトの名無しさん:2010/10/20(水) 19:14:10
>>654
>>645はわざわざ「前の年」を強調してくれてるんだから少しは聞く耳を持とうよ
答えだけあっててもしょうがないだろうに
658デフォルトの名無しさん:2010/10/20(水) 19:22:45
>>645さん
>>657さん
ありがとうございます。

強調してくれていたのに気付いていませんでした・・・。すいません。
ありがとうございました。

訂正してみました

http://codepad.org/iFOTsObn
659デフォルトの名無しさん:2010/10/20(水) 20:12:12
C言語を最近勉強し始めました。

scanf("%d",&n);でnに正の整数を入力する。次にn回正の整数を入力。
そのうち、奇数のものの個数を求めて出力するプログラムを作れ。

という問題があるのですが、どうあがいても作ることが出来ません・・。
for文・while文・if文などを使ってみましたが失敗しました。
プログラムを教えてください。お願いします。
660デフォルトの名無しさん:2010/10/20(水) 20:14:45
>>659
ifの条件をn%2==1にしてその時だけカウントすればいいじゃないか
661デフォルトの名無しさん:2010/10/20(水) 20:17:29
>>660
if(n%2==1)++a;
というふうにはやってあります。
たぶんプログラム全体的におかしくて個数が出ないんだとおもいます・・・。
662デフォルトの名無しさん:2010/10/20(水) 20:17:35
もうやめればいいじゃないか。
663デフォルトの名無しさん:2010/10/20(水) 20:17:43
while ((c = getchar()) != EOF){
putchar(c);
}

これをもっと簡潔に書く方法ってない?
判定の二重括弧が見苦しい気がするんだけど。

これが if なら単純に外に出せるから

c = getchar();
if ( c != EOF ){
putchar(c);
}

こうできるんだけど、
while で外出しすると
また内側にも書かないとならなくなるし。
664デフォルトの名無しさん:2010/10/20(水) 20:22:07
いや、それはもう展開するしかないかと。
for (;;) {
c = getchar();
if (c == EOF) break;
putchar(c);
}

おれも条件式の中で代入も一緒に、ってのはなるべく避けてる。
665デフォルトの名無しさん:2010/10/20(水) 20:28:32
>>626
>>違うパソコン
Windows かLinux またはMac どれなんだ。また、コンパイラは何を使ってんだ?
666デフォルトの名無しさん:2010/10/20(水) 20:28:53
>>663
こういう書き方は、C では当たり前のイデオムなのですけれども。
667デフォルトの名無しさん:2010/10/20(水) 20:32:38
僕はsaikin、macに変えました
668デフォルトの名無しさん:2010/10/20(水) 21:29:55
>>666
んなこたみんな知ってるし聞いてない。
669デフォルトの名無しさん:2010/10/20(水) 21:43:14
括弧がイヤなだけならカンマ演算子はどうだ

while (c = getchar(), c != EOF){
putchar(c);
}
670デフォルトの名無しさん:2010/10/20(水) 21:51:29
まぁ括弧消したいのにこだわるなら

do{
c = getchar();
} while(c != EOF && putchar(c));

とかになるんだろうけど、
軽くバッドノウハウかな。

while(c != EOF && putchar(c) != EOF);
とすればputchar(c)のエラー処理と言えなくもないけど、
条件が作用を伴うのはあまり良い作法とは思わない。
671デフォルトの名無しさん:2010/10/20(水) 21:52:16
>>659
http://codepad.org/
にソース添付したら間違いを指摘しやすいよ
672デフォルトの名無しさん:2010/10/20(水) 21:53:30
おまえら普通にかけよ。
ヘタくそは工夫するな。
673デフォルトの名無しさん:2010/10/20(水) 23:43:25
ぷっぷっ
674デフォルトの名無しさん:2010/10/20(水) 23:51:32
ケツからメタン漏れてるぞ
675デフォルトの名無しさん:2010/10/20(水) 23:54:59
ファイル入出力に関する質問です。

data.txt
-----
7 20
1 2 3 4 5 6 7
----
のような形式のファイルがあるとして(最初の7は、2行目の数の個数を表してます)、
int a, b, c[100];
の変数について、
a = 7
b = 20
c[0] = 1
c[1] = 2
....
となるように格納したいのですがどうしたら良いでしょうか。
FILE *fp;
fp = fopen(data.txt, "r");
if(fp == NULL){ puts("ERROR"); exit(-1);}
fscanf(fp, "%d %d", &a, &b);
こっから分かりません…。1行目のaの値により、2行目の数の個数が変わるあたりをどうしたらよいのか…。
676デフォルトの名無しさん:2010/10/20(水) 23:59:01
// 宣言部で
int i ;

for ( i = 0 ; i < a ; i++ ){
fscanf ( fp, "%d", &c[i] ) ;
}
677デフォルトの名無しさん:2010/10/20(水) 23:59:58
1行目の20がなんなのか気になるw
678デフォルトの名無しさん:2010/10/21(木) 00:17:59
「行」を意識するなら fgets で取得するのがよろしいかと思われます。
679デフォルトの名無しさん:2010/10/21(木) 00:22:49
>>676,677,678
fscanfで出来ました!
ありがとうございました!
680デフォルトの名無しさん:2010/10/21(木) 01:41:58
A.cというソースでB.cに書かれたDLLを利用したいとき
その中の関数の仮引数を構造体にした場合は、A.cとB.cで
共通のヘッダーファイルを用意して、定義しておけばよいですか?
それ以外の方法もあれば教えてください
681デフォルトの名無しさん:2010/10/21(木) 08:55:11
B.cからDLLが作られている、という前提でいいですか?
基本的には公開情報だけをB.hに書いて、
A.cからそれをincludeすればいいと思います。
構造体に関してはちょっと問題が出る事あるけど、まぁ、とりあえずこれで。
682デフォルトの名無しさん:2010/10/21(木) 12:27:58
初心者です。
"入力文字列のアルファベットを全て大文字にして表示せよ"
の問題が分かりません。
683デフォルトの名無しさん:2010/10/21(木) 12:33:58
宿題スレに行って下さい
684デフォルトの名無しさん:2010/10/21(木) 12:35:00
>>682

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char **argv)
{
char buf[256];
char *p;
scanf("%s", buf);
for (p = buf; *p != '\0'; p++) {
*p = toupper(*p);
}
printf("%s\n", buf);
return EXIT_SUCCESS;
}
直書き。コンパイル確認すらしてない。
685682:2010/10/21(木) 13:00:48
>>683さん
調べてみましたが落ちてるようです・・・
>>684さん
出来てました。ありがとうございます。

すいませんがあと一つだけ分からない問題があります。
"入力文字列に小文字のアルファベットが何文字含まれているか出力せよ"
あつかましくてすいません。
686デフォルトの名無しさん:2010/10/21(木) 13:05:22
>>685
ご案内します。こちらでございます。
http://hibari.2ch.net/test/read.cgi/tech/1286978599/l50
687682:2010/10/21(木) 13:12:30
686さん
見落としてたようです。
スレ違いな質問をしてすいませんでした。
688デフォルトの名無しさん:2010/10/21(木) 14:47:04
ARGB8888のバイトデータから全ピクセルデータを配列に格納するアルゴリズムください。
689デフォルトの名無しさん:2010/10/21(木) 14:49:24
>>688
memcpy
690デフォルトの名無しさん:2010/10/21(木) 16:26:04
すいません
int型をchar型に変換するときに上位の0を簡単に表示させるにはどうしたらいいでしょうか?

今の状態だと、例えば
int a = 180 を char b にいれるのに
sprintf(b."「%5d」",a);  とすると
「 180」          と出力されてしまいます。

これを 「00180」 と出力させたいです。

691デフォルトの名無しさん:2010/10/21(木) 16:27:09
b. → b, でした
692デフォルトの名無しさん:2010/10/21(木) 16:29:29
%05d
693デフォルトの名無しさん:2010/10/21(木) 16:30:33
char bだとコンパイルエラーの気もするけど
%05dにすればいい
694デフォルトの名無しさん:2010/10/21(木) 16:32:34
>>692 >>693
解決しました。ありがとうございます!!
695デフォルトの名無しさん:2010/10/21(木) 17:37:51
質問です下のコードで
#include <stdio.h>
int main(void)
{
int a, b, c;
int max;

printf("整数aの値:"); scanf("%d", &a);
printf("整数bの値:"); scanf("%d", &b);
printf("整数cの値:"); scanf("%d", &c);

max = a;
if (b > max) max = b;
if (c > max) max = c;

printf("最大値は%dです。\n", max);

return (0);
}
コマンドプロンプトで「最大値は〜です」が表示されずに コマンドプロンプトが終了してしまいます
また下のコードでも
#include <stdio.h>

int main(void)
{
printf("hello");

return 0;
}
でも文字が表示されずにコマンドプロンプトが終了してしまいます
どこか環境設定がおかしいのでしょうか?
696デフォルトの名無しさん:2010/10/21(木) 17:46:34
表示されないわけではない
表示された直後に一瞬で終了するから内容を見る間がないだけだ
あなたのプログラムはprintfで表示した直後にreturnで終了しているのでその通りに動作しているというわけだ
697デフォルトの名無しさん:2010/10/21(木) 17:47:44
次にお前は「すぐに終了しないようにするにはどうしたらいいでしょう」と聞く。
698デフォルトの名無しさん:2010/10/21(木) 17:48:10
charやintを含む構造体内の重複する文字列を、一方は残し、もう一方は削除したいと思っています。
文字列のソートは済ましているので後は比較し削除するだけなのですが、
nextポインタをどの様に扱えばよいのか分かりません。
何方かご教授お願いします。
699デフォルトの名無しさん:2010/10/21(木) 17:49:46
出来上がった実行ファイルをダブルクリックすると
そのアプリケーションの終了と同時にコマンドプロンプトは閉じるのが Windows の仕様

多分表示されてるんだけど、即閉じてるのでわからないだけ

スタートメニューからコマンドプロンプト開いて、
その窓へ向かって実行ファイルを D&D
[Enter]
してみそ
700デフォルトの名無しさん:2010/10/21(木) 17:52:19
>>699
残念だが、遅いよ。遅すぎるんだよw

>>698
あんたも説明が下手だな。具体例を提示してくれ。
いきなりnextポインタと言われてもなんのことやら。
701デフォルトの名無しさん:2010/10/21(木) 18:01:22
ひょっひょっ
702デフォルトの名無しさん:2010/10/21(木) 18:01:44
>>696 >>699
ありがとうございます。
703デフォルトの名無しさん:2010/10/21(木) 18:01:54
きゃっきゃっ
704デフォルトの名無しさん:2010/10/21(木) 18:35:19
>>698
片方向リンクのリスト構造か?

struct node {
char a[16];
int b;
struct node* next;
} NODE;

みたいな感じの
705デフォルトの名無しさん:2010/10/21(木) 18:46:57
>>704
うん
706デフォルトの名無しさん:2010/10/21(木) 18:49:00
>>704
ふっほっ
707デフォルトの名無しさん:2010/10/21(木) 20:04:53
BF:F0
FF:00
0A:BF

これをC言語一行に直してみてくれ
708デフォルトの名無しさん:2010/10/21(木) 22:18:20
げほっげほっ
709デフォルトの名無しさん:2010/10/21(木) 22:21:55
>>698
消す一個先を消す一個前につなげるだけでしょ
710デフォルトの名無しさん:2010/10/21(木) 22:30:06
要望に色々なバージョンが考えられ得るからね
削除前の順を維持したいのか重複削除を適用後の順を取り出したいのか適用後として空要素の順を何時何処の情報で並び替えるのか
711デフォルトの名無しさん:2010/10/21(木) 22:39:26
typedefについての質問です

#include <stdio.h>

struct value_tag
{
int value1;
int value2;
char value3[64];
};

typedef struct value_tag value;

int main()
{
value_tag.value1 = 10;
printf("value_tag.value1 = %d",value_tag.value1);
}

やりたいことは構造体内にある変数value1に10を代入してそれを表示するんですが
いまいちうまく行かなくて・・・structだけ使えばいいじゃないかと思うかもしれませんが
どのように使うか理解しておきたくて。。。
ご教示お願いします
712デフォルトの名無しさん:2010/10/21(木) 22:50:09
まずintをtypedefから始めてみそ
713デフォルトの名無しさん:2010/10/21(木) 22:58:59
何が聞きたいかよく分からんが

(例1)
struct value_tag
{
int value1;
int value2;
char value3[64];
} ;
typedef struct value_tag value;

int main(){
value v ;
v.value1 = 10;
printf("value_tag.value1 = %d", v.value1) ;
}

(例2)
typedef struct value_tag
{
int value1;
int value2;
char value3[64];
} value;

int main(){
value v;
v.value1 = 10;
printf("value_tag.value1 = %d", v.value1);
}
714デフォルトの名無しさん:2010/10/21(木) 23:08:35
いちいち名前変えるやつウゼエ

typedef HOGE HOGE;
struct HOGE{
};

ちゃんと名前空間が分かれてるんだから
いちいち tag とか _ とか付けてんじゃねーよボケ
715デフォルトの名無しさん:2010/10/21(木) 23:10:21
訂正:
typedef HOGE HOGE;

typedef struct HOGE HOGE;

興奮しすぎてミスった悪い。
716デフォルトの名無しさん:2010/10/21(木) 23:13:37
>>710
はあ?
717デフォルトの名無しさん:2010/10/21(木) 23:16:13
typedef struct
{
int value1;
int value2;
char value3[64];
} value;

で解決
718711:2010/10/21(木) 23:35:29
>>713を見て
> value v;
このvってのが構造体変数で、valueが構造体タグ名で合ってますよね?
value_tagってのが何なのかわからないです
まずtypedef自体、構造体をコピーしているのか、名前を変えているのか良くわからない状況です
いろいろググったりしても、データ型に新しい名前をつけるものとしか出ず、チンプンカンプンです
719デフォルトの名無しさん:2010/10/21(木) 23:36:37
特に意味は無いから気にしなくておk
720デフォルトの名無しさん:2010/10/21(木) 23:41:18
構造体どころか、変数の基礎すら理解できてないようにも見えるw
721デフォルトの名無しさん:2010/10/21(木) 23:48:45
てめーはtypedefを使うな
722デフォルトの名無しさん:2010/10/22(金) 00:02:29
まあ一般的には typedef 使わなきゃならない部分ってのは無いよな。
723デフォルトの名無しさん:2010/10/22(金) 00:07:12
初心者スレなんだからもっと優しく説明するんだ
724デフォルトの名無しさん:2010/10/22(金) 00:14:05
今後ともtypedefはお使いにならないでください。
725デフォルトの名無しさん:2010/10/22(金) 00:14:31
>>718
>>717で全部解決してるじゃなイカ
726デフォルトの名無しさん:2010/10/22(金) 00:16:17
#defineを使うんだ!
727デフォルトの名無しさん:2010/10/22(金) 00:18:15
typedef は型に別名を付けるだけだよ。
プリプロセッス時に置き換える #define とは違って、コンパイル時まで名前は残る。
単に struct を省略したいだけの目的なら typedef なんか使わず C++ にでも行ったほうがいい。
728デフォルトの名無しさん:2010/10/22(金) 00:19:15
オッス!おらプリプロセッス!
729デフォルトの名無しさん:2010/10/22(金) 00:26:34
プロセッス → プロセッサ
プロセス → プロセサ

プロセス →?→ プロセッサ
730デフォルトの名無しさん:2010/10/22(金) 00:30:58
プロセス → プロセサー
だろ。
語尾の棒を省略するやつウゼエんだよ。
プリンター、ブラウザー、ポインター、ドライバー、
1文字省略したくらいで何が嬉しいの? 馬鹿なの?
そのクセ、「ハッカ」とか「コピ」とか言わねーんだからアホとしか言いようがない。
731デフォルトの名無しさん:2010/10/22(金) 00:31:06
>>729
日本語で考えるから混乱する。
process → processor
ss と重なる部分を促音で書く人もおればそうじゃないひともいるのだろう。
732デフォルトの名無しさん:2010/10/22(金) 00:31:51
Process -> Processer
733デフォルトの名無しさん:2010/10/22(金) 00:32:58
>>732
辞書をひいたか?手元の辞書にはそれはない。
734デフォルトの名無しさん:2010/10/22(金) 00:35:31
ハッカよりニッキが好きだったけど、あれ中国産が多いんだよな。
自分で買えばベトナム産も選べるけど、加工品に使われてるものは選べないから困る。
ヤツハシとかどうなんだろうか。ニッキは好きなんだけどそれが不安で手が出せない。
735デフォルトの名無しさん:2010/10/22(金) 00:37:06
そういえば、グーグルも日本とかアジア圏だけじゃね?
ネイティブの発音は日本人には「ゴォゴ(ル)」に聞こえる。
736デフォルトの名無しさん:2010/10/22(金) 00:38:41
>>730
英語でつづると -er -or になる部分は長音記号をつけないという決まりがあった。
これによると、「ハッカ」はあり得る。「コピ」は er, or で終わっていないのでありえない。
737デフォルトの名無しさん:2010/10/22(金) 00:39:49
ただし検索結果は尻から出る
738デフォルトの名無しさん:2010/10/22(金) 00:47:40
決まりというのはJISのこと。
http://www.jisc.go.jp/app/JPS/JPSO0020.html
Z8301 で観覧。

ドキュメント書く場合に結構この辺が絡む。

こちらも面白い。
http://ja.wikipedia.org/wiki/Wikipedia:%E5%A4%96%E6%9D%A5%E8%AA%9E%E8%A1%A8%E8%A8%98%E6%B3%95
739デフォルトの名無しさん:2010/10/22(金) 00:52:54
コピつったら韓国語でコーヒーのことだぞ
740デフォルトの名無しさん:2010/10/22(金) 01:27:13
マイクロソフトはもう止めたんだろ。
今後は伸ばすのが標準化するよ。
741デフォルトの名無しさん:2010/10/22(金) 01:30:09
プログラムー。
デバッグー。
コンパイルー。
742デフォルトの名無しさん:2010/10/22(金) 01:40:32
。までが標準?
743デフォルトの名無しさん:2010/10/22(金) 01:58:31
単語をころころ変えられると、マニュアル書くのがほんとめんどくさい
マイコンピュータ(またはコンピュータ、コンピューター)を〜とか書くのまじめんどい
744デフォルトの名無しさん:2010/10/22(金) 02:00:15
基本カタカナ外来語が踊り狂う技術文書には末尾の長音は含めない。マイクロソフトの方針がなんだろうと関係ない。
745デフォルトの名無しさん:2010/10/22(金) 02:05:58
森博嗣の小説もコーヒー以外は全部伸ばさないから、バッターをバッタとか書いてる
746デフォルトの名無しさん:2010/10/22(金) 03:11:27
>>738
国語審議会のとある長老のありがたき御意見だったという噂を耳にしたことがあります。それをJIS が鵜呑みにしてしまったとか。
マイクロソフトは長音記号を一律に復活してしまって、それはそれでもめてるらしいとか。
言文一致を前提にすると聞いたようにかいていい、ということになりますから正書法を定めるのはなかなかむずかしいですね。
747デフォルトの名無しさん:2010/10/22(金) 03:12:36
>>745
この人コピィ、って書く人ですね。
748746:2010/10/22(金) 03:18:42
木村泉氏の著作で読んだ記憶があります。参考までに。
749デフォルトの名無しさん:2010/10/22(金) 03:52:26
旧JISではコピーみたいに3文字になる場合は「ー」をつけて
コンピュータみたいに4文字以上になる場合は「ー」をつけないじゃなかったか
最近JISが変更されてコンピュータがコンピューターになったとか
750デフォルトの名無しさん:2010/10/22(金) 10:25:04
早く質問しろよボケ
使えねー奴らだな
751デフォルトの名無しさん:2010/10/22(金) 12:48:01
配列のポインタを関数の引数として渡すときは (*a)[]
ポインタの配列を渡すときは(**a)で良いんでしょうか?
752デフォルトの名無しさん:2010/10/22(金) 12:59:52
またポインタの配列は*a[]、
また配列の配列を渡すときはa[][],、(*a)[]という形で良いでしょうか?
753デフォルトの名無しさん:2010/10/22(金) 13:01:59
2次配列?
754デフォルトの名無しさん:2010/10/22(金) 13:05:09
うん。
755デフォルトの名無しさん:2010/10/22(金) 13:44:00
おれのお腹には四次元配列がついている。
なんでも入るよ。
756デフォルトの名無しさん:2010/10/22(金) 14:13:22
>>574
サンクス
757デフォルトの名無しさん:2010/10/22(金) 16:16:47
>>756
うむ。
758デフォルトの名無しさん:2010/10/22(金) 16:18:01
>>757
どうもどうも
759デフォルトの名無しさん:2010/10/22(金) 16:24:55
>>758
うむうむ。
760デフォルトの名無しさん:2010/10/22(金) 17:42:41
>>751
実際に渡して見るんだ!
761デフォルトの名無しさん:2010/10/22(金) 18:10:33
渡せませんでした(>_<)
762デフォルトの名無しさん:2010/10/22(金) 18:14:14
今渡しとかないと、後で後悔するぞ
763デフォルトの名無しさん:2010/10/22(金) 18:16:57
でも今渡しても今後悔するだけ
764デフォルトの名無しさん:2010/10/22(金) 18:18:24
俺の想いがたくさん詰まったboolean配列をあなたのポインタに渡したい・・・・
765デフォルトの名無しさん:2010/10/22(金) 18:18:55
渡そうとしても受け取ってくれませんでした(>_<)
766デフォルトの名無しさん:2010/10/22(金) 19:07:33
オレに渡したら勝手にfreeしてくれてやる
767デフォルトの名無しさん:2010/10/22(金) 21:18:24
>>760
実際に渡してみたら上手くいきました。
ありがとうございました。
768デフォルトの名無しさん:2010/10/22(金) 21:24:14
>>749
JIS もマイクロソフトに追従ですか
769デフォルトの名無しさん:2010/10/22(金) 22:27:46
いろいろアプリケーションが世の中にはありますが
ああいうのをを作るにはどのくらいの勉強が必要ですか?
入門書を何とか読み終えたのですが
やった問題もn乗を求めるとかファイル中の最高値を出力するとかだけで
これで何か作れと言われてもどうすればいいのかわからん状態です
770デフォルトの名無しさん:2010/10/22(金) 22:35:17
そこで詰まるようならものつくりなんて君には一生無理なんじゃないかな
771デフォルトの名無しさん:2010/10/22(金) 22:39:56
本屋にいけばゲーム開発入門とか売ってるからそれを読めばいい
そこに書いてあるコードは入門書がちゃんとわかってるなら読めるはず
読めないならまだ入門書すらわかってないってこと
772デフォルトの名無しさん:2010/10/22(金) 22:41:30
>>769
そこまで行けたなら、もう作れるはずだよ。
わからんというなら、その作ろうとしてるものの構造を理解してないだけ。
とりあえず簡単なものから作ってみればいい。テキストエディターとか。
773デフォルトの名無しさん:2010/10/22(金) 22:45:17
蔵書プログラムなんてどう?
774デフォルトの名無しさん:2010/10/22(金) 22:46:15
作りたいものがないなら何も作る気にならんだろう
775デフォルトの名無しさん:2010/10/22(金) 22:50:54
バイナリエディタとかも作れるよ。
776デフォルトの名無しさん:2010/10/22(金) 23:07:41
>>769
14歳からはじめるC言語わくわくゲームプログラミング教室とかでDirectX使ってゲームでも作るよろし
777デフォルトの名無しさん:2010/10/22(金) 23:14:44
そのタイトルって二十歳過ぎると手出しにくいわ
778デフォルトの名無しさん:2010/10/22(金) 23:20:46
いろいろありがとうございます
ゲームの本を探してパックマンやオセロ作ろうと思います
アルゴリズムの勉強にもなりそうですし
>>770
難しいですね・・・
>>774
プロキシ検索ソフトやメモ帳風ブラウザなど作りたいというか欲しいのがあります
現状のソフトでこれをああできたらいいのになあ・・という部分もあるので
779デフォルトの名無しさん:2010/10/22(金) 23:21:37
clibのコンソールアプリからWin32のAPIとかに行くのも一つの壁だと思う。
少なくともオレの場合はそうだった。
HWNDとか、UINTとか、HINSTANCEとか、おまえら何?って。
でもそれが何なのか、知る必要は(少なくとも今は)無いと知って、
そういうもんだと思って乗り切ったよ。
ある種の抽象化/隠蔽なんだよ。
780デフォルトの名無しさん:2010/10/22(金) 23:24:40
UINT はそのままだろw
781デフォルトの名無しさん:2010/10/22(金) 23:26:34
>>777
まぁDirectX初めて触るとかだったらまぁ良いけどな。
なんであんな名前にしたんだろw
782デフォルトの名無しさん:2010/10/22(金) 23:27:56
DirectX は C++ だからスレ違いだろ。
783デフォルトの名無しさん:2010/10/22(金) 23:28:59
>>780
そうなんだけど、中学生のオレには分からなかったんだよw
つまり、unsigned intならunsigned intとすればいいのに、
なんでUINTなんてtypedefしているのか。
それ以前に、「おいおいC言語の本にねーよそんなの」状態だったけど。
784デフォルトの名無しさん:2010/10/22(金) 23:32:33
スペルが難しいよね。unsignedってさ。
785デフォルトの名無しさん:2010/10/22(金) 23:33:42
厨坊のオレはアンシグネドとか読んでいたよww
786デフォルトの名無しさん:2010/10/22(金) 23:35:42
>>783
windowsの本買えよ。
787デフォルトの名無しさん:2010/10/22(金) 23:47:11
>>786
おま・・・amazonも無い時代だったんだよ。
田舎の本屋にWindowsプログラミングの本なんて無い。
VC4.0のわけの分からん分厚いマニュアルのサンプルとか、
BASICマガジンとか、そんくらいしかなかったんよ。
今思えば、東京の本屋にでも旅行しに行けばよかったかもな。
788デフォルトの名無しさん:2010/10/23(土) 00:00:21
話は違うんだけど皆ってちゃんと正しいタイピングしてる?
俺は本来小指とかで叩くべき所も違う指で叩いてるからタイピングが遅いんだろうか?
789デフォルトの名無しさん:2010/10/23(土) 00:10:10
なんでか関数の引数一覧が更新されないんだけど
何を削除するといいんだっけ?
790デフォルトの名無しさん:2010/10/23(土) 00:12:32
.ncb
791デフォルトの名無しさん:2010/10/23(土) 00:12:50
助かったdd
792デフォルトの名無しさん:2010/10/23(土) 00:26:46
>>788
何をいってる?
首筋のバイオチップにUSBつないでるからタイピングなんかしない。
むしろPC側のノイズがフィードバックしてノイズが聞こえるのが気になる。

冗談はさておき、おれはいわゆるホームポジションも知らずに慣れてしまったから
オレはオレ流なんだけど、それはそれでいいと思ってる。
例えば右手をマウスに移動する予定のあるポジションと、
そうでない場合とで違うんだ。無意識なんだけど。
おれにはそれが最適になっちまった。
793デフォルトの名無しさん:2010/10/23(土) 00:30:19
連続する大文字を楽に打つ方法教えろ
794デフォルトの名無しさん:2010/10/23(土) 00:31:12
俺は _ が打ちにくいんだがw
795デフォルトの名無しさん:2010/10/23(土) 00:39:55
>>793
正式なホームポジションって、微妙にプログラマには向かないのかもな。
オレ流は、まあ普通だが左手の薬指か小指でSHIFT押しながらうつよ。
右手はT、G、Bあたりまで攻め入る。
いま調べたが、%とかは左でSHIFT、右手で5を押してるな。
これはね、emacsでreplaceするとき、
左手だけでSHIFT+ALT+5に無理があるからそうなったんだと思う。
やべー、無意識って怖い。
796デフォルトの名無しさん:2010/10/23(土) 00:41:45
>>794
右にもSHIFTあるだろw
/と隣同士じゃねーか。
それとも英語圏のKBDかい?
797デフォルトの名無しさん:2010/10/23(土) 00:57:08
右手の小指で右Shift押しながら薬指でバックスラッシュって難しくね?
798デフォルトの名無しさん:2010/10/23(土) 01:05:11
>>797
禿同
799デフォルトの名無しさん:2010/10/23(土) 01:07:05
それが正式なうちかたなのかい?
おれは右SHIFTを薬指で、_を中指で、ほぼ同時打ちしてる。
たぶん、右手が正式な打ち方より臨機応変なんだな。
800デフォルトの名無しさん:2010/10/23(土) 01:09:22
>>793
Capitals Lock を使う。
801デフォルトの名無しさん:2010/10/23(土) 01:10:24
Caps Lockしか有りませんがそれで代用できるのでしょうか?
802デフォルトの名無しさん:2010/10/23(土) 01:10:31
>>800
それはそれで面倒
803デフォルトの名無しさん:2010/10/23(土) 01:13:50
ただ日本語配列だと、どういうわけか Shift を押しながらじゃないと
CapsLock 効かないんだよな。
たぶん、暴発を防ぐための要らんお世話なんだとは思うが、
普通に使う人にとってはクソ仕様この上ない。
US 配列なら普通に押すだけで切り替えできるんだが。
804デフォルトの名無しさん:2010/10/23(土) 01:14:12
おれにはCapsLockが無い。レジストリでcrtlに変えてしまった。
万が一、ものすごく長い大文字シンボルをうつときは、
小文字でうっちゃって後でemacsでupperにすると思う。

ホームポジションってマウスも無いワープロ時代の産物でしょ?
自分なりに臨機応変に工夫するしかないとおもうよ。
805デフォルトの名無しさん:2010/10/23(土) 01:15:38
>>803
へえ、知らんかった。Shift押しながらの切り替えだから面倒くさくて
806デフォルトの名無しさん:2010/10/23(土) 01:15:46
代用だってさ(笑(
何の略なのかすらも知らなかったんだろうね。
807デフォルトの名無しさん:2010/10/23(土) 01:19:43
88とか98の時代は押すだけで切り替わってたような記憶が
808デフォルトの名無しさん:2010/10/23(土) 01:21:48
CapsLockを押したときどうするとか、
そういうのは全てOSがコントロールしてる。
ハードウェアの仕様じゃない。
CapsLockやNumLockのLEDのコントロールすらOS管理。
なので、OSによると思う。
809デフォルトの名無しさん:2010/10/23(土) 01:23:21
>>807
当時のは1キー分だけ離れてたんじゃなかったか?
[Caps][Ctrl][A][S][D][F]
みたいに。
810デフォルトの名無しさん:2010/10/23(土) 01:23:31
ようするに自分が打ちやすいように打てば良いということでおk
811デフォルトの名無しさん:2010/10/23(土) 01:26:17
>>808
そんなことはみんな知ってるし聞いてない。
812デフォルトの名無しさん:2010/10/23(土) 01:33:45
え?設定で変えられるじゃん
813デフォルトの名無しさん:2010/10/23(土) 01:35:51
>>812
出し惜しみすんなカス
814デフォルトの名無しさん:2010/10/23(土) 01:37:01
>>812
そんなことはみんな知ってるし聞いてない。
815デフォルトの名無しさん:2010/10/23(土) 01:43:40
荒れそうな予感
そんな荒れる要素あったか?w
816デフォルトの名無しさん:2010/10/23(土) 01:43:45
>>814
「訊いてない」の方だろ?
FEPありなのに漢字もロクに書けないおまえの意見は訊いてない。いちばんね。
817デフォルトの名無しさん:2010/10/23(土) 01:45:22
聞でいいんだよカス
818デフォルトの名無しさん:2010/10/23(土) 01:45:44
↑馬鹿
819デフォルトの名無しさん:2010/10/23(土) 01:46:28
聞でいいんだよカス
820デフォルトの名無しさん:2010/10/23(土) 01:47:16
>>819
そんなことはみんな知ってるし聞いてない。
821デフォルトの名無しさん:2010/10/23(土) 01:49:00
きかないか?
822デフォルトの名無しさん:2010/10/23(土) 01:52:16
823デフォルトの名無しさん:2010/10/23(土) 01:53:07
さっさとスレタイ直せよw
824デフォルトの名無しさん:2010/10/23(土) 01:56:08
>>822
そんなことはみんな知ってるし聞いてない。
825デフォルトの名無しさん:2010/10/23(土) 01:56:47
何とくだらない論争にw
826デフォルトの名無しさん:2010/10/23(土) 01:58:01
そんなことはみんな知ってるし聞いてない!

これ、流行るの?
827デフォルトの名無しさん:2010/10/23(土) 01:59:00
>>826
そんなことはみんな知らないし聞いてない
828デフォルトの名無しさん:2010/10/23(土) 01:59:11
>>826
!→。
829デフォルトの名無しさん:2010/10/23(土) 02:00:27
>>816
>>818
おいまだか
830デフォルトの名無しさん:2010/10/23(土) 02:05:31
>>828
←→→P+K
831デフォルトの名無しさん:2010/10/23(土) 02:12:14
>>816
>>818
おいまだか
832デフォルトの名無しさん:2010/10/23(土) 02:13:11
↑馬鹿
833デフォルトの名無しさん:2010/10/23(土) 02:13:55
>>832
そんなことはみんな知ってるし聞いてない。
834デフォルトの名無しさん:2010/10/23(土) 02:24:09
835デフォルトの名無しさん:2010/10/23(土) 02:44:16
>>834
そんなことはみんな知ってるし聞いてない。
836デフォルトの名無しさん:2010/10/23(土) 02:53:57
なんなんだこの流れ
837デフォルトの名無しさん:2010/10/23(土) 02:55:56
嵐がやむのを待つんだ!
838デフォルトの名無しさん:2010/10/23(土) 03:05:11
>>816
>>818
おいまだか
839デフォルトの名無しさん:2010/10/23(土) 03:17:42
まーだだよっ!
840711:2010/10/23(土) 10:20:38
>>717ので自己解決しました
typedefについてあまり理解してないでしばらく>>717でいきます
841デフォルトの名無しさん:2010/10/23(土) 10:36:42
>>924
↑↑AB
842711:2010/10/23(土) 10:49:41
なんか自己解決ってのは変なんで言い直します
>>717さんので解決しました。
答えてくださった方ありがとうございました
何度も書いてすいません
843デフォルトの名無しさん:2010/10/23(土) 11:27:02
>>788
2chでタッチタイプできるって言ってる連中の9割以上は我流タッチタイプだろうな。
844デフォルトの名無しさん:2010/10/23(土) 11:37:17
コーディングスタイルすら我流なんだからどうでもいいよ
845デフォルトの名無しさん:2010/10/23(土) 12:19:27
タッチタイピングより速いタイピングほう
http://gigazine.net/index.php?/news/comments/20100205_typing_zen/
846デフォルトの名無しさん:2010/10/23(土) 12:23:11
足も使え
847デフォルトの名無しさん:2010/10/23(土) 12:25:58
薬指ってあんまり使わないよね
848デフォルトの名無しさん:2010/10/23(土) 12:28:59
なるほどキーを打った後ホームポジションに戻さない方が良いのか
849デフォルトの名無しさん:2010/10/23(土) 12:54:22
打ったら戻る、真ん中へ!打ったら戻る、真ん中へ!
850デフォルトの名無しさん:2010/10/23(土) 12:58:44
ちょっとワロタw
851デフォルトの名無しさん:2010/10/23(土) 13:26:12
>>848
数打っていくうちに自然にそうなる。
852デフォルトの名無しさん:2010/10/23(土) 13:31:59
C言語でカプセル化はできないのですか?
853デフォルトの名無しさん:2010/10/23(土) 13:35:44
我流タッチタイプだからホームポジションに戻すとかしないな
あとでホームポジション教わってキーにポッチがついてるのに感動したっけ
薬指は普通に使うけど親指と小指はスペースとかEnterとか周辺キー専用になってるな

あれ、ここなんのスレだっけ
854デフォルトの名無しさん:2010/10/23(土) 14:22:00
>>852
できる。
FILE構造体と fopen(), fclose(), その他 f*() 関数群を真似る
855デフォルトの名無しさん:2010/10/23(土) 14:27:10
Win32API もそうなってるな。
856デフォルトの名無しさん:2010/10/23(土) 14:40:17
>>855
一旦呼び出してサイズを手に入れてから、それをもとに領域確保して、あらためて本番の呼び出しを行う、
という作法は非常に剛健というか用心深いというか、そこまで徹底してるのには感服した。
857デフォルトの名無しさん:2010/10/23(土) 14:49:16
一般人じゃない人には普通のことでしょ
858デフォルトの名無しさん:2010/10/23(土) 16:30:43
おらさっさと質問来いよグズども。
いつまで待たせんだべらんめい。
859デフォルトの名無しさん:2010/10/23(土) 16:54:59
それならenumの便利な活用例をあげてくれ
860デフォルトの名無しさん:2010/10/23(土) 16:59:31
enumって自分の場合、ほとんど使わんな。
861デフォルトの名無しさん:2010/10/23(土) 17:08:12
enumは使うだろjk
862デフォルトの名無しさん:2010/10/23(土) 17:12:27
まずはenumを皆がなんて読んでいるかだ
僕はイーナム(^q^)
863デフォルトの名無しさん:2010/10/23(土) 17:14:05
エヌューンマッ
864デフォルトの名無しさん:2010/10/23(土) 17:17:48
>>859
定数の定義に使うだろ。
865デフォルトの名無しさん:2010/10/23(土) 17:20:35
コード見る時とかコンパイル時にエラー出たら分かりやすい
866デフォルトの名無しさん:2010/10/23(土) 17:24:23
CあがりとかVB6あがりのPGってenum使わないやつ多いな。
867デフォルトの名無しさん:2010/10/23(土) 18:38:45
FILE *

この意味ってどういう意味? なんで米印がついてるの?
868デフォルトの名無しさん:2010/10/23(土) 18:43:34
>>867
stdio.h に定義されている構造体 FILE へのポインタ、という意味。
869デフォルトの名無しさん:2010/10/23(土) 18:44:11
int *a;
char *b ;
と一緒
上記の意味もわからないようなら出直してきてください
870デフォルトの名無しさん:2010/10/23(土) 18:45:09
void do_one(FILE *);
void cant(char *);

↑みたいな最後の米印の意味おしえて
871デフォルトの名無しさん:2010/10/23(土) 18:47:29
あありがと
早いね
872デフォルトの名無しさん:2010/10/23(土) 18:47:46
void do_one(FILE *fp);
void cant(char *c);
と一緒
プロトタイプ宣言の仮引数はあっても無くてもいい
873デフォルトの名無しさん:2010/10/23(土) 18:58:47
>>872
無いとき、悲しくなることがあるけどね…

qsrot(void*, size_t, size_t, int (*)(const void *, const void *));
要素数と1要素のサイズ どっちが先だー? って

# 仮引数名が実際の動作とは違う命名のトラップは論外として
874デフォルトの名無しさん:2010/10/23(土) 18:58:52
ちなみにvoid do_one(FILE *); のdo_oneというのはprintfと
同じでそのまま出力されるんですか?戻り値なしで
875デフォルトの名無しさん:2010/10/23(土) 19:02:59
なん……だと……?
876デフォルトの名無しさん:2010/10/23(土) 19:17:03
>>873
リファレンス読めばおk
877デフォルトの名無しさん:2010/10/23(土) 19:25:44
>>874です 
つまりdo_one()の意味をわかりやすく教えてほしいです
878デフォルトの名無しさん:2010/10/23(土) 19:29:33
どこの馬の骨が作ったか分からない関数が中で何をしているかなんぞ知るか
879デフォルトの名無しさん:2010/10/23(土) 19:30:41
main(int argc, char **argv)

↑これはなんで*が二個もあるんですか
880デフォルトの名無しさん:2010/10/23(土) 19:32:42
アナルが2個ってこと
881デフォルトの名無しさん:2010/10/23(土) 19:34:08
>>878 すいません したの方に定義されてました
882デフォルトの名無しさん:2010/10/23(土) 19:35:34
>>879
ポインターの配列を受け取るから。
883デフォルトの名無しさん:2010/10/23(土) 19:36:52
*argv[]ってこと
884デフォルトの名無しさん:2010/10/23(土) 19:41:43
えっとつまり**argvとやると
*argv[0] *argv[1] *argv[2] .......
こんな感じに考えていいですか
885デフォルトの名無しさん:2010/10/23(土) 19:53:33
別に配列とは限らないんじゃ?
変数のアドレスがポインタ(*)
変数のアドレスが格納されてるアドレスがダブルポインタ(**)
886デフォルトの名無しさん:2010/10/23(土) 19:54:35
質問を読み直してこいよ愚図
887デフォルトの名無しさん:2010/10/23(土) 19:57:42
そんな限定条件で回答してたら絶対質問者は誤解すると思うけどな
888デフォルトの名無しさん:2010/10/23(土) 19:58:14
>>884
うむ。
argv[0], argv[1]にはそれぞれアドレスが入っておる
889デフォルトの名無しさん:2010/10/23(土) 20:09:22
関数に引数経由でポインタ返してもらおうとしたらポインタのポインタにするとか良く分からん。
そらint型のときはint型のポインタ渡すけどさ〜
890デフォルトの名無しさん:2010/10/23(土) 20:24:52
こういうのダブルアナル使わないとうまくいかないじゃん。

#include <stdio.h>

void set_str(char* str) {
  str = (char*)malloc(100);
  strcpy(str, "abc");
}

int main(int argc, char **argv) {
  char* str = NULL;
  set_str(str);
  printf("%s\n", str);
  return 0;
}
891デフォルトの名無しさん:2010/10/23(土) 20:26:04
配列の添字演算子ってなんで二つ書き方があるんですか?
array[0]と0[array]のどちらでもarrayの0番目の要素にアクセスできますが、
これってどんな風に使い分けるんですか?
892デフォルトの名無しさん:2010/10/23(土) 20:28:41
>>890
mallocするならそれを返せよ、で終わるだろその例は
893デフォルトの名無しさん:2010/10/23(土) 20:30:31
>>891
後者は使うな!
894デフォルトの名無しさん:2010/10/23(土) 20:34:29
>>891
0[array]は見た目がよくないな
[array]0にしなさい
895デフォルトの名無しさん:2010/10/23(土) 20:35:34
>>893
嫌だ
896デフォルトの名無しさん:2010/10/23(土) 20:35:44
>>891
x[i]は(*((x)+(i)))と等価と決められているから
嫌がらせ目的以外では使い分けるな
897デフォルトの名無しさん:2010/10/23(土) 20:37:34
arrayの型次第でしょ
898デフォルトの名無しさん:2010/10/23(土) 20:39:11
B言語の関連でそうなったって本で読んだよ
B言語は型がワードしかなくてアドレスがワード単位だったからってことで。
899デフォルトの名無しさん:2010/10/23(土) 20:40:16
>>897
誰に対してだか知らんが規格読んで来い
900デフォルトの名無しさん:2010/10/23(土) 20:43:09
規格なんか知らなくてもいいのでは?
901デフォルトの名無しさん:2010/10/23(土) 20:46:48
>>873
Xsort(void*, size_t, size_t, int (*)(const void *, const void *));
の実装はどんな感じなるんですか?
Xをq(急),b(泡),s(選)等にする時にするとき、ソートアルゴリズムも渡したいとき
はどうするんですか
902デフォルトの名無しさん:2010/10/23(土) 20:49:12
>>901
何を言っているんだお前は?
903デフォルトの名無しさん:2010/10/23(土) 20:51:24
>>902
禿同w
904デフォルトの名無しさん:2010/10/23(土) 21:07:07
array[0]が無難そうなんですね。
使い分けせずにこっちだけを使っていくことにします。
ありがとうございました。
905デフォルトの名無しさん:2010/10/23(土) 21:24:38
array[]だろ
906デフォルトの名無しさん:2010/10/23(土) 21:33:55
array[3]と3[array]だったら前者の方が分かりやすい。だから後者は使ってはいけない。
907デフォルトの名無しさん:2010/10/23(土) 21:59:43
>>901
かなり無駄だが
typedef int (*SortCmpFunc)(const void*, const void*);
typedef void (*SortImplementFunc)(void*, size_t, size_t, SotCmpFunc);

void Xsort(void *array, size_t num, size_t size, SortCmpFunc cmpFn, SortImplementFunc impFn)
{
 (*impFn)(array, num, size, cmpFn);
}
908デフォルトの名無しさん:2010/10/23(土) 22:03:12
main(int argc, char **argv)
{
FILE *fp;

--argc; /* argv[0]の分だけ減らす*/
++argv; /* argv[0]を読み飛ばす*/
if (argc == 0) /* パラメータ無し */
do_one(stdin);/*標準入力を処理*/
else{
while (argc--){
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
argv++;
}
}
return (0);
} fclose(fp);
argv++;
}
}
return (0);
}

上のwhile (argc--){
はどういう条件なんですか
909デフォルトの名無しさん:2010/10/23(土) 22:20:02
未処理のコマンドライン引数があるなら
910デフォルトの名無しさん:2010/10/23(土) 22:24:37
つか、ここで1問1答でやるよりどっか入門サイト見ながら順にやってけよ
911デフォルトの名無しさん:2010/10/23(土) 22:39:02
>>908
!=0を補って読んでくれ
while (argc-- != 0) {
912デフォルトの名無しさん:2010/10/23(土) 22:54:33
>>911 どうして補うことができるのですか?
913デフォルトの名無しさん:2010/10/23(土) 22:55:31
どういう決まりだから
914デフォルトの名無しさん:2010/10/23(土) 22:58:14
なぜって while 文とはそういうものだからです
規格にもそう書いてある
> An iteration statement causes a statement called the loop body to be executed repeatedly
> until the controlling expression compares equal to 0.
915デフォルトの名無しさん:2010/10/23(土) 22:58:45
if も while もゼロかどうかで判定する決まりだから。
printf("%d\n", ( 1==1 ));
printf("%d\n", ( 1==2 ));

これやってみれば解る。
916デフォルトの名無しさん:2010/10/23(土) 23:11:14
>>908
!=0を補って読んでくれ
while (argc-- != 0) {

!=にする意味がわかりません
elseではifの反対の条件をだせるんですか         
917デフォルトの名無しさん:2010/10/23(土) 23:15:38
「馬鹿が釣られやがってw」とニヤニヤしながら書き込んでいる池沼の姿が俺には見える
918デフォルトの名無しさん:2010/10/23(土) 23:15:39
しねばいいのに
919デフォルトの名無しさん:2010/10/23(土) 23:24:49
>>916
もともと while は「式の値が 0 以外のあいだ繰り返す」文です
!= 0 というのはあなたが読みやすいようにわざわざわかりやすくしているだけです
付けようが付けまいが while 文の意味は最初から変わっていません
920デフォルトの名無しさん:2010/10/23(土) 23:31:38
while (argc){
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
argv++;
argc--;
}
921デフォルトの名無しさん:2010/10/24(日) 00:26:49
--argc; /* argv[0]の分だけ減らす*/
++argv; /* argv[0]を読み飛ばす*/
if (argc == 0) /* パラメータ無し */
do_one(stdin);/*標準入力を処理*/
else{
while (argc--){
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
argv++;
}
}
return (0);
}

上whileが偽の場合だとどこの行に飛ぶんですか
922デフォルトの名無しさん:2010/10/24(日) 00:30:50
え、
923デフォルトの名無しさん:2010/10/24(日) 00:31:07
教科書読めよ
924デフォルトの名無しさん:2010/10/24(日) 00:35:27
入門以前...
925デフォルトの名無しさん:2010/10/24(日) 00:37:03
入門以前ってなんだ?
926デフォルトの名無しさん:2010/10/24(日) 00:37:54
向かない?
927デフォルトの名無しさん:2010/10/24(日) 00:38:46
門前払い
928デフォルトの名無しさん:2010/10/24(日) 00:40:06
対応する括弧すら探せないとか文字が読めないに等しいレベル
929デフォルトの名無しさん:2010/10/24(日) 00:40:35
エディタ変えろ
930デフォルトの名無しさん:2010/10/24(日) 00:50:52
{}←これのせいでわからない基本真の場合次の文を実行、偽の場合その
また次の文を実行するんじゃないの?
931デフォルトの名無しさん:2010/10/24(日) 00:52:23
?
932デフォルトの名無しさん:2010/10/24(日) 00:52:43
{ } 全体で1個の文だと数えればおっけー
933デフォルトの名無しさん:2010/10/24(日) 00:56:17
>>932 だとしたら>>921の場合

{
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
argv++;
}  

このひとまとまりが一文になるんですか
934デフォルトの名無しさん:2010/10/24(日) 01:00:50
はい
935デフォルトの名無しさん:2010/10/24(日) 01:16:43
意味がわからない

ifの場合とwhileの場合の条件式の次の複文は

if(条件){複文、真のとき実行
}

じゃないですか  それなのに>>921のwhile複文は
{
if ((fp = fopen(*argv,"r")) == NULL)
cant(*argv);
do_one(fp);
fclose(fp);
argv++;
}  

こんなに長いです 偽のときどこに行くのかわからないです
936デフォルトの名無しさん:2010/10/24(日) 01:16:54
くぱぁ
937デフォルトの名無しさん:2010/10/24(日) 01:21:52
なぜ短いと意味がわかって長いと意味がわからないんだ
単に長さが違うだけで同じことではないのか
938デフォルトの名無しさん:2010/10/24(日) 01:23:35
>>935
お前の頭がわからない
939デフォルトの名無しさん:2010/10/24(日) 01:28:08
>>935
while文が偽ならば実行されない。
940デフォルトの名無しさん:2010/10/24(日) 01:29:12
お前ら本当に優しいな
941デフォルトの名無しさん:2010/10/24(日) 01:32:52
ifの場合だと最初の{}は真の文ですよね
 if(条件){複文、真のとき実行 }←こんなふうになります{}の後にくるのは
偽の文です

上の場合whileの文は{}の次に}がきているのでわからないんですよ 教科書みても
ないんです


942デフォルトの名無しさん:2010/10/24(日) 01:34:59
そいつは else{ の終わりだ
943デフォルトの名無しさん:2010/10/24(日) 01:36:16
いったん認識をリセットして0からやり直してほしい
944デフォルトの名無しさん:2010/10/24(日) 01:37:41
>>939
cant(*argv); ここにくるのですか

じゃあifとwhileの複文は用途が違うということですね!?
945デフォルトの名無しさん:2010/10/24(日) 01:41:13
用途っつうか複文は単に複数の文を1個の文にまとめるだけで、それ以上でも以下でもない
946デフォルトの名無しさん:2010/10/24(日) 01:41:48
if文とwhile文を使った小規模なプログラムを自分で書いて動作を確認すれば分かるだろ
947デフォルトの名無しさん:2010/10/24(日) 01:49:12
それもそうか 

皆さんの熱意に感動しました それじゃあ おやすみ
948デフォルトの名無しさん:2010/10/24(日) 01:50:10
ソースの参考例が悪いんじゃねぇの?
誰かもっと簡単なソース頼んだw
949デフォルトの名無しさん:2010/10/24(日) 01:54:44
if (argc == 0){
do_one(stdin);
}
else{
while (argc--){

if ((fp = fopen(*argv,"r")) == NULL){
cant(*argv);
}

do_one(fp);
fclose(fp);
argv++;
} // while文を閉じる
} // elseを閉じる

return (0);
}
950デフォルトの名無しさん:2010/10/24(日) 01:56:38
printf ( "10秒前\n" ) ;

while ( count ){
count-- ;
printf ( "%d\n", count ) ;
}

printf ( "発射!!!!\n" ) ;
951デフォルトの名無しさん:2010/10/24(日) 02:07:12
>>950
無限ループ乙
952デフォルトの名無しさん:2010/10/24(日) 02:44:33

--argc; /* argv[0]の分だけ減らす*/
++argv; /* argv[0]を読み飛ばす*/
if (argc == 0) /* パラメータ無し */
do_one(stdin);/*標準入力を処理*/
else{
while (argc--){ ←ここの行のargcは前の--argcを
if ((fp = fopen(*argv,"r")) == NULL)    引き継いでいるのですか?
cant(*argv);               その場合-2されて、argc[1]の場合なら
do_one(fp);                個数0になりcantしてしまうのですが
fclose(fp);
argv++;
}
}
return (0);
}
953デフォルトの名無しさん:2010/10/24(日) 02:51:04
argc-- と --argc の違いはわかってるかな
while (argc--) { は
while (argc != 0) { argc -= 1; と同じだよ
954デフォルトの名無しさん:2010/10/24(日) 02:53:31
同じじゃねーよ馬鹿
955デフォルトの名無しさん:2010/10/24(日) 03:00:21
>>952
argcが先に評価された後に-1されるんだよ。
956デフォルトの名無しさん:2010/10/24(日) 03:02:12
今のコンパイラなら同じじゃないのか?
957デフォルトの名無しさん:2010/10/24(日) 03:03:26
argc-- と --argc の違いがわからないです
どっちも-1になるが代入の仕方が変わってくるそうですが
この文では=はありません
958デフォルトの名無しさん:2010/10/24(日) 03:04:36
i++と++iは違います。i++は、プログラムがその行を実行した後に1増加させます。++iは、プログラムがその行を実行する前に1増加させます。デクリメント演算子も同様です。
959デフォルトの名無しさん:2010/10/24(日) 03:08:43
>>955 なるほど

つまり評価された後-1されてそれを繰り返して0になるわけですね

argv++;は配列のことを言っているのですか?
960デフォルトの名無しさん:2010/10/24(日) 03:11:17
はい
961デフォルトの名無しさん:2010/10/24(日) 03:13:39
厳密にはポインタ演算だよね?
962デフォルトの名無しさん:2010/10/24(日) 03:15:52
大体見えてきました。
夜遅くまで感謝 またわからないことあったらききにきます
963次スレ:2010/10/24(日) 03:32:28
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 71
http://hibari.2ch.net/test/read.cgi/tech/1286717824/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 141代目
http://hibari.2ch.net/test/read.cgi/tech/1286978599/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
964デフォルトの名無しさん:2010/10/24(日) 03:38:49
>>956
今でも昔でも同じじゃねーよダラズ
965デフォルトの名無しさん:2010/10/24(日) 03:53:14
このスレってミスに対して過剰に厳しくないか?
966デフォルトの名無しさん:2010/10/24(日) 06:46:54
言葉で覚えようとすると先は長そう。一生かかるかも
967デフォルトの名無しさん:2010/10/24(日) 08:32:39
次スレ立てます
968デフォルトの名無しさん:2010/10/24(日) 08:33:44
次スレ立てました
C言語なら俺に聞け(入門編)Part 72
http://hibari.2ch.net/test/read.cgi/tech/1287876803/
969デフォルトの名無しさん:2010/10/24(日) 10:16:39
>>968
970デフォルトの名無しさん:2010/10/24(日) 10:19:43
#include <stdio.h>
#include <stdlib.h>

int main(int, char **);
void sub1();
void sub2();
void sub3();

int main(int argc, char **argv){
sub1();
printf("main\n");
sub2();
return(EXIT_SUCCESS);
}

void sub1(){
sub3();
printf("sub1 containing sub3\n");
return;
}

void sub2(){
printf("sub2\n");
return;
}

void sub3(){
return;
}
971デフォルトの名無しさん:2010/10/24(日) 10:21:10
>>970
これの
int main(int, char **);
void sub1();
void sub2();
void sub3();
↑ ここの部分はなぜ必要なのですか?

また、
int main(int argc, char **argv)
↑の引数の意味が分からないので教えてください
972デフォルトの名無しさん:2010/10/24(日) 11:36:59
> ↑ ここの部分はなぜ必要なのですか?
書かなくてもいいかも
973デフォルトの名無しさん:2010/10/24(日) 11:39:41
>↑の引数の意味が分からないので教えてください
return(EXIT_SUCCESS);
974デフォルトの名無しさん:2010/10/24(日) 12:08:47
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
puts ("Hello, world.") ;
return EXIT_SUCCESS ;
}

これ、何やってるんですか、教えてください。っていてるようなもん
975デフォルトの名無しさん:2010/10/24(日) 12:20:29
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
puts ("Hello, world.") ;
return EXIT_SUCCESS ;
}

これ、何やってるんですか、教えてください。
976デフォルトの名無しさん:2010/10/24(日) 12:38:46
977デフォルトの名無しさん:2010/10/24(日) 12:54:29
>>964
何が違うの?ご教授願いたい
978デフォルトの名無しさん:2010/10/24(日) 13:04:10
最近はご教授、ご教示どっちでもよくなったんかな
979デフォルトの名無しさん:2010/10/24(日) 13:05:27
同じと思ったことを書けばいいのに
980デフォルトの名無しさん:2010/10/24(日) 13:09:43
64*64=128ビットの演算をしたいのですが、C言語で計算すると
正しい結果が得られません。CPU自体は計算可能なのでアセンブラならできる
らしいのですがなぜC言語だと出来ないのですか。
981デフォルトの名無しさん:2010/10/24(日) 13:11:53
CPUは?
982デフォルトの名無しさん:2010/10/24(日) 13:13:20
>>980
128bitの型のあるコンパイラなの?
983デフォルトの名無しさん:2010/10/24(日) 13:15:22
構造体配列を使い、三人分の名前・年齢・性別を入力させて
三人分の名前・年齢・性別を出力するプログラムを作ったのですがよくわからないので教えてください

http://codepad.org/2rkZc0oQ

11,12行目のvoid〜とあるのですがvoid型は値を返すことができないと聞いたのですが普通に動作しました

あと構造体配列を関数に渡すやり方?がよくわかってないので
例えば関数として呼び出すときにinputf(data[])、かぎかっこをつけるとコンパイルが通らなくなります
なのにvoid〜とする場合にはなぜ[]をつけなければいけないのかよくわかっていません

どなたか助けてください・・・
984デフォルトの名無しさん:2010/10/24(日) 13:18:28
セレロンT1600です。OSはVista32ビット、環境はCygwin
GCC4.3.4を使っています。計算するためには何が必要か教えてください。
現状では計算ができないのであれば、具体的な対応策(PCやOSを変えるなど)
を教えてください。よろしくお願いします。
985デフォルトの名無しさん:2010/10/24(日) 13:21:31
具体的な対応策って
> アセンブラならできる
って、自分で言ってるじゃん
986デフォルトの名無しさん:2010/10/24(日) 13:25:15
アセンブラはよくらないのでC言語で実装したいのですが、出来ない理由
が知りたいです。128ビットの型があるかどうかわh
987デフォルトの名無しさん:2010/10/24(日) 13:31:04
今使っているコンパイラに128ビット型があるかどうかは分かりません。
988デフォルトの名無しさん:2010/10/24(日) 13:31:15
gccなら128ビットの型を作れるみたいだけど
演算まで面倒は見れくれないと思う
ま、代替え関数でもあれば、アセンブラ使わないですむけど、俺はしらん
具体的にやりたいこと書いてgccスレで聞いた方がいいかも
989デフォルトの名無しさん:2010/10/24(日) 13:32:52
>>983
http://ideone.com/aLq6H
>void型は値を返すことが
何も返してないし何か問題でも

>[]
仮引数の配列は全てポインタとして扱われる
void outputf(value data[]);
void outputf(value *data);
は同一

>呼び出すときにinputf(data[])
配列はポインタへの暗黙変換があるので
inputf(data);

inputf(&data[0]);
として扱われる
990デフォルトの名無しさん:2010/10/24(日) 13:42:41
>>980
お使いのコンパイラでは int 型 が 64ビットとか128ビットになっていないせいかもしれません。
コンパイラがなにか教えてください。
991デフォルトの名無しさん:2010/10/24(日) 13:45:49
CygwinのGCC4.3.4です。
992デフォルトの名無しさん:2010/10/24(日) 13:49:35
mingw32もインストールしてあります。
993デフォルトの名無しさん:2010/10/24(日) 13:56:30
コンパイラの見分け方がわかりません>128ビット対応
994デフォルトの名無しさん:2010/10/24(日) 13:56:49
001.txtから150.txtまでのテキストファイルを任意のフォルダに作成する方法を教えてください
995デフォルトの名無しさん:2010/10/24(日) 14:03:47
cmd.exe起動して
copy 001.txt 適当なフォルダ
以下略
996デフォルトの名無しさん:2010/10/24(日) 14:12:02
なんか怖いプログラムだな
997デフォルトの名無しさん:2010/10/24(日) 14:25:57
64bit*64bit=128bitをやりたいって
8bit*8bit=16bitはかけ算使わないでCで書いたことあるんかね
998デフォルトの名無しさん:2010/10/24(日) 14:27:40
そんな方法あるんですか?
999デフォルトの名無しさん:2010/10/24(日) 14:41:16
結果128bitの人がやりたいことって基本的にbit数が違うだけでしょ
Cで書きたいっていってるから
inline asmだと違うやり方になるけど、かけ算して結果128bitになる命令があるなら
1000デフォルトの名無しさん:2010/10/24(日) 14:44:35
暗号馬鹿といい変なのがよく来るようになったな
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。