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

C言語なら俺に聞け! Part 〈57〉

レス数が1000を超えています。これ以上書き込みはできません。
0001土曜の朝も名無しさんNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

コンパイラを探しているなら >>2-13 を。

上記を逸した場合の結果は激しく未定義だゴルァ!!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0003デフォルトの名無しさんNGNG
前スレ
http://pc2.2ch.net/test/read.cgi/tech/1052542761/
00041日で何も見ずにここまで書けるようになったんだけど凄い?NGNG
#include <stdio.h>
main()
{
int x;
printf("あなたは2チャンネラーですか?yesなら1を、Noなら2を、");

scanf("%d",&x);
switch(x){
case 1:
printf("あなたは2チャンネラーなんですね。");
break;
case 2:
printf("あなたは2ちゃんねらーではないのですね。");
}}





#include <stdio.h>
main()
{
int sn;
printf("弊社製品をお買い上げありがとうございます。CDケースの裏に記載されたシリアルナンバーをご入力ください。");
scanf("%d",&sn);
if(sn==93410507){
printf("登録完了!");
}
if(sn!=93410507){
printf("通報しました。")
}
}
0005デフォルトの名無しさんNGNG
>>1
おつかれ。
0006デフォルトの名無しさんNGNG
>>1
乙
0007デフォルトの名無しさんNGNG
>>4
>yesなら1を、Noなら2を
Yes,Noか
yes,noの組み合わせなら凄い(ってプログラミングに関係無いじゃんw)
return 0;が書かれていないのでだめ。
>}}
重ねるのはどうかな?
>printf("弊社製品をお買い上げありがとうございます。CDケースの裏に記載されたシリアルナンバーをご入力ください。");
途中に'\n'が入っていないので減点。
0008デフォルトの名無しさんNGNG
>printf("通報しました。")
文末のセミコロン抜けてるじゃん
0009デフォルトの名無しさんNGNG
シリアルナンバーって通し番号でしょ?たったひとつでシリアルナンバーというのかな・・・
0010デフォルトの名無しさんNGNG
そこの部署に送られて来るものは一種類しかないと言う事でいいんじゃない?
ってちがうな。固有記号だもんな、変と言えヴァへんw
0011デフォルトの名無しさんNGNG
if(sn==93410507){
 printf("登録完了!\n");
} else {
 printf("通報しました。\n");
}
0012デフォルトの名無しさんNGNG
製品一個梱包するために、そこを書き換えてコンパイルしなおすんだよ。
0013デフォルトの名無しさんNGNG
分割コンパイルの真価が発揮されるね!
001413NGNG
つーかソースファイルはひとつだ。。。
0015デフォルトの名無しさんNGNG
>>11
通報してねえじゃんw
0016デフォルトの名無しさんNGNG
あのー今日Cの入門書買ってきたんですけど、いきなりコンパイルするところで
躓いちゃったんです。

コンパイルしようとすると

KKUFUNCが組み込まれました。

準備ができていません。

って表示されるんですけど、これは何ですか?
入門書にはこういう場合のことは書いてなかったんでもうどうしたらいいか
0017デフォルトの名無しさんNGNG
>>16
無視してもかまわんぞ。あ、でも操作できないのかな? よくわかんないや。

そのメッセージが出るってことはDOSのコードを走らせたっぽいな。LSI-C86か?
0018デフォルトの名無しさんNGNG
だからLSI-C86は使うなとあれほど・・・
0019デフォルトの名無しさんNGNG
下のプログラムはcos(x)をマクローリン展開で求めるものですがこれのsinバージョンを教えて下さい
double cosine(double x){
inti,n=10;   /*nは項数*/
double ans=-1.0,term=1.0,mx=-x*x;
for(i=1;i<n;i++){
term*=mx2/(2*i*(2*i-1));
ans+=term;
}
return(ans);
}
0020デフォルトの名無しさんNGNG
Auron : We called it Sin...
0021デフォルトの名無しさんNGNG
>>17
そうですLSI−C86です。

http://erasea.hp.infoseek.co.jp/cgi-bin/img-box/img20030524170034.jpg

こう表示されるんですが、どうすればいいんでしょうか?
0022デフォルトの名無しさんNGNG
>>19
ans = x, term = x
term *= mx / ((2 * i + 1) * 2 * i);
これでいいのかな
0023デフォルトの名無しさんNGNG
Microsoft .NET Framework 1.0 SDK
こういったフリーのコンパイラって使いやすいですか?
使ってる人、使ったことのあるひとの感想お待ちしてます。
0024デフォルトの名無しさんNGNG
>>23
使いやすい。
0025デフォルトの名無しさんNGNG
>>23
つうか C 言語ではない。
0026デフォルトの名無しさんNGNG
>>21
http://www.lsi-j.web.sh.cwidc.net/freesoft/index_2.html
Q.
“LSI C-86 Ver.3.30c試食版”をWindows 95のMS-DOSプロンプト上で動作させたいのですが、
lcc test.cを起動すると

準備ができていません. 読み取り中 ドライブ A:
中止 (A), 再試行 (R), 失敗 (F)?

と表示されます。
0027デフォルトの名無しさんNGNG
Cゲンゴ入門〜発展(C++?)までお世話になれる製品ありますか?
何がお勧めですか?

0028デフォルトの名無しさんNGNG
LSI-Cの"試食版"はint型が16bitらしいからやめた方がいいよ。
0029デフォルトの名無しさんNGNG
>>27
gcc + g++
0030デフォルトの名無しさんNGNG
>>26
そのページは見てませんでした。ありがとうございます。
でも、今度はそのページに書かれている設定の仕方がわかりません。。。
0031デフォルトの名無しさんNGNG
>>30
http://www.borland.co.jp/cppbuilder/freecompiler/
をインストールして
http://www.cmagazine.jp/setbcc.html
で設定

LSI-Cよりもこっちの方がいい。
0032デフォルトの名無しさんNGNG
>>30
それが判らないならLSI-C86を使うのはやめておけ。
今時intが16ビットじゃ話にならん。
おまけに、ちょっと大きなプログラムやちょっと多めのメモリ空間を
扱おうとすると途端に32KBの壁にぶつかる。
0033デフォルトの名無しさんNGNG
>>32
細かいことだけど訂正。
LSI-C86の試食版はsmall modelしか作れないので、
コードとデータともに64kまで。

# 無論farポインタ使いまくればその制限を突破できるけど、
# ライブラリなんかを自分で作らねばならない。
0034デフォルトの名無しさんNGNG
次の制限は8086で扱えるメモリの壁が!とか?
EMSひっぱりだすか・・・
0035デフォルトの名無しさんNGNG
まあ hello world 作るなら問題ないけどね。
0036デフォルトの名無しさんNGNG
>>31
どうもありがとうございます。それをインストールしました。
でも、入門書はLSI-C86を使って解説してあるみたいなんですが、LSI-C86と同じようにして大丈夫なんでしょうか?
0037デフォルトの名無しさんNGNG
>>36
その入門書がMS-DOSに依存しまくった変な解説してなきゃ大丈夫。
つっても入門者がそれを見極めることは不可能なんだよな…
0038デフォルトの名無しさんNGNG
>>36
使う関数も、<dos.h>に依存した_dos_XXX()やint86()ばかりじゃ
C言語の勉強というよりもMS-DOSの勉強になるから注意だ。
0039デフォルトの名無しさんNGNG
先に答えておくと、
graphic.hというのは
入ってないからね。
0040デフォルトの名無しさんNGNG
あのー、Borland C++ Compiler 5.5ってC++のコンパイラですよね?
Cで書かれたソースもコンパイルできるんですか?

とりあえず入門書に書いてあったとおりにソースを書いてみたんで、それをコンパイルしたいんですが
LSI C-86とBorland C++ Compiler 5.5じゃコンパイルする時に打つ文も(Lccとか?)違うんですかね?

とりあえず、書いたソースをコンパイルさえできれば先に進むことができるんですが。。。
0041デフォルトの名無しさんNGNG
>>40 これ読んでみな。
http://hp.vector.co.jp/authors/VA017148/pages/install/bcc.html
0042デフォルトの名無しさんNGNG
doskey lcc=bcc32 -nologo $*
0043デフォルトの名無しさんNGNG
>>41
コンパイルできました。お付き合いありがとうございました。
0044デフォルトの名無しさんNGNG
#include<stdio.h>

void func(char* p){
p++;
printf("%c",*p);
}

int main(void){

char* str = "hello world";

printf("%c",*str);
str++;
printf("%c",*str);

func(str);
printf("%c",*str);

return 0;
}

よろしくお願いします、funcに文字列の先頭アドレスを渡して
一文字表示すると、「l」と表示されます、ですがメインに帰ってきて
また表示してみると「e」に戻ってしまいます、向こうでインクリメント
しても、mainでは反映されないのでしょうか?funcでインクリメントが
反映されるようにするにはどうすればいいのでしょうか?
0045デフォルトの名無しさんNGNG
>>44
main() の str と func() の str は別もんだよ。
func() 呼び出し時に、main() の str の値が func() の str へコピーされるだけ。
fcun() でどんな風に変えようと main() の str に関係ない。

反映させるには、main() の str のポインタ渡して、 func() 側でそのポインタの示す先 (= main() の str) を変更する。
もしくは、str をグローバルにする。(非推奨)

ちなみに、VB では呼び出され側で ByVal と ByRef キーワードを使ってコピー渡し (値渡し) とポインタ渡し (アドレス渡し) を決められる。
C には、そんなおしゃれな機能はないから、全部自分でやる。
0046デフォルトの名無しさんNGNG
func()でインクリメントしているのはstrじゃなくて、
strの値を渡されたパラメータ(仮引き数)。
strの値をインクリメントしたいなら、
strの場所(strを指すポインタ)を渡し、その中身をインクリメントする必要がある。
0047デフォルトの名無しさんNGNG
ごめん間違えた。

誤: func の str
正: func の p

に訂正。
0048デフォルトの名無しさんNGNG
みなさん、Cを学んでいらっしゃるようですが、
Cってどんな言語なんですか?
メモ帳とか、アプリ作れるんですか?ただ、あの黒い
Dos画面に何か表示させるだけなんですか?
教えてください
0049デフォルトの名無しさんNGNG
Dosアプリが作れる!
0050デフォルトの名無しさんNGNG
>>48
http://pc2.2ch.net/test/read.cgi/tech/1053005739/599
0051デフォルトの名無しさんNGNG
>>48
UnixやWindowsといったOSをつくれる。
そもそも Unix のために生まれた言語。
0052デフォルトの名無しさんNGNG
ファイルから入力するときに、
fgets使うと改行が入ってきちゃって、
fprintで表示しても美しくできません・・・・。
なぜですか???助けて
0053デフォルトの名無しさんNGNG
きれいなコードの定義って何ですか?
0054デフォルトの名無しさんNGNG
#pragmaの存在って?
005544NGNG
>>45
>>46
色々調べてみて、ポインタのポインタ(?)でやってみた所
うまくいきました。親切にありがとうございました!
これでいいのか不安ですが^^;
0056デフォルトの名無しさんNGNG
>>52
man fgets
0057デフォルトの名無しさんNGNG
>>22
遅レスすまそ。さんくす!!!!
0058デフォルトの名無しさんNGNG
>>44
>>45も>>46もそう言ってるが。<ポインタのポインタ
恥ずかしいからダブルポインタなんて言うのだけはやめてくれよな。

>>52
自力で改行コードを取り除きましょう。
char *removeLastNewLineChar(char *str)
{
 if (str) {
  size_t len = strlen(str);
  if (len) {
   if (str[len - 1] == '\n') {
    str[len - 1] = '\0';
   }
  }
 }
 return str;
}
0059デフォルトの名無しさんNGNG
>>58
関数名長げーよー。
chomp でいーだろー。
0060デフォルトの名無しさんNGNG
関数も長げー

char *p = strchr(str, '\n');
if (p)
 *p = '\0';
0061デフォルトの名無しさんNGNG
>>60
それは動作が違うだろう。
"Hello\nWorld\n" を渡したら "Hello" になるぞ。
0062デフォルトの名無しさんNGNG
>>60
関数は元のままでいいと思うが...。
0063デフォルトの名無しさんNGNG
>>58
ダブルポインタって言うよね・・・?
言わないの!?
0064デフォルトの名無しさんNGNG
void chomp(char *s) {
for (; *s && *s != '\n'; s++);
*s = '\0';
}
0065デフォルトの名無しさんNGNG
>>61
確かにもとの関数と同値ではないが、
fgetsの末尾の\nを取り除くのには60ので十分じゃないかな。
0066デフォルトの名無しさんNGNG
>>65
そういう仕様なのを忘れた(知らない)まま他のところで使ってしまって
痛い目をみないための工夫が必要だな。
関数名を remFirstRet にするとか。
0067タブーNGNG
getsを使えばいいじゃん
0068タブーNGNG
つーかファイルからか。getsじゃどちらにしろだめだ(恥)
0069デフォルトの名無しさんNGNG
gets 使う香具師は馘。
0070デフォルトの名無しさんNGNG
char *p = strrchr(str, '\n');
if (p) *p = '\0';
0071デフォルトの名無しさんNGNG
"Good-by\n2ch"が"Good-by"になってしまうぞ。
0072デフォルトの名無しさんNGNG
char *p = strrchr(str, '\n');
if (p && !p[1]) *p = '\0';
0073デフォルトの名無しさんNGNG
char *p = str + strlen(str) - 1;
if (*p == '\n') *p = '\0';
0074デフォルトの名無しさんNGNG
で、エラーチェックっていうか、使用ミス対策をすると
元の>>58になる罠。
0075デフォルトの名無しさんNGNG
if(!*str) return;
0076デフォルトの名無しさんNGNG
処理を1秒おきにしたいときって
どういう風に書けばいいんですか?
0077デフォルトの名無しさんNGNG
if (str && *str && *(str += strlen(str)-1) == '\n') *str = '\0';
0078615NGNG
#include <stdio.h>
main()
{
int a,b,c;
a = 50,b = 30,c =20;
a =a + b;
printf("\d",a + c);
}
007945NGNG
>>58
はぁ ? 誰が「ポインタのポインタ」なんて言ってんだよ。
ダブルポインタ知ってますっていう知ったか厨房君か ?

>>77
>>58 を一行にまとめただけやん。

まあ、fget() なら、改行コードは高々1つだし、改行コードがあるときは文字列の最後なんだし、バッファは自分が確保してるなら NULL かのチェックもサボれるだろうから >>60 で十分だよ。
0080デフォルトの名無しさんNGNG
>>615
コンパイルエラー。俺にもわからん
0081デフォルトの名無しさんNGNG
>まあ、fget() ・・・(一行が長すぎ。改行くらい入れろよ)・・・・>>60 で十分だよ。

あたりまえすぎることをえらそうに。
0082デフォルトの名無しさんNGNG
そういえば、読み直して思いだした。
>>45を最初読んだとき、なんか違和感があった。
このスレの場合、「VBでは」じゃなく「C++では」という人の方が多いから。
0083デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/6552/
0084デフォルトの名無しさんNGNG
>>78
何が書け\d
0085デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
int x;
for(x=2;x<11;x++)
{
printf("繰り返し9回\n");
}
}
0086デフォルトの名無しさんNGNG
なんか馬鹿が増えたなぁ。
0087デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int a,b,c,d;
a=20,b=30;
printf("a=%d\tb=%d\n",a,b);
c=a+b,d=a-b;
printf("和は%d\t差は%d\n",c,d);
}
0088デフォルトの名無しさんNGNG
次のようなプログラムがあるのですが、2回目の test() の呼び出しの時には、
i は 50 で初期化されないのですか?
というか、 static はそもそもそういうものなのですか?


int main(void)
{
        test();
        test();

        return 0;
}

void test(void)
{
        static int  i = 50;
        i += 10;
        printf("i = %d\n", i);
}
0089デフォルトの名無しさんNGNG
>>81
当たり前って言うか >>65 で既出。
でも、>>71 とかアフォなこと言う奴いるから書いただけ。
偉そうな発言に見えた ?
なんかコンプレックスでもあるのか ?

>>82
C++ 知ってる奴なら、>>44 みたいな質問は普通しないだろ。
まあ、>>44 は VB 知ってるという保証はないけど、可能性としては一番高そうに思ったから。
0090デフォルトの名無しさんNGNG
そういうもの
0091デフォルトの名無しさんNGNG
>>88
だってstaticつけたり関数外で定義したものは一度しか生成されないもん。
なら当然初期化は一度だけ。
0092デフォルトの名無しさんNGNG
つーか呼ぶたびに初期化されてしまったらstaticの意味がなくなっちまう。
0093デフォルトの名無しさんNGNG
調べる対象がはっきりしてるのに、
なんで本やウェブで調べようとしないのかがわからん。
0094デフォルトの名無しさんNGNG
#include <stdio.h>
main()
[
int tensu;
tensu=96;
if(tensu>=80){
printf("%d点です。80点以上なので合格",tensu);
}
]
検索してここがでてきたのですが、このコードの悪いところって何ですか?
コンパイルしたらintが間違っていると表示が出ます。
お願いします。教えてください
0095デフォルトの名無しさんNGNG
>>94
[を{に、]を}に書き換える。   とマジレスしてみる。
0096デフォルトの名無しさんNGNG
なんで[]で関数本体をくくるのかわからん。
0097デフォルトの名無しさんNGNG
かぶった。鬱。
0098デフォルトの名無しさんNGNG
Cでテトリス作りたいんですけど何か特別な環境じゃないと
できないとかありますか?
コンパイラはボーランドのフリーのやつです。
0099デフォルトの名無しさんNGNG
がんばってリソースを定義してウィンドウ作って、
APIとかで描画すれば、何の問題もありません。
0100デフォルトの名無しさんNGNG
CでWinアプリ作るのと、Dos画面にコード打って作るのって
基本は一緒なんですか?自分はCを勉強してるんですが、自分は
何を作りたいのか、何を作るためにCを学んでるのかが分からなくなりました。
お騒がせしてすみまそん
0101デフォルトの名無しさんNGNG
基本は一緒。
ただし、C言語を半分理解したあたりでWindowアプリを作り始めるくらいが
ちょうどいいと思う。あんまりDOSに慣れると離れにくくなるし。
こことか参考に>http://www.kumei.ne.jp/c_lang/
010298NGNG
>>99
分かりました。やってみます。
本来「推薦図書・必読書スレ」に行くべきなのですが、ここで
質問させてください。
お勧めのAPI入門書は無いでしょうか?
プログラミングWindows第5版〈上〉Win32 APIを扱う開発者のための決定版! Microsoft Programming Series
と長いタイトルの本がありましたが、どうでしょうか?
0103デフォルトの名無しさんNGNG
>>101
了解です。とても分かりやすいサイトですね。
もっと勉強します。
ありがとうございました。
0104デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
int x;
for(x=0;x=1;x++){
printf("繰り返し\n");
}
}


なんでこれは無限に繰り返されるのでしょうか?


x=1のとき 処理=printf("繰り返し\n"); をするんですよね?
変数の更新は処理が1度行われるごとに実行されるんですよね?

なら、
初期x=0のとき→x=1ではないのでなにもしない
なにもしない処理を行った(こんなのありですか?)ので、変数の更新が実行され、
xに1が足され、x=1になるのでprintfが実行される。
printfが実行されたので、変数の更新が実行され、
xに1が足され、x=2になるので、x=1の条件に当てはまらないので、
printfは実行されない。

よって「繰り返し」は1個だけ表示されるはずだと思いました。

というか処理条件が=のときだけ矛盾しまくります。
例えばfor(x=0;x=0;x++)でやってみると、何も起こりません。
0以外にすると、無限に繰り返されます。
>や>=のときは考えたとおりの結果になるんですが・・・
もしかして処理条件に=(のみ)を使ってはいけないんでしょうか?
0105デフォルトの名無しさんNGNG
==
0106デフォルトの名無しさんNGNG
>>104
x = 1 の実行結果が常に 1 (=真) だから。

int a;
int b = -1;
a = (b = 1);

で、a も b も 1 になるのは知ってるか ?
0107高橋麻奈 12才NGNG
>>104
とりあえず入門書の一冊でも読んでから質問すれや。
0108デフォルトの名無しさんNGNG
>>107
sageるなヴォケ
0109デフォルトの名無しさんNGNG
>>98
参考に
http://www.geocities.co.jp/SiliconValley-Bay/4543/
0110デフォルトの名無しさんNGNG
汎用を凡用などと書いてしまうサイトなど、参考にすることは出来ません。
0111デフォルトの名無しさんNGNG
ま、マジで助けてください。
ボーランドのfreecommandlinetools2.exeをDLしたんですが、
後の作業が分かりません。せっかく本かってきたら、「read.meを
読んでください」だってさ。読んで分からないから本買ったのに。
どなたか教えてください。お願いします
0112デフォルトの名無しさんNGNG
>>111
せめて内容確認してから買えや
0113デフォルトの名無しさんNGNG
>>111
インストールすれば説明書もインストールされるからそれを読めばよい。
0114111NGNG
包装してあったんです。
すみません。
0115113NGNG
つーか読んだのか・・・・
その通りのことをするだけだよ。ファイルをふたつつくる。
0116111NGNG
作るには作りました。
ここから・・・何を?
0117デフォルトの名無しさんNGNG
( ̄o ̄;)
0118111NGNG
( ´∀`){お願い はぁと
0119デフォルトの名無しさんNGNG
<インストールしたディレクトリ>\binをPATHに追加する・・・
0120111NGNG
やること全部書いて。おねがーい。
0121111NGNG
>>119もう、それも終わったよ〜い。
次だよ、次〜
012298NGNG
>>109
ありがとうございます。参考にさせていただきます。
0123デフォルトの名無しさんNGNG
>次だよ、次〜
「次」は無い
0124111NGNG
何を起動させればいいの〜?
わほーい
0125デフォルトの名無しさんNGNG
わほーい(^O^*)
0126111(本物) ◆pTcVZxjbV2 NGNG
なんか知らない間に偽物がイパーイ・・。
マジです。本当にどれを起動させるか分からないんです。
お願いします。
0127デフォルトの名無しさんNGNG
プログラムソースの先頭にそのプログラムの説明を入れたい場合はどうすればいいのですか?
例えば「プリント文の構成プログラム」というのを#include<stadio.h>の上の段に入れてコンパイルしたら
エラーになってしまうのですが。
このように実際プログラムを走らせた時には表示されないがソースを見た時一目で何のプログラムか
分かるように説明を付けたいのですが教えてください
初心者的質問ですみませんどなたかよろしくお願いします
0128デフォルトの名無しさんNGNG
>>127
ttp://www.sra.co.jp/people/miyata/algorithm/inssort.txt
0129デフォルトの名無しさんNGNG
なんで「挿入ソート」をコメントにしないんだろう・・・
0130111(本物) ◆pTcVZxjbV2 NGNG
/*................*/
0131デフォルトの名無しさんNGNG
印刷させる処理ってどうかいたらよいですか?
0132デフォルトの名無しさんNGNG
>>131
OS依存・環境依存の部分が多くあるので、ここで扱うべきではないのですが・・・
0133127NGNG
>>128~130
どうもありがとうございます
こういう書き方すればいいのですね
最近C勉強し始めたばっかでまったく知りませんでした^^;
0134デフォルトの名無しさんNGNG
struct unko{
メンバが5個くらい。
};

void func1(const struct unko baba)
{
func2(unko.メンバ);
}

main()
{
struct unko baba;
func1(baba);
}

というようなプログラムを書く人がいるのですが、
func1のconstは意味があるのでしょうか?
メンバが5個くらいあるので、&babaをfunc1に渡した方がいいような気がするのですが(func1の宣言も変える)。
汚いプログラムですみません。
0135デフォルトの名無しさんNGNG
> func1のconstは意味があるのでしょうか?
func1の定義内では意味がある。
呼び出し側では意味が無い。
ポインタ渡しに返るならconstは重要(Cでもいけたっけ?)。
0136134NGNG
>>135
ありがとうございます。

もうひとつ聞きたいのですが、

void func1(const struct unko *baba)

main(){
func1(&baba);
}

私はこのようにしたほうがすきなのですが、
これに比べ>>134の利点は何かありますでしょうか?
0137デフォルトの名無しさんNGNG
>>136
func1内でのbabaメンバへのアクセスが速くなる。
パラメータのコピーに比べてメンバアクセスの速度が支配的なときは有利になるかもしれん。
0138デフォルトの名無しさんNGNG
>>44の正解プリーズ
0139デフォルトの名無しさんNGNG
>128が何であぼ〜んされてるんだろうと思ったらmiyaか
0140デフォルトの名無しさんNGNG
#include<stdio.h>

char* func(char* p){
p++;
printf("%c(from func)",*p);
return p;
}

int main(void){

char* str = "hello world";

str=func(str);
printf("%c(from main)",*str);

return 0;
}

funcの引数にする
0141デフォルトの名無しさんNGNG
>>137
ありがとうございます。
勉強になりました。
0142デフォルトの名無しさんNGNG
>>140
ドッペルポインタキボンヌ
0143デフォルトの名無しさんNGNG
>>138
あ、ついでに... これにmallocを組み合わせるとメモリリークの可能性があるので注意(笑)
最初に確保したポインタの他に走査用ポインタを用意したほうが良い。
そうしないとmallocで確保したメモリの位置がわからなくなる(んじゃなかったっけ?)

0144デフォルトの名無しさんNGNG
>>142
ダブルポインタ**かい?そんなものつかったら、初心者にゃきつくないかい?
0145デフォルトの名無しさんNGNG
>>144
ドッペルって言いたかっただけですので気にしないで下さい。
0146デフォルトの名無しさんNGNG
だからなんでダブルポインタなんて奇妙な言葉を作るのさ。
そんなことだから面接で「ダブルポインタなら任せてください。
トリプルポインタは苦手ですが。」なんて言う阿呆が出てくるじゃないか。
ポインタにダブルも減ったくれもあるかい。
0147デフォルトの名無しさんNGNG
わりい、「変数のポインタに関するポインタ」にしとくよ。
0148デフォルトの名無しさんNGNG
double pointerはたまに使われるから、それをそのままカナにしてしまったんだろうて
0149デフォルトの名無しさんNGNG
>>146
アホを判別できていいじゃないすか。
ところでポインタのポインタのポインタってながいよね。
0150デフォルトの名無しさんNGNG
で、その「変数のポインタに関するポインタ」を使った>>44の正解教えてください。
0151デフォルトの名無しさんNGNG
>>150
ヴァリアブルのポインタに関するポインタ**かい?そんなものつかったら、初心者にゃきつくないかい?
0152デフォルトの名無しさんNGNG
関するって変な感じ
ポインタのポインタでいいじゃん
0153デフォルトの名無しさんNGNG
>>150
きつくてもいいので教えてください。お願いします。
0154デフォルトの名無しさんNGNG
のアドレス
へのポインタ
0155デフォルトの名無しさんNGNG
#include<stdio.h>

void func1(char** p){
(*p)++;
printf("(from func1) - %s\n", *p);
}

void func2(char* p){
p++;
printf("(from func2) - %s\n", p);
}

int main(void){

char* str = "hello world";

func2(str);
printf("(from main ) - %s\n",str);

func1(&str);
printf("(from main ) - %s\n",str);

return 0;
}
0156デフォルトの名無しさんNGNG
どうもダブルポインタときくと(double *)を連想してしまって困る。
というか、普通(double *)じゃないの? (char **)とかじゃねえだろ。
0157デフォルトの名無しさんNGNG
>>155
ありがとうございます。やっと理解できました。


#include<stdio.h>

void func(char** p){
(*p)++;
printf("%c",**p);
}

int main(void){

char* str = "hello world";

printf("%c",*str);
str++;
printf("%c",*str);

func(&str);
printf("%c",*str);

return 0;
}


ってことですよね。
func(char** p)とfunc(&str);まではいけたのですが、
printf("%c",**p)の **p に気が付かなかった。
0158デフォルトの名無しさんNGNG
英語だと、こうみたいな雰囲気。
pointer to int
pointer to double
pointer to pointer
こっちのほうがずっといいなぁ...
0159デフォルトの名無しさんNGNG
自分はC machine Version 2.00というコンパイラを使っているのですが、
皆さんはどんなコンパイラ使ってますか?自分の使っているコンパイラが
どんなものなのかがよく分かりません。これから、徐々にスキルが上がっても
使用できるものなのか。
オススメがあったら紹介してください。
0160デフォルトの名無しさんNGNG
すれ違い
0161159NGNG
Cのコンパイラの話もダメなんすか
0162デフォルトの名無しさんNGNG
>>161
ダメじゃあないけど、C machineとかいうのはC処理系と似ているようで、
全く違うよくわからんものというコンセンサスがこのスレにはある。

「挙動が変なんだけど」って質問がきたときに、
「それC machine使ってるだろ」って突っ込みに大抵yesだもんで。

まあこのスレ的にはスレ違いと言っといていいんじゃないかな。
とにかくそれはC処理系じゃない。
0163159NGNG
はい。すみません。
スレちがいみたいでしたね。
0164デフォルトの名無しさんNGNG
while文で「enterを入力したら終了」、ていう風にするにはどうすればいいんでしょうか?
0165デフォルトの名無しさんNGNG
while(!enter)
0166デフォルトの名無しさんNGNG
while(enter != '\n')
0167 ◆2bmoujqRHk NGNG
このスレの上のほうで出てますがBorland C++ Compiler 5.5.1ってのは
Cのコンパイルできるんですか?
一般に売ってるCの本で習得した技術だけで使えるモンなのですか?

0168高橋麻奈 12才NGNG
>>167
使えるよ。
インストールのやり方とかコンパイルのしかたは、検索して調べれば、
すぐわかるよ。
0169デフォルトの名無しさんNGNG
http://elife.fam.cx/
0170 ◆2bmoujqRHk NGNG
>>168
レスありがとうございます。
ちょうどいま、高橋麻奈さんの本読んで勉強してるんですよ。
0171デフォルトの名無しさんNGNG
>>164
while(!strcmp(str,"enter")){ ... }
0172デフォルトの名無しさんNGNG
>>171
!はいらんのではないか?
0173デフォルトの名無しさんNGNG
C言語のCって何の略?
普通にComputerのCでいいの?
0174デフォルトの名無しさんNGNG
Bの次のC。よってC自体に意味はない。
0175デフォルトの名無しさんNGNG

   ,,v‐v-/l_  (⌒)
  _「/ ̄  く   /
  lYノノ/_ノl_ヽ))
  <イ( l l )l>  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 <|)'|l、"(フノ|l  < えっちなのはいけないと思います!
  ,(ヨリ<>o<>リ']  \______________
  |ト‐!]-ム- i']l
  ヽ_ノv__l/ /
.  ノ[//‐─‐/_/、
 ( /E|,   (フlヨ \
 ,-| El___lヨ /
└-\`^^^^^^´/
     ̄ ̄ ̄
0176デフォルトの名無しさんNGNG
>>175
'H'ではなく、'C'だっつーとんじゃい
0177デフォルトの名無しさんNGNG
超ナンジャタウンって感じー
0178デフォルトの名無しさんNGNG
   ,,v‐v-/l_  (⌒)プンプン
  _「/ ̄  く   /
  lYノノ/_ノl_ヽ))    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  <イ( l l )l> < Cはいけてないと思います!
 <|)'|l、"(フノ|l    \____________
  ,(ヨリ<>o<>リ、
  |ト‐!、。 ) 。).|
  ヽ_ノv    l |
.  ノ[//  , ./_/
 (  /~'、--‐ソ_)
  ,-i  ヽ/'´ヽ
 └-\.  \  )
     ヽ、__,ノ`
0179デフォルトの名無しさんNGNG
>>178
わかったから服着れ
0180デフォルトの名無しさんNGNG
ディスプレイに表示するにはどうしたらいいんですか。
0181デフォルトの名無しさんNGNG
>>180
ディスプレイと本体の電源入れれ
0182デフォルトの名無しさんNGNG
>>171
だから 0 と比較しないと分かりにくくなるだろうと...。
0183デフォルトの名無しさんNGNG
ディスプレイの定義から始めようか
0184デフォルトの名無しさんNGNG
はぁ?
0185デフォルトの名無しさんNGNG
ひぃ?
0186デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void){
 int a;
 for(;;){
  scanf("%d", &a);
  if (a == 0)
   return 0;
 }
 return 0;
}

これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
mainの引数がvoidだとかいう突っ込みは無しで…
0187デフォルトの名無しさんNGNG
>>186
>scanf("%d", &a);

int の領域に文字列を入力するんだから当然だろ。
0188デフォルトの名無しさんNGNG
scanf()は数字以外の入力を無視するから。
0189デフォルトの名無しさんNGNG
>>187
わかってないなら黙ってろ。
0190デフォルトの名無しさんNGNG
scanf("%s", s);やれってこったな。
0191デフォルトの名無しさんNGNG
いや、ここは素直にfgets()とsscanf()のコンビで。
0192デフォルトの名無しさんNGNG
typedef struct{
struct chinko;
struct manko;
unsigned char hoge; //hogeは可変長
}tbl;
static tbl piyo;
static tbl mona;

こういった状況でpiyoのhogeを
monaのhogeにコピーしたいのですが
どのようにするのが確実で安全なのでしょうか?
構造体同士は
mona.chinko = piyo.chinko;
で、できるのですが
unsigned char同士だとどうもできません。
ご教授お願い致します。
0193デフォルトの名無しさんNGNG
>>186
scanf()はバッファをフラッシュしないから。
「fflush( stdin );」をループの終わりに入れれ。
0194デフォルトの名無しさんNGNG
普通に
mona.hoge = piyo.hoge;
でできると思うが。できないと言うのはどう言うことか具体的にどうぞ。
0195デフォルトの名無しさんNGNG
>>193
数字が来るまでバッファをフラッシュしつづけるのか?
おめでたいな。
0196デフォルトの名無しさんNGNG
> unsigned char hoge; //hogeは可変長

ここがキモなのかな。これで可変長というのは信じられないから、
実際は unsigned char hoge[0];というところなんではないか?
0197デフォルトの名無しさんNGNG
>>195
>>193だと、数字が来てもだろ?
とりあえず、scanf()の戻り値を判定して、
エラーの時にフラッシュする、ってところか。
0198デフォルトの名無しさんNGNG
>>196
さらに、可変長なのに有効データ長もないしな。
0199デフォルトの名無しさんNGNG
>>198
NUL-terminatedなら必要ない。

まぁ、あきらかにコンパイルも通らないコードを示されても話にならんってこった。
0200デフォルトの名無しさんNGNG
>>193
散々既出だが、それは未定義動作。
0201192NGNG
みなさんありがとうございます。

mona.hoge = piyo.hoge;
これでできるのですか・・・
すみません知りませんでした。。。
ウツだ(ry

有効データ長さは4Kくらいっす。。。

ついでに質問なんですが
typedef struct{
struct chinko;
struct manko;
unsigned char hoge; //hogeは可変長
}tbl;
static tbl piyo;
static tbl mona;

typedefっつーのは上記のような使用方法で
いいんですよね?
型が同じ構造体を2つ記述する必要ないから
便利!みたいな?
0202デフォルトの名無しさんNGNG
>>201
> 型が同じ構造体を2つ記述する必要ないから
便利というより、それはしちゃいけない。

Cでは実際の構造が一緒でも、別個に定義されていれば別々の構造体になる。
COBOLなどのように構造が一緒なら同じものと見なされるということはない。
0203デフォルトの名無しさんNGNG
なんか話しがまとまってないね。

>>186

#include <stdio.h>
int main(void){
 int a;
char s[1024]; /* これは適当 */
 for(;;){
  if (scanf("%d", &a)) {
   if (a == 0)
    return 0;
  } else if (scanf("%s", s)) { // バッファをクリアな意味合い※1
   continue;
  }
}
 return 0;
}

// こういうコーディングが良いとか悪いとかは無しで…

> これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
※1
0204デフォルトの名無しさんNGNG
>>201
> mona.hoge = piyo.hoge;
> これでできるのですか・・・
可変長ならできないって...。

void tbl_copy_hoge(tbl* dst, const tbl* src);
という関数を自分で作って、それを使ってコピーすれ。
コピーの方法は、俺らには hoge をどういう仕様にしてるのか分からんので、
自分でやってちょ。
0205デフォルトの名無しさんNGNG
便利なHTML生成プログラムをCで作れますか?
0206201NGNG
>>202サソ

ということは、構造体同士をコピーする際には
構造体を2つ用意する必要があるのでしょうか?
0207デフォルトの名無しさんNGNG
>>203
もしかして、数字が入力されたらscanf("%d", &a)して
文字が入力されたらscanf("%s", s)されるコードを書いたつもり?
0208デフォルトの名無しさんNGNG
>>201
あと、typedef の使い方はあってるけど、仕様目的が違う。
typedef 書かないと

static struct tbl piyo;

とかなるのを

static tbl piyo;

と書けるというのと、
tbl が構造体だということを知らなくて良いという効能がある。

もっとも、後者については tbl.chinko とか直接使う場合には
関係ないんだけどね。


あと、構造体というものがまだよく分かってないように見える。
tbl a; と int b; とを見比べて、
tbl とは何か、a とは何かを小一時間考えるべし。
0209デフォルトの名無しさんNGNG
猫でコピーした丁半ゲームのソースコードをメモ張にペーストして
拡張子.cで保存し、コマンドプロンプトで開くと
「内部コマンドまたは外部コマンド、操作可能なプログラムまたは
バッチファイルとして認識されていません」と表示されます。
なぜですか?
0210高橋麻奈 12才NGNG
>>209
コンパイルしねーと動かねーって。
0211186NGNG
>203
実際のところこれが一番OK?
0212デフォルトの名無しさんNGNG
>>186
>>191参照で。
0213デフォルトの名無しさんNGNG
>>212
> >>191
実際にどうかくべきかじゃなくて、
なんで暴走するか?ってのが、テーマだよね・・・?>>186さん
0214186NGNG
>213
問題はscanfで取得しなかった文字入力をどうやってフラッシュするか…?
0215デフォルトの名無しさんNGNG
そもそもscanfを使うなよという心境の人が多いだろうな
0216デフォルトの名無しさんNGNG
>>213
それなら>>188で。
0217デフォルトの名無しさんNGNG
>>215
そそ、
取得しなかった文字を捨てる(Flush)のではなくて、
ちゃんと取得した上で取捨選択するべきだね。
0218デフォルトの名無しさんNGNG
>>216

> > これを実行した時に数字じゃなくて文字を入力すると暴走するのは何で?
> scanf()は数字以外の入力を無視するから。

質問と回答がまったくもってかみ合っていません。

>>214
フラッシュの方法は、scanf("%s", s)しか思いつきません。
他になにかあったら教えて。
0219186NGNG
>217
ラジャァ。
こんな感じで?

#include <stdio.h>
char buf[256];

int main(void){
 int a;
 for(;;){
  fgets(buf, 256, stdin);/*エラー処理は省略*/
  sscanf(buf, "%d", &a);
  if (a == 0)
   return 0;
 }
 return 0;
}
0220デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
int a;
char buf[256];
while (fgets(buf, sizeof buf, stdin) &&
(sscanf(buf, "%d", &a) != 1 || a != 0));
return 0;
}
0221186NGNG
>220
very thanks!
0222デフォルトの名無しさんNGNG
char wk;
short val;
とありまして
wk に valを代入したいのですが
wk = val;では代入できないものなのでしょうか?

厨房ですみませんがよろしくお願いします。
0223デフォルトの名無しさんNGNG
>>222
できないのわかってて聞いてるんでしょ。
0224デフォルトの名無しさんNGNG
>>222
何ページか先に書いてある。
0225デフォルトの名無しさんNGNG
>>222
処理系によっては警告が出たり、charの範囲を越える値は元に戻せなかったり
するが、代入自体はできるだろ。
0226デフォルトの名無しさんNGNG
どういう意味でできないと言っているのかしらないけど、文法上ならなんの問題もない。
警告は出るかもしれないけど。
0227222NGNG
スミマセンソ・・・

別に釣りしてるわけじゃないんす。。。

こういう場合はmemcpy()でやるもんなんでしょうか?
0228186NGNG
>220たん>221とは言ったものの一応自分流に書き直して書いときます。

#include <stdio.h>

int main(void){
 int a;
 char buf[256];
 while( fgets(buf, sizeof(buf), stdin) != EOF && sscanf(buf, "%d", &a) != EOF ){
  if (a == 0)
   return 0;
 }
 return 0;
}
0229デフォルトの名無しさんNGNG
過労死をさせる日本ロジテム株も大暴落の予感
佐川とロジテムどっちがひどい?
田中真紀子と親密な日本ロジテム(日清系 上場企業 みずほの融資先)の
子会社せいも素(みずほの融資先)で  
サービス残業させすぎの過労死者を出した上、大量の不当解雇を行った社長の辻
にまた労働基準監督署の立ち入り調査があり,またも多くの勧告が出された。
http://www.samos.co.jp
http://tmp.2ch.net/test/read.cgi/company/1046775680/l50
.      / ̄\  +.  ∧_∧アハハハ テンゴクヘイッチャウヨー  +
  イクナヨー( ´∀`)    (´∀` )  
      (つ  つ     (つ  つ■
.   +  ( ヽノ      ( ヽノ
0230デフォルトの名無しさんNGNG
>>228
ネタか?
0231デフォルトの名無しさんNGNG
>>227
>>225-226
0232デフォルトの名無しさんNGNG
>>228
fgetsはEOFは返さないぞ。
0233デフォルトの名無しさんNGNG
>>228
fgets()はNULLと比較するべき。
sscanf()は変換できた個数を返すので、0と比較するか1と比較するか。
0234227NGNG
>>231サソ

ってことはぁ??
memcpy()もダメで、代入も不確か!?

じゃあどのようにすればよろしいのでしょうかぁ〜。。。
0235デフォルトの名無しさんNGNG
>>227
つーか、何をやりたいのか書かないと誰も妥当な解答ができないってば。
memcpy()が駄目なんて誰も言ってないし(やめた方がいいけど)、
>>225は一般論。
0236デフォルトの名無しさんNGNG
charにintを代入したいとかいうやつに限って、実は
charな値ではなく、文字列がほしいという罠
0237227NGNG
>>235ソソ
スイマセンデスタ

デスティネーション側のunsigned char hoge;の
先頭2バイトにshort piyo;の内容を
写したいのです。

charとshortじゃ型が違うので
キレイに収まるのかが心配です。

それで皆様にお伺いをたてている次第であります。
0238デフォルトの名無しさんNGNG
警告を黙らせたいのだったら
wk = (char)val;

だが、このようなコードを書かないようにするのが正道。
0239デフォルトの名無しさんNGNG
>>237
先頭2バイト?配列か?
0240デフォルトの名無しさんNGNG
>>237
そのような話題はこのスレの範疇ではないのだが…
規格外の話なんでな。先頭2バイトってことなら、
memcpy(&hoge, &piyo, 2);
なんだが、なぜそのようなことをやりたいのか…
CPUや処理系によってはやりたいこととかけ離れたコードである
可能性があることは考えておかんと。
0241240NGNG
ていうか、hogeの型はunsigned charじゃないか。
そこに2バイトもコピーしたら領域を破壊するぞ。
0242186NGNG
>230>232>233
寝ぼけてました。逝ってきます。
0243227NGNG
みなさんありがとうございます。

このunsigned char hogeは
ほかの関数から貰う
可変長のデータの先頭アドレスでして。。。

それの先頭2バイトにshort piyoをコピーしたいのです。
0244227NGNG
破壊っすか!???

ってことは・・・
>>243に書いたように
渡されるデータ長さは
最大4Kを超えるんですが
unsigned charで受けるのは
間違いっすか!?????
0245デフォルトの名無しさんNGNG
なんだ、さっきの構造体を拡張したやつか。
そんなイリーガルなプログラムを
捨 て て し ま え。
0246227NGNG
(´Д` )ウワァァン
0247デフォルトの名無しさんNGNG
>>243
なら、
unsigned char* hoge だろ
それなら、
memcpy(hoge, &piyo, sizeof piyo);
0248227NGNG
>>247サソ
(´Д` )ウワァァンアリガ�d!!!!

ヤッテミマスー!
0249デフォルトの名無しさんNGNG
そもそも無闇に可変長構造体を使うのはどうなんだろう。
ポインタをメンバに作って malloc するんではなく、
可変長構造体にする理由っていうと、
その構造体をそのままファイルに読み書きしたいとか、
そういう特殊な事情がある場合だけっしょ?
本当にその手の事情はあるの?
0250デフォルトの名無しさんNGNG
>>249
ファイルに読み書きする場合でも、必ずしも必要ない。
つーか、可変長構造体なんて危なっかしい実装するよりも
手堅く書いた方がメンテナンス性は上がる。

ということで、227にはデータ構造を見直すことを強く勧める。
或いは、そう言うデータが必要かどうか、プログラムの設計を見なおしてもいいね。
0251247NGNG
>>249サソ
ファイルに書きこむとか言う事情はないです。。。

>ポインタをメンバに作って malloc するんではなく
・・・なんかより良い方法があるのでしょうか??
0252動画直リンNGNG
http://homepage.mac.com/hitomi18/
0253デフォルトの名無しさんNGNG
なんだか>>247は日本語の勉強も必要な気がした。
0254デフォルトの名無しさんNGNG
>251
ポインタと malloc 知らずに
どうやって可変長構造体を確保してるの?
と思ったが、そういや
 static tbl piyo;
とか書いてたな。
これじゃダメ。

ポインタ、malloc、可変長構造体の何たるかをよーく勉強しよう。
0255デフォルトの名無しさんNGNG
Linuxでコンパイラはgccを使ってるんですが、
IPアドレスのようなドット区切りの数字を配列に入れる方法がわかりません。
カンマや/でなら入れられるんですが・・・
0256デフォルトの名無しさんNGNG
>>255
どんなコードか晒しなさい。
0257_NGNG
http://homepage.mac.com/hiroyuki43/hankaku09.html
0258デフォルトの名無しさんNGNG
>>255
カンマやスラッシュ、ドットかの違いだけで何故できない?
ソース上の区切り文字を ',' や '/' から '.' に変えるだけだろう。
strtok()使えば簡単だ。

※参照
<string.h>
char* strtok( char*, const char* );
0259デフォルトの名無しさんNGNG
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0  
        
0260255NGNG
#include <stdio.h>
#include <stdio.h>
int main(int argc,char **argv)
{
int i,j;
int x;
unsigned ad[10];
unsigned ip1=0,mask1=0xffffffff;
unsigned ip2=0,mask2=0xffffffff;
unsigned char *a1=(char*)&ip1;
unsigned char *m1=(char*)&mask1;
unsigned char *a2=(char*)&ip2;
unsigned char *m2=(char*)&mask2;
scanf("%d,%d,%d,%d/%d",&a1[0],&a1[1],&a1[2],&a1[3],&a1[4]); printf("%d.%d.%d.%d/%d\n",a1[0],a1[1],a1[2],a1[3],a1[4]);
for(i=0;i<=3;i++) ip1=(ip1<<8)+a1[i];
printf("%d.%d.%d.%d\t\t",a1[0],a1[1],a1[2],a1[3];
mask1<<=(32-a1[4]);
ip1 &=mask1;
}

構成中なのですが、IPアドレスを引数とし入力してネットワークアドレスを算出したいのですが
ドット区切りでの配列への代入がわかりません。
なのでscanfで読み込んでしまっています。
0261デフォルトの名無しさんNGNG
C言語を始めようと思うんですけど、
いまはDOSで何か表示させたりってのができるようになりたいんですが、
Winアプリ作るのとどこの部分が違うんですか?
ソースコードが丸ごと違うのでしょうか?それとも、コンパイラの違い?
WinアプリをCで作るとき、ボタンのサイズとかを全部手動で指定できるのですか?
それはフリーコンパイラでも可能でしょうか?
質問攻めですみません。一応、検索しました
0262258NGNG
>>260
確認事項

1.入力は32ビット整数値ですか??それとも10進文字列ですか?

2.出力は3文字表記できる4つの配列でいいんでか?
(例) 192.168.0.1 の場合、配列をstr[4][4]として
str[0]・・・"192"
str[1]・・・"168"
str[2]・・・"0"
str[3]・・・"1"
と格納されればよいのか?
0263255NGNG
>>262
1.32ビット整数値です。
2.配列を数字として格納できたらいいです。
0264デフォルトの名無しさんNGNG
>>263
sprintf でいいのかな。
0265デフォルトの名無しさんNGNG
お邪魔します、スレッドを荒らして申し訳ありません。
このレスはカキコしたとしても1スレに1回ですのでご許しください。
現在、

Linny開発プロジェクト
ttp://pc.2ch.net/test/read.cgi/linux/1053087824/

にて、第四世代(Winnyの次)となるファイル共有ソフトを開発しています。
Winnyとの最大の違いは一人の開発者が作るのではなく、
オープンソースプロジェクトとして複数の開発者が作るところです。
プロジェクトの発端となる最初の発言者(535氏)が全く使い物にならないため
神の出現を待っております。コーディングができなくても提案などして頂くだけでも結構です。
sourceforge.jpにより開発環境は揃ってますのでだれでも参加可能です。
ちなみに自分はDQNなので全くコードは書けません。
神の出現待っています。お邪魔しました。

ttp://sourceforge.jp/projects/linny/
0266255NGNG
>>264
間違えました…10進文字列です…
テンキーで実行時に./a.out 192.168.0.1
として実行してます。

出力は例の通りでできるといいです。
0267デフォルトの名無しさんNGNG
#define IPADDR_SIZE 4
typedef struct ___tag_ipaddr_t { /* IP アドレス */
 unsigned char addr[IPADDR_SIZE];
 unsigned char mask;
} ipaddr_t;
typedef enum ___tag_BOOL { /* 論理型 */
 FALSE, TRUE
} BOOL;
/* buf は破壊されます */
BOOL str_to_ipaddr(char *buf, ipaddr_t *ip) {
 const char mask_sep[] = "/"; /* マスクとアドレスのセパレータ */
 const char ip_sep[] = "."; /* IP アドレスの桁のセパレータ */
 char *ipstr;
 const char *maskstr;
 const char *token;
 int i;
 /* xxx.xxx.xxx.xxx/yyy の分離 */
 if(ipstr = strtok(buf, mask_sep), ipstr == NULL)
  return false;
 if(maskstr = strtok(NULL, ""), maskstr == NULL)
  return false;
 ip->mask = atoi(maskstr);
 /* aaa.bbb.ccc.ddd の分離 */
 for(i = 0, token = strtok(ipstr, ip_sep);
   i < IPADDR_SIZE;
   ++i, token = strtok(NULL, ip_sep)) {
  if(token == NULL)
   return FALSE;
  ip->addr[i] = atoi(token);
 }
 return TRUE;
}
0268261NGNG
Cmachineってコンパイラとbcpad231ってのどっちがいいと思いますか?
Cmachineのほうが使いやすいんですが、なんかCの処理には向いてないとか・・・。
どっちがいいんですか?
0269258NGNG
>>266

// サンプルプログラム
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
const char sep[] = ".";
char addr[4][4];

// コマンドライン文字列からピリオドを区切り文字として切り出して
// addrへ格納する。
//
// サンプルプログラムなのでエラーチェック省略です。
// コマンドライン引数必須かつ文字数制限厳守!
strcpy( addr[0], strtok( argv[1], sep ) );
strcpy( addr[1], strtok( NULL, sep ) );
strcpy( addr[2], strtok( NULL, sep ) );
strcpy( addr[3], strtok( NULL, sep ) );

///////// 検証のためのデバッグプリント
int i;
for ( i = 0; i < 4; i++ )
printf( "addr[%d] = \"%s\"\n", i, addr[i] );
}

とりあえず机上だけで作成しました。ノーテストでスマソ。
0270_NGNG
http://homepage.mac.com/hiroyuki43/hankaku09.html
0271bloomNGNG
http://homepage.mac.com/ayaya16/
0272デフォルトの名無しさんNGNG
環境依存だけど、inet_addr() はダメなの ?
0273デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int a;
printf("テスト何点でしたか?\n");
scanf("%d",a);
if(a==100){
printf("お疲れ様。");
}

else{
printf("しっかりしろ!まだ頑張れる。");
}
}

何がおかしいのか分からない罠。
正しく動作しないんだよな。これが
0274デフォルトの名無しさんNGNG
26才人妻です。ダンナがかまってくれないので、いつも一人でオナってます。
でも、けっこうオカズに困るんですよね。そんな時見つけたのがYUIS!!
安いし、安心して買えるしなかなかいいですよ!いつもバイブ物買ってます!

http://www.dvd-yuis.com/
0275デフォルトの名無しさんNGNG
>>273
scanf("%d",&a);
0276デフォルトの名無しさんNGNG
ネットのバイト見つけた。バナー収入登録したら1000円くれるってさ。
http://members.goo.ne.jp/home/madcap0       
0277255NGNG
>>267
>>269
ありがとうございました。
これから解読して理解してみます。

また分からない事があったらよろしくおねがいします・・・
0278デフォルトの名無しさんNGNG
>>255
スレ違いだと思うが、↓で「inet_addr」、「inet_ntoa」とかで検索シル!
ttp://www.linux.or.jp/JM/
0279デフォルトの名無しさんNGNG
>>186
mainの引数がvoidなのは別に突っ込まれるようなことじゃないぞ
戻り値がvoidならともかく
0280デフォルトの名無しさんNGNG
最近疑問に思ったんですが、質問してもよろしいでしょうか。
CではWinアプリを作ることができるといいますが、DOSで入力
するのと作成法においてどんな違いがあるのでしょうか?DOS
で扱うにはボタンなどは必要ありませんが、Winアプリにはも
ちろんフォーム、ボタンなどいろいろなものが必要になります
よね?それをCでいちいちサイズなどを指定しないとWinアプリ
は作れないんですか?VB.NETみたいにボタンをマウスを使って
設置できるといいますが、それはCなのですか?C++との作成面での違いは?
文がぐちゃぐちゃですみません。意味不明な文ですが答えれるところがあれば、答えていただきたいです。お願いします




0281デフォルトの名無しさんNGNG
>>280
まずはCUIから勉強すれ!
0282デフォルトの名無しさんNGNG
>>281
むしろ、OSからだろ?
0283デフォルトの名無しさんNGNG
>>280
>>261 と同一人物?
0284デフォルトの名無しさんNGNG

http://www.asahi-net.or.jp/~yf8k-kbys/ckadai5.html
の1. ユーザに入力してもらった数だけ、あなたが好きな言葉を繰り返すプログラムを書いてください。

/* kurikaeshi.c */
#include <stdio.h>

int main()
{
int x;
int a;
printf("好きな整数入力して。");
scanf("%d",&a);
for(x=0;x<a;x++){
printf("あいうえお\n");
}
}




で合ってますか?
0285デフォルトの名無しさんNGNG
>>284
未完成のサイトで勉強するのはやめましょう
0286デフォルトの名無しさんNGNG
ttp://www.asahi-net.or.jp/~yf8k-kbys/newcpp4.html
>「C++でのオブジェクト指向型プログラムとは、クラス、継承、仮想関数を(有効に)使ったプログラムである。」

はぁ?

って、これじゃスレ違いなんでこっちも。
http://www.asahi-net.or.jp/~yf8k-kbys/c3.html
>また、「%d」の間に空白をいれたので、「空白で区切った整数」の入力を待つことになるわけです。
ぽかーん
0287デフォルトの名無しさんNGNG
>>280
DOS(コンソール)アプリとWinアプリではウインドウを作るだけでも大変さが全然違う。
コンソールは
#include <stdio.h>
int main(void){return 0;getchar();}
で出来るが、Winアプリは30行ぐらい必要になる。それを知りたいなら
http://www.kumei.ne.jp/c_lang/ のWindowsSDK編第一部の1~5章ぐらいを
見ると勉強できます。もし30行書くのが面倒なら、MFCという方法でも作れる。
僕はその方法はあまり知らないが、VBとSDKの間と考えると良い。
ボタンを作ると成ると、もっと大変。VBではなくCで作る利点は、基本的に作りやすい
(個人の意見)、必要なものだけ使うから速い、一度作ってしまうと(関数、クラス)
使い勝手が良い等。作るスピードでも最初はVBの方がかなり速いが、プログラム
サイズが大きくなるとVBを追い抜く。Cができるなら、VBではなくCでWinアプリを
作るのを進める。がんばれ!
0288デフォルトの名無しさんNGNG
>>287
またそんなことをいって・・・
0289デフォルトの名無しさんNGNG
>>287
途中からCとC++とが区別できなくなったようだ。
0290デフォルトの名無しさんNGNG
C言語+SDKだけで開発してる香具師ってまだ居るの?
漏れは3.1以来やってないが…
0291デフォルトの名無しさんNGNG
>>290
普通わざわざCじゃやらねぇべさ。
尤も、C++と言ってもC++らしい使い方できない香具師が多いのだが。
0292デフォルトの名無しさんNGNG
>>288
間違えていたことを教えたならスマソ。
>>289
いや、書き忘れです。でも、本当に区別できてないかも。
>>290
僕がその香具師です。ボタンとかもリソース系を一切使わずに、コードのみ
で。昔、将棋もそれで作りました。
>>291
多分僕がそう。違うだろうけどCはコンソールC++はウインアプリとその違い
だけで区別しています。
0293デフォルトの名無しさんNGNG
よく分かっていないのなら、こんな所で回答しない方が良いのでは :)
0294デフォルトの名無しさんNGNG
>>293
あちらこちらで同じような質問がおっぱおあったので。
0295デフォルトの名無しさんNGNG
>>292
オブジェクト思考ができずに使うC++はC+お仕着せのクラスだけの代物。
C++を使うと言うからには、(クラスを設計するだけが全てではないが)
データのカプセル化、処理の抽象化ができなければ意味がない。
具体例を挙げるわけにはいかないので曖昧な表現で申し訳ないが、
例えば>>286に挙げられているC++の講座などは勘違いの代表例かと。

確かにGUIはクラス化すると継承させて綺麗に実装できるように見えるのは事実。
しかし、C++の本領は寧ろ、GUIとは切り離された、アルゴリズムの実現で
発揮されるものだと思う。
なので、C++(≠VC++)を使いこなそうと思うなら、例えば日付でもいい、
例えば座標空間でもいい、そうしたものを巧く抽象化したクラスを実装してみてはどうだろう。

と、これだけだとC++スレに行けと言われそうなのでCのフォローも。
C++を完全に使いこなすことは難しい(と言うか多分無理)だが、
Cならライブラリも含めて多いに使いこなせると思う。
そのためにも、既存の入門書の嘘に振り回されずに
自分でマニュアルを見、テストコードを書き、
ansiなどの仕様を確認する能力を養うべきだろう。
その技術はC++でも立派に役に立つ。
#結局C++かい>自分
0296デフォルトの名無しさんNGNG
C >>>>>>>>>>>>>>>>>>>>>>> C++
0297デフォルトの名無しさんNGNG
C++というかOO関係のスレへ逝けや
0298デフォルトの名無しさんNGNG
C++相談室に来られては困るから、OO厨房は戦場では必要なしスレでどうぞ。
0299デフォルトの名無しさんNGNG
私はオブジェクト思考に拘っているわけじゃないんで念の為。
長年構造化に拘ってきた結果として、クラスという
データのカプセル化(など)に着目しているだけだ。
まぁ、構造化プログラミングができない奴から見れば
オブジェクト思考との区別がつかないのも仕方ないとは思うが。
0300デフォルトの名無しさんNGNG
「オブジェクト“思考”ができずに使うC++〜」と言いだしたのは誰なのかと
これだからOO厨は
0301デフォルトの名無しさんNGNG
>>300>>298>>297
で、あなたたちはC++をどう捉えているの?
0302デフォルトの名無しさんNGNG
#include <stdio.h>

int main( void )
{
  while( 1 )
  {
    printf( "ぬるぽ" );
  }
  return 0;
}
0303デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
 for(; ;)
 {
  printf("ガッ >>302");
 }
 return 0;
}
0304デフォルトの名無しさんNGNG
>>301 スレ違い
0305デフォルトの名無しさんNGNG
>>304
禿しく同意
0306デフォルトの名無しさんNGNG
pascalの型定義をC風に書くにはどうすればいいんでしょうか?

pascalだと
type line = packed array[1..10] of char;
var x = line;
な感じです。
0307デフォルトの名無しさんNGNG
それはいったい何をしたいコードなのか書けよ。
それともpascalも知らない厨房には聞いていないということか?
0308デフォルトの名無しさんNGNG
>>306
typedef char line[10];
line x;
0309デフォルトの名無しさんNGNG
C では添字が 0 から始まる点に注意ナ。
0310デフォルトの名無しさんNGNG
struct person{
char name[10];
char address[20];
char age[3];
}p;
構造体のメンバを参照するとき,p.nameのようなメンバ名ではなく
「上からi番目のメンバ」のように指定することはできないでしょうか?
どなたか教えてください。
0311デフォルトの名無しさんNGNG
packedってなに?
0312デフォルトの名無しさんNGNG
>>310
できません。配列を使いましょう。
0313デフォルトの名無しさんNGNG
>>310
enum person_index_t
{
 PERSON_NAME, PERSON_ADDRESS, PERSON_AGE
};

char* person_entry(struct person* p, enum person_index_t i)
{
 switch(i)
 {
 case PERSON_NAME: return p->name;
 case PERSON_ADDRESS: return p->address;
 case PERSON_AGE: return p->age;
 default: assert(0);
 }
}

生の値で指定するのは超絶危険行為。
列挙子を使う事。
0314デフォルトの名無しさんNGNG
>>313
> 生の値で指定するのは超絶危険行為。

どういうこと?
0315デフォルトの名無しさんNGNG
enum person_index_tを配列の添え字にしてはいけないんだろうか。
0316デフォルトの名無しさんNGNG
>>310
union使ったら?
0317310NGNG
お返事ありがとうございます。
何とかループで上のメンバから順番に処理したいのですが・・・
やはり312さんの言うとおり配列に1つ1つ入れるしかないのでしょうか
0318デフォルトの名無しさんNGNG
ループ使わなければならないほどメンバーが多いのか?
俺ならひとつずつ処理するが。
0319306NGNG
>>307
型をそう定義するというだけで特に何をしたいというわけではありません。
「型定義」といって同じようにCで通じるのかと思い書いてみました。
pascalしか知らない日本語の不自由な厨房でごめんなさい。

>>308
サンクスコ、やってみます。

>>309
了解

>>311
配列の各要素のメモリ領域を小さめに確保するみたいです。
実行結果に変わりは無いはずです。
0320デフォルトの名無しさんNGNG
>>319
型定義はわかるが、packedなんて知らないし。

調べてみたが、pascalって配列にも詰め物がつく場合があるのか・・・・
0321デフォルトの名無しさんNGNG
教訓:プログラマ界での通用度
C>日本語>英語>その他>>>>>pascal
0322デフォルトの名無しさんNGNG
>>320
Cでもつくときはつきますが何か。
0323デフォルトの名無しさんNGNG
>>322
実際には多くメモリを確保しても、sizeofの結果にその部分が反映されることはないだろ?
0324デフォルトの名無しさんNGNG
>>320
あるだろね。というかpaddingは言語に関係なく必要だったりする。
それをプログラマに意識させるかどうかは別として。

奇数番地から始まるint(16bitとか32bit整数)を参照したら、
bus errorとかの例外が発生するプロセッサがあるしね(68kなど)。
x86でもそういう参照の仕方をしたら例外が発生しないまでも、
性能が大幅に落ちるし。
0325デフォルトの名無しさんNGNG
>>314
person(&p, 0); とか、生の値でやるのが危険だということ。
仕様変更に弱いし、読みにくいし。

>>317
enum person_index_t
{
 PERSON_NAME, PERSON_ADDRESS, PERSON_AGE,
 PERSON_NUM /* ← これを追加 */
};

にして、

int i;
struct person p;
for(i = 0; i < PERSON_NUM; ++i)
{
 char* entry = person_entry(&p, (person_index_t)i);
 /* entry を使ってほにゃらら */
}

とすれば可能。
一応ね。
ただ、保守はしにくくなると思われ。
0326デフォルトの名無しさんNGNG
>>325
あ、やっぱりマジックナンバーのことか。
Perlだとやっちゃう人多いかも(モードの指定とか)
0327デフォルトの名無しさんNGNG
>>310
つーか、何がやりたいのさ。
>>323
sizeofに反映されなかったらmalloc()できませんが。
0328デフォルトの名無しさんNGNG
>>327
え!? じゃあchar a[23];と定義した場合、sizeof s==23になるとは限らないの!?
もしそうならsizeof s/sizeof s[0]で要素数を得るというポピュラーな方法が使えなくなるけど。
0329328NGNG
sizeof aだ(鬱)
0330デフォルトの名無しさんNGNG
>>328
sizeof に反映されるからこそ、その方法が使えるのでは?
単体の sizeof でも padding を含めたサイズを返す、
ということを「反映される」と表現してるんじゃない?
0331デフォルトの名無しさんNGNG
hBitmap = LoadBitmap(hInst, "IDB_BITMAP1");

ビットマップのハンドルを取得するのはこれではいけないんでしょうか?
どうしてもビットマップの表示がうまくいかず、ここに原因があることは分かったんですが……
0332デフォルトの名無しさんNGNG
……
0333デフォルトの名無しさんNGNG
>>331
>>1くらい読め。
0334デフォルトの名無しさんNGNG
何の話?>>331
環境依存ならその環境のスレに行ってください。
0335デフォルトの名無しさんNGNG
>>331
来ると思ったぜ、おまえ絶対1読んでないだろ。
教えてもいいが示しが付かんのでとりあえずWin32APIスレに行け。
0336デフォルトの名無しさんNGNG
>>331
じゃ、このスレ的な解答。

・コンパイラからは警告が出なかったか。
・関数の仕様(マニュアル)はよく読んだか。
・変数の型は合っているか、引き数の型は合っているか。
以上チェックするように。
0337デフォルトの名無しさんNGNG
良回答者だ。
0338331NGNG
API質問スレなんてあったんですね……
大変失礼いたしましたm(_ _)m
0339331NGNG
>336
どうもありがとうございます。
それで解決しないようでしたらAPI質問スレの方に行かせていただきます。
0340bloomNGNG
http://homepage.mac.com/ayaya16/
0341デフォルトの名無しさんNGNG
>>317
1つずつ入れて行けばいいのですよ。
何を困っているのか解りませんが・・・。

>>318
配列から配列へ、互いに添え字やポインタのインクリメントが
使える代入の繰り返し処理でしかループは使わないよな。
0342デフォルトの名無しさんNGNG
データファイルを出力する関数は何ですか?

for(i=0;i<=n;i++){
printf("%d,%f\n",i,A[i]);
}

画面に表示される数字の羅列をテキストファイルに出力して
後からエクセルなんかにテキストファイルから値を
インポートしてグラフを書きたいのです。
助けて下さい。
0343342NGNG
アゲー
環境はリナックスです。おながいします。
0344デフォルトの名無しさんNGNG
fprintfとか使えばいいけど、
面倒ならリダイレクトしとけばいいんじゃね?
0345342NGNG
>>344
ありがとうございます!
試して見ます!
0346デフォルトの名無しさんNGNG
>>342
プログラム無改造で、 ./a.out > hoge.txt
0347動画直リンNGNG
http://homepage.mac.com/hitomi18/
0348デフォルトの名無しさんNGNG
ポインタについて質問です。
10分ほど本を読んだら理解したつもりになりました。確認させてください。

ポインタとは、
変数のアドレスを格納するアドレス。変数の先頭アドレスそのものではなく、
先頭アドレスという値を格納した別の場所であることに注意。ポインタ自身は
何のポインタであろうが32ビットのlong型変数。

なぜポインタを利用するかは、
第1の利点は、関数が実行されるとき、実際にはPC内で引数の変数を新たに
コピーして作成している。なので変数によっては(文字列や構造体や浮動小数点)
メモリを大きく消費する。ポインタにしておけばどんな変数でも32ビットですむ。
そう考えれば逆に、intなどの大してメモリを消費しない変数ではポインタを
使用しない場合が多い。
第2の利点は、外部からポインタの実体を変更したらそれが反映する。
関数だと戻り値は1つしか作れないが、ポインタならばいくつでも外部から
変更が可能。

以上です。間違ってたら指摘してください。

あと、ポインタのポインタとは具体的にどのようなケースで使用するのか教えてください。
0349デフォルトの名無しさんNGNG
ポインタのポインタ例文

char *aho="aho";
char *baka="baka";
char *manuke="manuke";

char *text[] = {aho,baka,manuke,aho};

void hoge(int n)
{
printf("%s\n", *(text+n)); // text(=&text[0])がポインタのポインタ
}
0350デフォルトの名無しさんNGNG
解釈はちょっと変。

第1の利点は今時利点じゃないね。

第2の利点は説明が変だけどそう言うこと。

ポインタのポインタは、ポインタの値を関数で変更したいときに使える。
即ち、整数を関数で変更するときに整数のポインタを渡すが如く
ポインタを関数で変更するときにポインタのポインタを渡すわけだ。
0351デフォルトの名無しさんNGNG
>>348
> 変数のアドレスを

NG: 変数とは限らない。(関数へのポインタ、文字列定数へのポインタなどもある。)

> 格納するアドレス。変数の先頭アドレスそのものではなく、
> 先頭アドレスという値を格納した別の場所であることに注意。

意味不明。

> ポインタ自身は何のポインタであろうが32ビットのlong型変数。

NG: そもそも long 型が 32bit とは限らんし。

> 第1の利点は、...

NG: 今時メモリーなんか気にするな。
  気にするのは、配列や配列を含んだ構造体軟化の時だけだ。
  そう言う風にポインタ使うと遅いし、コードがでかくなることが多い。

> 第2の利点は、...

OK: 日本語がが変だけど、関数内で複数の値を戻せると言うなら OK と見なす。

> あと、ポインタのポインタとは具体的にどのようなケースで使用するのか教えてください。

10年早いと思う。
0352デフォルトの名無しさんNGNG
>>348
ポインタのポインタの使い道がわからないっていうやつ結構多いけど、
intのポインタを使うのと同じ理由でポインタのポインタが使えるだろ。
関数に渡してポインタの指す先を変更してもらいたいなんてのも一つの例だし。
複数の場所で一つのポインタを共有したいときなんかも。
0353352NGNG
かぶった。
逝ってくる・・・。
0354342NGNG
>>346さん!
本当に有難うございます!
助かりました!
y(^v^)y
0355y(^v^)y NGNG
y(^v^)y
0356デフォルトの名無しさんNGNG
>>349
あんまり例がよくないような。textそのものはポインタの配列だし。
確かに、*(text+n)を評価するときにtextはポインタに縮退するけど。
0357デフォルトの名無しさんNGNG
ポインタのポインタ関連の話なのですが、2次元配列のmallocの仕方を教えてください。
具体的にはchar型でn*mの2次元配列をmallocしたいのです。
char *b;
char **p;
b=(char *)malloc(n*m*sizeof(char));
p=(char)malloc(m*sizeof(char));
p=b;

でだめでした・・・。
0358デフォルトの名無しさんNGNG
ミス
p=(char)malloc(m*sizeof(char));


訂正

p=(char *)malloc(m*sizeof(char));

0359デフォルトの名無しさんNGNG
>>357-358
ちょっとぐらいググれよ。
"malloc 2次元配列" でググレばたくさん出てくるぞ。

とりあえず http://www.borland.co.jp/qanda/lang/l0001842.html とか。
0360デフォルトの名無しさんNGNG
>>358
2次元配列分の一次元配列を確保し、利用方法で逃げるのが常道。

char *pArray = (char *) malloc(n * m * sizeof(char));
for (im = 0; im < m; im++) {
for (in = 0; in < n; in++) {
pArray[in + im * n] = 0;
}
}
0361デフォルトの名無しさんNGNG
C++では、単行変換されたあと算術変換されますが、
Cではどのような順序で変換が行われるのでしょうか?
0362デフォルトの名無しさんNGNG
>>361
質問が曖昧過ぎる。
0363361NGNG
例えば、
char char_dt;
float float_dt1,float_dt2;
long long_dt;
double double_dt;

float_dt2 = char_dt * long_dt +float_dt1 / double_dt;

のような式の場合、

char_dtとlomg_dtの計算のときは、いっきにlongに変換されるのでしょうか?
0364デフォルトの名無しさんNGNG
一気にの意味がわからん
途中があるのか?
0365デフォルトの名無しさんNGNG
>>363
アセンブラリストを出して追え。
0366361NGNG
>>364
c++では、charがintになったあとlongになってるらしいんで
0367デフォルトの名無しさんNGNG
毎日毎日時間が空いてて暇をもてあましている通信高校生ですが、
日々ネトゲと2chしかやらないのもどうかと、何かしらの勉強でもしてみようかと思い立ちました。
それなりに難しくても実用的なものは無いかなーと思ってたんですが・・・
その中で見つけた候補の一つがC言語です。

C言語は知っていると何が出来ますか?
C++等似通ったものも幾つかあるようですが、その違いは?
何というか本当に何も知らない状態なんで的をいてなくて曖昧で阿呆な質問、
その上微妙にすれ違いだと思うんですが他に該当スレが見当たらないもので。
暇な人、居たら教えてくれると幸いです。良さそうなら明日あたり書店にでも出向いてみようと思います
0368342NGNG
>>367
まずlinux導入してみたらどうよ?
C言語は元々unixから生まれたもんだよ。

「Windowsなんて糞。」
なんて事を回りに言えるようになりますよ。
それ言うだけでコイツlinux使えるのかよって一般人はビビルよ。

で
>>346これがリダイレクトするっつう事ですかね。
0369デフォルトの名無しさんNGNG
>>348
誰も突っ込まないので突っ込んでおく。

>ポインタとは、変数のアドレスを格納するアドレス。

「アドレスを格納するアドレス」って言うのはどういう事よ?(w
ポインタの前に「メモリ」と「アドレス」の勉強しる!
0370デフォルトの名無しさんNGNG
>>369
>>351 ですでに突っ込まれてるよ。
0371デフォルトの名無しさんNGNG
>>360
sizeof(char)なんてやめろYO!
0372デフォルトの名無しさんNGNG
>>360
ループで回さないでcalloc()使えyo!
0373360NGNG
>>371
おっといけない、元のコードに引き摺られた。
>>372
まぁ、ループの回し方のサンプルと言うことで。
0374デフォルトの名無しさんNGNG
>>368
>「Windowsなんて糞。」

漏れはLinuxは好きだけど、こういう低レベルなこと言うヤシを増やしてほしくないぞw
0375デフォルトの名無しさんNGNG
>>374
最後の行がオチだったんじゃないかな。
0376デフォルトの名無しさんNGNG
こんばんわ。
出力ファイル名をコマンドラインの第一引数で受け取るというプログラムを
作ってもらえませんか?
出力ファイル名は12文字以内のフリーフォーマットです。
0377デフォルトの名無しさんNGNG
376ですが、
 C言語でお願いします。
0378デフォルトの名無しさんNGNG
こらー!宿題か!
0379デフォルトの名無しさんNGNG
376です。
はい、宿題です。
どうしてもわからないもので・・^^;
0380デフォルトの名無しさんNGNG
>>379
>>1読め。宿題スレは別にあるぞ。
0381デフォルトの名無しさんNGNG
あ、はい。わかりました。
すみません。
0382デフォルトの名無しさんNGNG
文字列の配列の中身をかえる関数をかいたのですがうまくいきません。
関数内で暴走してしまいます。
main()
{
char str[20][20];
int i;
ReadSttring(str);
for(i=0 ; i<20 ;i++){
printf("%s", str[i]);
}
}

void ReadString(char str[20][20])
{
FILE *fp;
中略
for(i=0 ; i<20 ; i++){
fets(str[i], 20, fp):
}
}
0383カーニハン三世NGNG
>>382
fets()関数はfgets()関数の間違いだと思いますが、
まずそのfgets()関数の戻り値のNULLチェックをしましょう。
0384デフォルトの名無しさんNGNG
多次元配列のアドレスを示すポインタをつくりたいのですが、今は単純に以下のように作っています。
------------------------------------------------------
    int dat0[5][3];
     ……

    {
     int data;
     int *pDat;
     pDat = (int*)dat0;
     data = checkMatrix( pDat, 3, 2 ); // [3][2]の値を得る
    }

    // ノード [a][b] に アクセス する
    int checkMatrix( int *pMtx, int a, int b ) {
     return pMtx[a*3 + b];
    }
------------------------------------------------------
しかし、次元は固定なのでもっとスマートにtypedef を 用いて作りたいのですが、
 typedef int MDAT[5][3];
 MDAT dat0;
  ……
この時のMDAT型データへのポインタ pDatは
 MDAT *pDat;
 pDat = &dat0;
でいいのでしょうか?また、ノードへのアクセス関数は

 // ノード [a][b] に アクセス する
 int checkMatrix( MDAT *pMtx, int a, int b ) {
  return pMtx[a][b]; // それとも return (*pMtx)[a][b]; か ?
 }

でいいのでしょうか?どうか、ご教授お願いします。
0385デフォルトの名無しさんNGNG
int (*pDat)[3];
0386デフォルトの名無しさんNGNG
レジスタ変数使うと処理速度あがると教科書に書いてあったのに
実際使ってみると遅くなってるんですが
何故でしょうか?
僕の環境のせいでしょうか?
0387386NGNG
#include <stdio.h>
#include <time.h>


int main(void)
{
register unsigned int i_r, j_r;
unsigned int i_a, j_a;
unsigned long sum = 0;
time_t time1,time2;

/*レジスタ変数の場合*/
time(&time1);
for(i_r = 0; i_r < 30000; i_r++){
for(j_r = 0; j_r < i_r; j_r++){
sum++;
}
}
time(&time2);
printf("sum = %lu , time = %f\n",sum,difftime(time2,time1));
0388386NGNG

sum = 0;
              /*レジスタ変数を使わないとき*/
time(&time1);
for(i_a = 0; i_a < 30000; i_a++){
for(j_a = 0; j_a < i_a; j_a++){
sum++;
}
}
time(&time2);
printf("sum = %lu , time = %f\n",sum, difftime(time2,time1));

return 0;
}

こんな感じで実行したら
sum = 449985000 , time = 3.000000
sum = 449985000 , time = 2.000000
こうなりました。
0389デフォルトの名無しさんNGNG
アセンブラを見て考えたら。
0390デフォルトの名無しさんNGNG
いまどきのコンパイラならregister修飾なんか黙殺だろ。
0391デフォルトの名無しさんNGNG
黙殺ならまだいいがかえって足引っ張ってるんじゃないか?
0392デフォルトの名無しさんNGNG
何にせよtimeではねぇ。精度1秒では何とも言い難い。
0393386NGNG
i_a,j_aにvolatile付けたら
sum = 449985000 , time = 3.000000
sum = 449985000 , time = 7.000000
こうなりました。
コンパイラで最適化されてたと言う事でしょうか?
余計な修飾子つけるよりコンパイラに任せた方がイイというわけですか・・・
ちなみにBorland C++ Compiler 5.5使いました。
レジスタより早くなるってのはどういう原理で早くなってるのだろう・・・

>>392
もっと精度を高くするには自分で関数つくらないとダメなんでしょうか?
0394デフォルトの名無しさんNGNG
>>393
clockを使う。
time1 = clock();
for(i_r = 0; i_r < 30000; i_r++){
for(j_r = 0; j_r < i_r; j_r++){
sum++;
}
}
time2 = clock();
printf("sum = %lu , time = %f\n",sum, (double)(time2 - time1) / CLOCKS_PER_SEC);

で↓にgcc -Sで吐かせたもののclock〜clockまでを貼り付けておく。
ほとんど変わらなかった。
0395394NGNG
レジスタ変数の場合
call _clock
movl %eax,%esi
xorl %edx,%edx
.align 4
L14:
xorl %eax,%eax
leal 1(%edx),%ecx
cmpl %edx,%eax
jae L13
.align 4
L18:
incl %ebx
incl %eax
cmpl %edx,%eax
jb L18
L13:
movl %ecx,%edx
cmpl $29999,%edx
jbe L14
call _clock
0396デフォルトの名無しさんNGNG
レジスタ変数を使わないとき
call _clock
movl %eax,%esi
xorl %edx,%edx
addl $16,%esp
.align 4
L24:
xorl %eax,%eax
leal 1(%edx),%ecx
cmpl %edx,%eax
jae L23
.align 4
L28:
incl %ebx
incl %eax
cmpl %edx,%eax
jb L28
L23:
movl %ecx,%edx
cmpl $29999,%edx
jbe L24
call _clock
0397394NGNG
>>394
× gcc -S
○ gcc -O2 -S
0398386NGNG
>>395,396って意味不明。
いちいちコンパイルしなくても実行結果がわかるって事です?
もしそれなら便利な機能だけど・・・どこをどうみたらいいのやら
コンパイラのマニュアル見てみるか・・
0399デフォルトの名無しさんNGNG
>>398
> いちいちコンパイルしなくても

いやコンパイルした結果だ。機械語を見てもいいけど、それじゃなおさら分かりにくいだろ。
0400386NGNG
borlandC++ではコンパイルしてもそんなの出てこないです。
とりあえずgccってのでやってみよう。
分かる人には>>395、396を見ただけで結果が理解できるのでしょうか?
0401394NGNG
>>400
eax、edx、ebxとかがレジスタ。
レジスタ変数にすると、このレジスタに優先的に割り付けられる。
しかし両者を比較しても、ラベル名が違うのとaddl $16,%espが
追加されているくらいで、レジスタへの割り付けられ方は同じ。
registerの指定が効いていないってこと。
ちなみにi_r、i_aがedxにj_r、j_aがeaxにsumがebxに割り付けられている。

bccでも似たようなものを吐かせることができるはずなので
試してみてください。(オプションは違いますが)
コンパイラによって多少差がありますので。
0402386NGNG
実行時間じゃなくてメモリへの割り当て具合が分かると言うことでしょうか?
奥が深い。
理解できるようにがんばるっす!
0403384NGNG
>>385
すいません。まだよく判らないので教えてください。

 typedef int MDAT[5][3];
 MDAT dat0;
  ……
 int (*pDat)[3];
 pDat = &dat0;

ということなんでしょうか?
また、その時のCheckMatrix関数の引数はどのように記述すればいいのでしょうか?

int (*pDat)[3];
こういう記述は初めてなので、私はげしく勘違いしてるかもしれませんが
よろしくお願いします。

0404デフォルトの名無しさんNGNG
>>403
要素数3のint配列を指すポインタ 括弧をつけないとint *の配列になってしまうからつけた。

int dat0[5][3];
int (*pDAT)[3]=dat0;
0405山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0406デフォルトの名無しさんNGNG
書籍の専門スレって何処ですか?
0407デフォルトの名無しさんNGNG
癇にさわる書き込みだな。
0408デフォルトの名無しさんNGNG
>>406
推薦図書/必読書のためのスレッド PART 10
http://pc2.2ch.net/test/read.cgi/tech/1051496506/
0409デフォルトの名無しさんNGNG
>>406
なぜこのスレで質問した?
0410デフォルトの名無しさんNGNG
1に書籍は専門の別スレがあるとあったので・・・
書籍、で検索して出てこなかったのでここで質問してみました。
関連スレのリンクも張ってあると良いかなーとか思ったりして
0411名無しさんNGNG
関連ではないけどね
これを関連といってしまうと、他の言語も関連だと思うし
0412デフォルトの名無しさんNGNG
VCなんですが、あるWindowsで動いてるプロセスの指定したメモリアドレスの値を取得したい場合は
どうしたらいいのでしょうか?

たとえば起動しているaaa.exeのメモリ0x41000の値を10進数で表示したいという感じです
04131NGNG
わざわざ「ここ注目」と書き加えたのに。
0414デフォルトの名無しさんNGNG
>>412
スレ違い
0415デフォルトの名無しさんNGNG
>>412
ReadProcessMemoryだが、スレ違い。
0416デフォルトの名無しさんNGNG
初心者には標準Cでできるかどうか判断する力はない罠
0417デフォルトの名無しさんNGNG
>>416
だから、みんな教えてるんじゃないか
0418デフォルトの名無しさんNGNG
ごめんなさい、探してきます

>>415
取っ掛かりが分かった気がします
ありがとうございました。
まだ不明な点はのこっていますが移動先で聞いてみます
0419デフォルトの名無しさんNGNG
16桁の2進数の変数aを10進数に変換したいのですが
どうすれば良いですか?
0420デフォルトの名無しさんNGNG
strtolしたあとにsprintf
0421デフォルトの名無しさんNGNG
switch文で、

選んで入力してください

 1.・・・
 2.・・・
 3.・・・

=>[3]

というものを作っているのですが、たとえば「3」を入力するとプログラムを終了させるようにするには
どのようにすればいいのでしょうか?
0422名無しさんNGNG
exit(1);

を実行する

一応検索して調べといてくれ
exitについて
0423名無しさんNGNG
あ、
#include <stdlib.h>
をインクルードしておいてくれ
ん?
この文だと二重インクルードになって舞うか?

この関数は、プログラムを終了させてくれる関数です
引数に1を渡すと、異常終了だったっな・・・
0424421NGNG
お手数かけました。早速調べてみたら。ありました。
ほんとにありがとうございました
0425デフォルトの名無しさんNGNG
>>421
abort();
0426デフォルトの名無しさんNGNG
abort(); イキナイ
0427デフォルトの名無しさんNGNG
>>424
exit をしなくても、プログラムが終わるようにプログラムすればそれで良い。
 int main() {
  printf("Hello, world!¥n");
  return 0;
 }
には exit はないが、プログラムは終わる。
main にまで戻って return すればプログラムは終わるのだ。

>>423
二重インクルード防止コードは全ての標準ヘッダファイルに書かれている。
そのような心配はする必要ない。

>>419
「進数」という概念は値自身の持ってる属性ではない。
値を表示しようとした場合に生じてくる属性である。
例えば、
 a = 0x20;
と
 a = 32;
は人間が読む分には違いがあるが、値は全く同じである。
また、a の内容を全く変える事なく
 printf("0x%02X¥n", a);
は 0x20 を表示するし、
 printf("%d¥n", a);
は 32 を表示する。
0428デフォルトの名無しさんNGNG
exit使ってmain以外でプログラムを終了させることは構造化を乱すことになるとか。
うーん?
0429デフォルトの名無しさんNGNG
>>427
> #include <stdlib.h>
> をインクルード

という文章が2重インクルードになってるという意味だと思われ。

>>428
main内でもexitはいやんだろ。本当は関数途中でのreturnもうれしくない。
もしかしたら関数の最後にクリーンアップ処理が書いてあるかもしれない。
0430デフォルトの名無しさんNGNG
プログラムの終了コードはぬるぽに統一しよう!!
0431デフォルトの名無しさんNGNG
int型変数の各桁の値を取り出す方法はありますか?
例えば変数に1234という値が入っていて、10の位を取り出す場合
3という値を得たいのです。よろしくお願いします。
0432デフォルトの名無しさんNGNG
10で割り、その値を10で割った余りを求める。
0433デフォルトの名無しさんNGNG
>>431
int a = 123;
printf("%d\n", a / 10 % 10);
0434デフォルトの名無しさんNGNG
>>431
あります。
0435デフォルトの名無しさんNGNG
あ、そうか…ありがとうございます
0436デフォルトの名無しさんNGNG
switch(n){

case 1:
while( ( c = getchar() ) !=EOF)
putchar( test1(c) );

break;

case 2:
while( ( c = getchar() ) !=EOF)
putchar( test2(c) );

break;

        ・
        ・
        ・

}
という風に作ったのですが、入力→出力→入力→出力→・・・
となってしまいmainに戻れません。
break;の使い方が違うのでしょうか。
どうすればいいんでしょうか。どなたかお願いいたします。
0437384NGNG
>>385
>>404
ありがとうございました。
ステップアップ目指してぜひ習得したいと思いますが、

すいません、もう2点質問いいでしょうか?

int dat0[5][3];
int (*pDAT)[3]=dat0;

1)
このポインタを用いての要素へのアクセスは
pDat[a][b] でいいんでしょうか?

2)
pDAT = (キャスト?)0x80000;

の場合のキャスト書式はどのようになるのでしょうか?

よろしくお願いします。

0438436NGNG
すいません、戻るではなく終了でした。戻るってのは前にwhile(1)使ってたからでして・・
0439436NGNG
またまたすいません、自己解決しました。
0440デフォルトの名無しさんNGNG
C言語って何が出来るの?
興味持ったから少し検索して初心者向けのページとか見たりしてみたんだけど、
何処も「機械に命令を出す事が出来る」程度にしか書いてないんだよね。
それを使って何が出来るのかが知りたいのだけれど・・・

例えばランチャー等のアプリとかもC言語で作れるんですか?
ゲームなんかもC言語で作られてるものが多いと聞いた記憶があるんですが、
要するに何でも作れるって事なんでしょうか。
0441デフォルトの名無しさんNGNG
431でも出てた任意の整数の任意の桁の数値を抽出するソース教えてください。
例)1234と言う数字から10の位の3と言う数字を抽出する

0442デフォルトの名無しさんNGNG
>>441
死ね
0443デフォルトの名無しさんNGNG
>>441
どっかの学校の宿題なのか?
0444デフォルトの名無しさんNGNG
>>440
心配するな、お前には何も作れないから。

>>441
int extract(int n, int k)
{
 switch(k){
 case 4:
  return n / 1000 % 10;
 case 3:
  return n / 100 % 10;
 case 2:
  return n / 10 % 10;
 case 1:
  return n / 1 % 10;
 default:
  fprintf(stderr, "対応してね−よ。\n");
  return 0;
 }
}
0445デフォルトの名無しさんNGNG
最近C言語初めてばかりのものですが自分も441の方法知りませんので知りたいです。
上の433に書いてる>>431って432の書き間違いですよね^^;
>>443
441のソースてか命令文って学校の宿題にでるぐらい簡単なことなのですか?
0446デフォルトの名無しさんNGNG
選択ソートのプログラムで標準入力から最大100個までの配列データを
読み込んで小さい順にソートし、結果を出力するプログラムを作る。
作ってはみたんですが、例えば50個のデータをソートすることが出来ませ
ん。どうすればいいんですか?ちなみに最初に要素の個数を指定することはできません。
0447デフォルトの名無しさんNGNG
>>446
最後の行をもっと詳しく
0448431NGNG
>>441は私じゃないですよ…
0449デフォルトの名無しさんNGNG
>>445
10の位はその数字を10で割ったものを10で割ったあまりだということくらい理解できませんか?
0450デフォルトの名無しさんNGNG
>>446
こっちのスレにいってくれ。

C/C++の宿題やらせてください。7代目。
http://pc2.2ch.net/test/read.cgi/tech/1053963794/150
0451デフォルトの名無しさんNGNG
>>445
算数の問題だと思うんだけど…
0452441NGNG
>>449
おお そういうことだったのか^^;
頭の回転悪くて理解できなかったw
0453デフォルトの名無しさんNGNG
>>446
要素の個数を指定できるように作り直せ
0454デフォルトの名無しさんNGNG
>>448
わかってるよ。
あんたは直後のレスで理解したんだろ?
問題はそれで理解できずにさらに聞くやつら。
ってゆーかもしかして同じ学校?
0455デフォルトの名無しさんNGNG
>>447
>>453
要素の数を指定してはいけないんです。
0456デフォルトの名無しさんNGNG
>>455
あれだけの情報でまともな答が返ってくると思ってんの?
つーか、宿題スレにカエレ
0457bloomNGNG
http://homepage.mac.com/ayaya16/
0458デフォルトの名無しさんNGNG
リダイレクトって何ですか?
0459デフォルトの名無しさんNGNG
とりあえずググれ
0460デフォルトの名無しさんNGNG
>>446

#include<stdio.h>
#define N 100

main(){
int i,j,min,x[N];
for(i=0;i<N;i++)
scanf("%d",&x[i]);

for(i=0;i<N-1;i++){
for(j=i+1;j<N;j++){
if(x[i]>x[j]){
min=x[i];
x[i]=x[j];
x[j]=min;
}
}
}

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

これを改良してデータ数が100未満でも動くようにして下さい。
0461デフォルトの名無しさんNGNG
宿題スレに行け
しかもまだ情報不足
0462デフォルトの名無しさんNGNG
質問させてくださいっ。

unsigned longに4294967295(0xffffffff)を入れて
printf()しようとしたところ"%d"では上手く表示できませんでした。
(2147483647:0x7fffffff)までは上手く表示できることを確認。

で、ネットで4294967295をprintf()で表示させる方法を探したところ
"%lu"、"%u"を発見。やってみたところ上手くいったんですが、
この"%lu"、"%u"って一般的に使用しますか?

既出だったらすみませんがよろしくおねがいしますm(__)m
0463440NGNG
>444
そんなみ身も蓋も無い事言わないで教えて下さいよ つД`)
それともその返答の中にはお前以外なら作れる、つまりC言語でアプリとか作れる・・・という意味が込められてるんでしょか
0464デフォルトの名無しさんNGNG
>>462
符号あり・なしって知っている?
0465デフォルトの名無しさんNGNG
>>462
一般的に、printfのフォーマットは引数の型に合わせて使います。
%luでも%uでもうまくいったのは、longとintのサイズがたまたま同じだったからでしょう。
0466デフォルトの名無しさんNGNG
int main(void){
return 0;
printf("hello, world\n");
}

こういう書き方するとhello,worldが出力されませんよね。
関数内でreturnのあとの文を実行させる方法ってありますか?
0467デフォルトの名無しさんNGNG
goto
0468デフォルトの名無しさんNGNG
int *a;
a = (int *)malloc(sizseof(int)*5);

これで要素5つの領域がaに確保されることを教わったのですが、
mallocの前の(int *)は何を意味していて何故必要なのでしょうか?
0469カーニハン三世NGNG
>>468
malloc() が void* 型だからです。 a に代入するため
int* 型でキャストします。
                           以上
0470デフォルトの名無しさんNGNG
>>466
atexit();

0471デフォルトの名無しさんNGNG
>>468
mallocの戻り値をint *へキャスト。
stdlib.hさえインクルードしていれば必要ないよ。もっとも、C++としてコンパイルするのなら必要だけど。

>>469
そういう理由じゃないと思う。
0472デフォルトの名無しさんNGNG
>>471
おいおい・・・
0473デフォルトの名無しさんNGNG
>>466
何のために?
return は関数を終わらせるために書くものなのに、
何でその後を実行する必要があるんだ?
0474デフォルトの名無しさんNGNG
void*からint*に暗黙に変換できることを知らない人が一人紛れ込んでるようですね
0475デフォルトの名無しさんNGNG
voidがなかったころにchar *で代用していたからキャストしていたんじゃないの?
0476デフォルトの名無しさんNGNG
移植しやすいようにするためじゃあ?
0477デフォルトの名無しさんNGNG
意味するところと必要性を問われて、理由を勝手に推測するスレはここですか?
0478デフォルトの名無しさんNGNG
名前欄に「山崎渉」って書けないんだけど、なんで?
0479山崎­渉NGNG
ほんとに?
0480デフォルトの名無しさんNGNG
意味するところと必要性を問われて、理由を勝手に推測するスレはここですか?
0481デフォルトの名無しさんNGNG
int foo:
char buf[256];

fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &foo);

とあった場合、 buf を "%d" でパースして int 型に変換して、それを foo に入れる、
という理解で会ってますか?
0482デフォルトの名無しさんNGNG
C FAQ すらも読まずに質問に答えるスレはここですね?
0483デフォルトの名無しさんNGNG
括弧の連続は4つが許せる限界。
0484デフォルトの名無しさんNGNG
>>483
誤爆?
複雑な場合は括弧が連続しないように書けばいい。
0485デフォルトの名無しさんNGNG
perlみたいなかんじで
!open(...) || exit(-1);
とかやったら コンパイルエラー
0486デフォルトの名無しさんNGNG
>>485
当たり前だ。exitは戻り値なし(void)だからだ。
0487デフォルトの名無しさんNGNG
>>485
openできたら終了しちゃうのか?

open(...) ? (void)0 : exit(-1)
0488デフォルトの名無しさんNGNG
stdlib.hをインクルードしなければエラーにならないかもな。
0489たまちゃんNGNG
今、会社で初めてC言語を勉強し始めたのですがif文や配列、関数、ポインタなど
理解が出来なく困っています。そこで、本当に初心者でも理解ができ、
社会で使えるくらいの知識がつけられる参考書を教えてほしいのですが?
0490デフォルトの名無しさんNGNG
そもそもexit()に-1を渡すのはやめれ。
0491デフォルトの名無しさんNGNG
>>489
ない。
0492デフォルトの名無しさんNGNG
そのopenがUNIXのopenなら、!をつけるのはやめろ。
0493デフォルトの名無しさんNGNG
>>489
まずは>>1を見る事からだな
0494デフォルトの名無しさんNGNG
>>489
http://pc2.2ch.net/test/read.cgi/tech/1051496506/
0495デフォルトの名無しさんNGNG
この問題が解ける人はソースを載せてください。
結構難しいと思います。挑戦待ってます。C言語の問題です。

氏名と5科目の点数を標準入力から読み込み、ファイル「gakusei.dat」に保存するプログラムkakikomiを作成せよ。但し、氏名は最大20文字とし、「Q」を入力した時点で終了するものとする。また、学生のデータは構造体を用いて管理せよ。
0496デフォルトの名無しさんNGNG
>>495
http://pc2.2ch.net/test/read.cgi/tech/1053963794/l50
0497デフォルトの名無しさんNGNG
>>496
すいません。
スレ違いでした!
0498デフォルトの名無しさんNGNG
http://jbbs.shitaraba.com/computer/2364/
“ヘ( ̄- ̄ )カモォーン♪
http://homepage3.nifty.com/coco-nut/
0499デフォルトの名無しさんNGNG
>>463
必要な情報を提示して質問できない奴はプログラマになれない。
ただそれだけ。
0500440NGNG
>499
必要な情報って?
自分の質問読み返しても別にそんな情報が要るような質問じゃないと思うのだけれど・・・
0501デフォルトの名無しさんNGNG
>>473

あー、たぶんあれだ。
内部処理の終了を待たずにリターンしたいんだろね。
スレッドという言葉を466に教えるといいことありそうだ。
0502デフォルトの名無しさんNGNG
>>440
> 要するに何でも作れるって事なんでしょうか。
ほとんどなんでも出来ることは確かだが、それを楽に実現できるかどうかは別問題。
Cに限らずなんでもやってみないことには始まらない。
0503デフォルトの名無しさんNGNG
お聞きしたいのですがwhile文の結果を使ってさらにwhile文を実行できないのでしょうか?
したのソースはコンパイルは問題なく出来たのですが下半分が機能してくれません
原因を教えてください
/*入力した任意の数値の桁数を調べるソース*/
#include<stdio.h>
#include<math.h>
main()
{
int a,b,c,i;
scanf("%d",&a);
i=0;
while(i>=0)
{
c=pow(10,i);
b=a%c;
if(a==b)
break;
i++;
}
printf("%d",i);
/*これ以降は任意の数字のそれぞれの桁の数字を抽出するソースであり上のところで調べた桁数だけループする*/
int d,e;
int j;
j=0;
while(j==i)
{
e=pow(10,j);
d=a/e%10;
j++;
printf("%d桁目の数値は%dです",j,d);
}
}
0504デフォルトの名無しさんNGNG
while (j == i) は while (j != i) じゃないか >>503
0505デフォルトの名無しさんNGNG
>>503
ブロックの先頭以外で
int d,e;
int j;
は宣言できるか?

それと、この場合whileよりforの方が適当だとは思わないか
0506503NGNG
>>504
ホントだ継続条件間違ってました^^
言われたとおり==を!=に変えたら機能しました
どうもありがとうございます
0507503NGNG
>>505
ブロックの先頭以外でも宣言はできました。
あとお聞きしたいのですが自分はまだC勉強し始めたばかりなのですが
forとwhileの使い分けについてまったく分かりません自分にはまったく同じ物にしか思えなくて^^;
使い分けについて簡単に教えていただけないでしょうか
0508デフォルトの名無しさんNGNG
判定式とインクリメントをまとめるのと
continueしたときは動作が違う。
0509デフォルトの名無しさんNGNG
>>507
> ブロックの先頭以外でも宣言はできました。
多分 C++ を C のように使っている状態だと思います。

> forとwhileの使い分け
基本的に for 文はループが進むごとに何かを次に進める時に使います。
0510デフォルトの名無しさんNGNG
あなたが探してる話題あれはこれでしょ♪
http://endou.kir.jp/betu/linkvp/linkvp.html
0511503NGNG
>>508,509
ありがとうございます勉強になりました
0512デフォルトの名無しさんNGNG
趣味でプログラミング始めてみたんですがマルチモニタ環境じゃないと非常に作業しづらいですね
0513デフォルトの名無しさんNGNG
へえ。そうですか。
0514デフォルトの名無しさんNGNG
>>511
参考書によっては書いてあるかもしれないが、
for と while は基本的に同じものだ。
for(A;B;C)D; <=> A;while(B){D;C;}
0515デフォルトの名無しさんNGNG
ttp://www9.plala.or.jp/sgwr-t/c/S/smpl02-3.html
の
float x,y[] = { 1.1,2.8,6.5 }; /* yをfloat型3個の配列で宣言後、初期化 */
の注釈間違ってますよね?          ↑ここは「xとy」ですよね?
0516デフォルトの名無しさんNGNG
>>514
>>508
0517デフォルトの名無しさんNGNG
>>515
注釈は合っているが、
そういう宣言の仕方は(可読性が)良ろしくない。
x と、y の要素の型を確実に同じにできるので、
その事に意味があれば多少保守性は上がるけどね。
0518デフォルトの名無しさんNGNG
>>517
ではfloat x,yのxはどういう意味なんでしょうか?
0519ずれてましたNGNG
float x,y[] = { 1.1,2.8,6.5 }; /* yをfloat型3個の配列で宣言後、初期化 */
の注釈間違ってますよね? ↑ここはyだけになってますが、「xとy」ですよね?
0520デフォルトの名無しさんNGNG
>>518
float x,y[] = { 1.1, 2.8, 6.5 };

は

float x;
float y[] = { 1.1, 2.8, 6.5 };

と同じ。
x は float 型の変数。
0521デフォルトの名無しさんNGNG
>>520
そうですか!
勘違いしてたみたいです。
0522デフォルトの名無しさんNGNG
>>500
要は、お前は「車ってどこへ行けるの ?」って聞いてるのと同じだよ。
あるいは、「車でディズニーランド行ける ?」って聞いてるのと同じ。
ディズニーランドが1つじゃないように、ランチャーだっていろいろある。

そもそも環境もわからんし、環境を書いて聞くスレじゃないし。
0523デフォルトの名無しさんNGNG
>>500
その質問は FAQ なので、みんな嫌気が差してる。

回答は「その気になりゃ大抵の事はできる」だ。
あとはやる気の問題。
0524初心者プログラマーNGNG
こんばんわ。いまCでプログラムを書いています。一応書いてはみたのですが、
自信がありません・・・。
そこで、プログラムソースを添削していただきたいのですが・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1054220849_1/report2-3.c
ここにソースを置いています。覗いてみてください、お願いします。
0525デフォルトの名無しさんNGNG
>>524
マルチポストうざい
0526デフォルトの名無しさんNGNG
>>524>>525
それに直リン?が嫌。直リンとは、直接ファイルの所に行く事か
ttp://として、サーバーの負担をなんたらの事かどちらか分からんが。
これに乗じて質問します。貼るなら以下のように貼るのが良い。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=69
0527デフォルトの名無しさんNGNG
PocketCってC言語の勉強にも利用できますか?
0528デフォルトの名無しさんNGNG
>>521
ついでに言うと、float *x,y;としたとき、ポインタになるのはxだけ。
0529デフォルトの名無しさんNGNG
>>527
PocketCがAnsiCとどれだけ違うか把握してからなら兎も角、
AnsiCに慣れていないのなら激しくお勧めしません。
0530デフォルトの名無しさんNGNG
>>527
ちょっと調べてみた。
http://www.din.or.jp/~matusima/ce/pocketc/diff.html
学習用には +激しくお勧めできない+
これはCをわかってる人、もしくはプログラムさえできりゃなんでもいいと思ってる人が使うものだ。
0531デフォルトの名無しさんNGNG
void Count(char *cnt)
{
intCNT;

CNT = 1;

CNT ++;

cnt = (char *)&CNT;

}
こんな関数があったとして
main側でcntを受け取ったときに
cnt = 2;と認識できますか?

0532デフォルトの名無しさんNGNG
できない
0533デフォルトの名無しさんNGNG
無茶苦茶だな
0534531NGNG
まじすか・・・

どうやったらできるんでしょうか。。。
0535デフォルトの名無しさんNGNG
>>531
それがだめな理由わかる?
0536デフォルトの名無しさんNGNG
>>534
cnt = (char*)2;
0537直リンNGNG
http://homepage.mac.com/yuuka20/
0538デフォルトの名無しさんNGNG
>>534
まず何がしたいのかが理解できない。
0539デフォルトの名無しさんNGNG
void Count(char *cnt)
{
int CNT;

CNT = 1;

CNT ++;

*cnt = (char)CNT;

}
0540531NGNG
>>535
CNTのアドレスが渡ってるだけ??
ですか?
0541デフォルトの名無しさんNGNG
>>531は事実上何もしない。
0542デフォルトの名無しさんNGNG
*cnt = CNT;
0543デフォルトの名無しさんNGNG
文字列リテラルに特定の文字をいれると(為替など)コンパイル時に
警告:不適切なエスケープ:\<0x91>
と出ます。
実行すると文字化けしてしまいます。
UNIXなんですが、どなたか対策しりませんか?
0544デフォルトの名無しさんNGNG
【緊急】ちょっと現調いってきてください!
名前: 頭脳土方
E-mail: [email protected]
内容:
現調にいってくれるひと募集。
5月31〜6月1日 宿泊費、交通費、でます。
もちろん、現調なのでお金払います。(値段は相談)
C++が分かる人。開発室と電話連絡しながら、
コンパイルしたりテストしたり、してください。

メール [email protected]

もまいら、よろしくおねがいします。


0545デフォルトの名無しさんNGNG
>>543
どんな文字入れたの?
0546デフォルトの名無しさんNGNG
>>543 SJIS なんか使うな。
0547デフォルトの名無しさんNGNG
>>543
Shift-JISで一部の文字が\とかぶるものがあったとおもうけど、それか?
0548カーニハン三世NGNG
>>540
CNTはCount()関数内だけの一時変数です。つまりCount()関数が
実行中の時だけスタックに存在する変数です。
ですからCNTのアドレスを上位関数へ渡しても、Count()関数を
抜けたらお仕舞い。
上で*cntを参照すれば、Unix/Linuxなら Segmentetion Fault、
Win32なら アプリケーションエラー だぞ。(偶然落ちないこともあるが)

アドレス(ポインタ値)を返せるのはstatic変数だけ。(例:strtok()関数など)
0549デフォルトの名無しさんNGNG
>>548
それ以前に返してないってば。代入しているのは仮引き数のみ。
0550デフォルトの名無しさんNGNG
>>543
ソースをこういうのに通せ
#include <stdio.h>
#define iskanji(c) ((0x81 <= (c) && (c) <= 0x9f) || (0xe0 <= (c) && (c) <= 0xfc))
#define ESC '\\'

int main(void)
{
  int in_string = 0, kanji1 = 0;
  int before = 0, c;

  while ((c = getchar()) != EOF) {
    if (in_string) {
      if (kanji1) {
        if (c == ESC)
          putchar(ESC);
        kanji1 = 0;
      }
      else if (!kanji1 && iskanji(c))
        kanji1 = 1;
      else if (before != ESC && c == '\"')
        in_string = 0;
    }
    else if (before != ESC && c == '\"')
      in_string = 1;
    before = c;
    putchar(c);
  }
  return 0;
}
0551デフォルトの名無しさんNGNG
コテって無能が多いね。
0552カーニハン三世NGNG
>>549
>>551
あ、・・・・
よく見たらスタック上の引数のコピーに代入してるだけじゃん(撃)
俺のレスまで無意味だった。 激しく逝って来る・・・
0553デフォルトの名無しさんNGNG
Visual C++じゃなくてBoriand C++を今買って学習するのは無謀でしょうか。
0554デフォルトの名無しさんNGNG
>>553
かわずとも・・・cygwinとかWideStudioとかLinuxとかBSDにあんだろ。
0555デフォルトの名無しさんNGNG
>>553
BCCなら只だから
その分、書籍に金をまわせるが
0556デフォルトの名無しさんNGNG
>>553
Borland C++の方が簡単にアプリが組めるという点ではよい。
ただ、それで勉強しなくなるなら結果的によかったのかわからないけどね。
0557556NGNG
あれ、C++Builderでなくタダのほうのことだったか
逝って来よう・・・・
0558デフォルトの名無しさんNGNG
C++ Builder簡単に組める=馬鹿でも組めるからダメだろ(w
0559デフォルトの名無しさんNGNG
>>558
実際にVisual C++買って難しくて挫折する人は多いと思うよ。
それならC++Builderで何かしら作れたほうがいいとも言える。
誰にでも組めるっていうのもいいものだよ。
とりあえずちょっとしたもの1つ組めれば次に進む気になるからね。
0560デフォルトの名無しさんNGNG
ホントにC言語を勉強したいなら、GNUが使えるLinuxなんかを
ダウンロードしてCD-Rに焼いてインスコすれば、安上がりだし
WindowsでもフリーなBorland BC++5.5がある。

C言語でWinアプリを組めばメッセージ駆動の勉強にもなっちゃうよ。
独力で .rcの記述をしながら、WinMain()、WinProc() のデザインから
始めるのも良いかも。
0561デフォルトの名無しさんNGNG
時は金なりだからね。何が安いかわからないよ。
フリーのCコンパイラで勉強して、それではWinのアプリが簡単には組めないことがわかって結果的にCはやめてVBにいったりする。
C++Builder1万円って社会人にはそんなに高くないんじゃないの。
これで何か作れる喜びを味わえるなら安いくらいかも。
0562デフォルトの名無しさんNGNG
#include <stdio.h>
void main(void){
int n[3],i;
for(i=0;i<3;i++){
printf("n[%d]=",i+1);
scanf("%d",&n[i]);}
for(i=0;i<2;i++){
if(n[3]>n[i]){
printf("rejected\n");}}
for(i=0;i<2;i++){
if(n[3]<=n[i]){
printf("approved\n");}}}
これを「n[1],n[2]のどちらかがn[3]より小さいならrejectedを出力し、
n[1],n[2]の両方ががn[3]以上ならapprovedを出力する」ソースにしたいです
そのままではapprovedが2回出るだけなので、
どうしてそうなるのか非常に悩んでいます
0563562NGNG
n[1],n[2],n[3]がどんな値でも実行したらapprovedが
2回出ることを追加しておきます
0564デフォルトの名無しさんNGNG
>>562
int n[3]と宣言して n[3]と比較するのは
これいかに。いやどうかと。
n[3]と宣言した場合使えるのはn[0]〜n[2]まで。
0565デフォルトの名無しさんNGNG
口から悪魔が出てきますな.
0566デフォルトの名無しさんNGNG
>>560
CDライターが高い
0567デフォルトの名無しさんNGNG
Cって日本語が使えないんですか?
0568デフォルトの名無しさんNGNG
使えません。

こちらへどうぞ。
http://pc2.2ch.net/test/read.cgi/tech/1051184396/
http://pc2.2ch.net/test/read.cgi/tech/1015170837/
0569デフォルトの名無しさんNGNG
#include <stdio.h>

#define MAX 5

main()
{
int i, point[MAX], total=0, avr;

for(i=0; i<MAX; i++){
printf("%d人目の点数は? ", i+1);
scanf("%d", &point[i]);
}
for(i=0; i<MAX; i++){
printf("%d人目 = %d\n", i+1, point[i]);
total += point[i];
}
avr = total / MAX;
printf("平均点 = %d\n", avr);
}
のtotal += point[i];ってところがわかりません。
どういう意味なのでしょうか?
0570デフォルトの名無しさんNGNG
文法なら本をみようよ。
a+=bはa=a+(b)
0571デフォルトの名無しさんNGNG
>>570
ありがとうございます。あいにく貸しているんで・・
0572デフォルトの名無しさんNGNG
>>570
(b)はbでいいだろ。
(b)でも問題ないが
0573デフォルトの名無しさんNGNG
>>572
bが先に評価されるという意味で括弧でくくった。
0574デフォルトの名無しさんNGNG
>>572
+ より優先順位の低い二項の演算子なんていくらでもあるぞ。
0575デフォルトの名無しさんNGNG
>>573
カッコは評価順序とは関係ない。優先順位を変えるだけ。
0576デフォルトの名無しさんNGNG
>>575
よく読めよ
0577デフォルトの名無しさんNGNG
C言語を家で勉強したいと思うんだけど
どのソフトを買えばいいでしょうか?
やっぱり Visual C++.NETかな
0578デフォルトの名無しさんNGNG
純粋なC言語だったら、linux+gcc
Windows上で動かしたいなら、VC
安く済ませたいなら、BCC
きわどく行きたいなら、cygwinのgcc(素人にはお勧めできない)

例えば、学校でlinux+gccとかsun+gccとかだったら、
cygwinのgccでもまあ、がまんできる。無料だし。

いじゃう。っていうか同じような質問多すぎ。逝ってくれ。
0579デフォルトの名無しさんNGNG
FAQスレ立てた方がよさげ。
0580デフォルトの名無しさんNGNG
C言語ってどんなソフトを作れるんですか?
0581デフォルトの名無しさんNGNG
>>580
基本的に何でも。
OS書いているソフトだからな。
ただし生産性は高いとはいえない。
0582デフォルトの名無しさんNGNG
>>580
はっきり言ってCは
1.ソースが混乱する。
2.膨大になる。
が問題。
0583デフォルトの名無しさんNGNG
char str[100];
fgets(str, sizeof(str), stdin);
というように標準入力から文字列(アルファベット)を受け取る際に、100文字
を超えたら改行まで読み続けないで、1回で処理を打ち切るようにしたいのですが、
どのようにしたら良いのでしょうか?フラグなどを立てておく以外でお願いします。
0584デフォルトの名無しさんNGNG
なんの処理を一回でうち切りたいのか知らないけど、入力処理のことならfgetsを一度だけ呼べば一回でうち切られる。
0585デフォルトの名無しさんNGNG
>>582
ほほぉ。
それではソースが混乱しないで膨大にならない言語は何ですか?
#スレ違いって誤魔化して答えないと思うけど一応聞いてやる。

>>583
残りの入力を放置していいなら>>584の言うとおり。
入力を破棄してしまいたいならもう一度(必要なら複数回)呼んで
改行まで読み捨てる必要がある。
0586デフォルトの名無しさんNGNG
>>584,585
ありがとうございます。
ループ内でfgetsをやっていたので、文字のあふれた分が続けて読み込まれていました。
もう一つ質問ですが、標準入力から文字列を読み込んだときに、格納する配列から
あふれたかどうかを判断する術はありますか?
0587デフォルトの名無しさんNGNG
fgets()は、まさしく溢れさせないように作られている。
例えば、
char buf[100];
としたなら
fgets(buf, sizeof(buf), fp);
とすれば溢れることは有り得ない。

尚、行の最後まで呼んだかそれとも行の途中かを知りたければ、
if (buf[0] != '\0' && strrchr(buf, '\n') != buf[strlen(buf) - 1]) {
/* 行の途中 */
}
とでもすればよい。
0588デフォルトの名無しさんNGNG
>>587
fgets(buf, sizeof(buf), fp) && strchr(buf, '\n')
だろフツー。
0589582NGNG
>>585
そんな都合のいいものはないが
相対的に見れば
CよりC++という考え方になる。
表現方法が悪かったのはスマン。
0590デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int a[4];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

printf("%d\n%d\n%d\n%d\n%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}

コードが汚いし、誤作動するし。どうなってんだーーーーーーー
0591デフォルトの名無しさんNGNG
>>590
荒らすな
0592 NGNG
int a[4]だとa[0]〜a[3]でつ
0593デフォルトの名無しさんNGNG
>>590
ひさしぶりにワラタ
0594デフォルトの名無しさんNGNG
int a[4]は、int型の配列が入るメモリを4個確保して、
その先頭の場所に「a」という名前付ける、って意味。
配列は0から数えるので、0,1,2,3までしか使えない。

ついでに、for文覚えてとけ。役に立つぞ。
0595デフォルトの名無しさんNGNG
あと、main関数は基本的にint型の戻り値でおながいします(にやっ
0596デフォルトの名無しさんNGNG
役に立つというか、必須では。
0597デフォルトの名無しさんNGNG
>>595
>>590はint型になっているけど。
ただしreturn 0;を書いていないのは(ry
0598デフォルトの名無しさんNGNG

int i = 2;
int n = 3;

printf("%d\n", i +++ n );
printf("%d,%d\n", i, n );

出力結果を妄想しなさぁい
0599デフォルトの名無しさんNGNG
>>598

$ ./a.out >/dev/null
$
0600デフォルトの名無しさんNGNG
実数を読み込みたいのですが下のコードで読み込めません。
どこかまずいでしょうか

double v;

sscanf("7.295760E+0", "%e", &v);
printf("%f\n", v);
0601デフォルトの名無しさんNGNG
>>600
マニュアルを見ないところが拙い。
scanf()系のフォーマットがprintf()系と互換性があると思っている時点でダメダメ。
0602デフォルトの名無しさんNGNG
%le
0603デフォルトの名無しさんNGNG
>>600
sscanfが変。
第一引数はメモリ上に配置された
char型へのポインタだぞ。
他、指数の表示も%fじゃなく、%eだ。
0604デフォルトの名無しさんNGNG
>>603
3行目以降はNG
0605デフォルトの名無しさんNGNG
>>600
%e → %le
0606デフォルトの名無しさんNGNG
doubleをfloatにする。じゃだめ?
0607デフォルトの名無しさんNGNG
>>603
文字列定数が返すのはchar *じゃないのか?
0608600NGNG
%e → %leで読み込めました。
変数のフォーマット指定をおろそかにするといけないのですね
0609デフォルトの名無しさんNGNG
>>608
floatはdoubleに変換されるからprintfの時はどちらもlをつけないが、
scanfの場合はポインタを渡すから、、、ええと、うまく説明できないな(汗
同様に%dに対してchar*やshort*などを渡すのもまずい。
0610デフォルトの名無しさんNGNG
>>600
"%e" に対応するのは、float 型。
一部の処理系で、"%le" で double に対応しているものがある。
使ってる処理系のヘルプを見るべし。
0611デフォルトの名無しさんNGNG
だからさ、規格を調べずに嘘を書くのはやめようや。
0612609NGNG
>>611
俺のこと?嘘ついた?
0613609NGNG
念のため、floatがdoubleに・・・というのは可変個の引数の話なんで。
0614デフォルトの名無しさんNGNG
>>609
嘘を書いているのは610。
自信がないならちゃんと調べよう。
0615デフォルトの名無しさんNGNG
>>614
どこがウソなん ?
0616デフォルトの名無しさんNGNG
>一部の処理系で、"%le" で double に対応しているものがある。

このあたりでは?
つまり、一部処理系独自の拡張みたいに云うな、と。
0617デフォルトの名無しさんNGNG
なんかこのスレ、fjみたいになってきたな。
0618Kusokabe YouichiNGNG
In article >>617, デフォルトの名無しさん/sage/617 wrote:

>なんかこのスレ、fjみたいになってきたな。

と思いたいのですね? :p
0619デフォルトの名無しさんNGNG
(,,゚Д゚)∩先生質問です
構造体のメンバにconstを付けた場合
どうやって初期化すればいいんでしょうか
0620デフォルトの名無しさんNGNG
>>619
通常のconst変数同様に初期化すればいい。

const int cOneConst = 3;
struct SomeStruct {
const int anyMember;
double otherMember;
} myStruct = {3, 3.14};
0621デフォルトの名無しさんNGNG
>>619
わざわざ、定数を構造体に入れるとは
どういうソースだ?
利用法がわからん。
0622デフォルトの名無しさんNGNG
>>621
利用法は考えてなかったけど出来るのかなーって思って
0623デフォルトの名無しさんNGNG
>>621
テーブルを作るときに使います。
配列になるけど。
0624デフォルトの名無しさんNGNG
構造体の中にテーブル!?
0625デフォルトの名無しさんNGNG
テーブルならstruct X const table[]だろ。
0626デフォルトの名無しさんNGNG
参考書を読み漁り、
ポインタ本やらK&R本やら基礎は頭の中に入ったと思うんです。
が、ここからどうしていいかわからない。
今まで学習した内容では何も出来やしないような気がして。
API叩きまくればできる、とかそういうんじゃなくて・・・。
とにかく、暗礁に乗り上げています。
どうか我が行く道を照らしてください・・・センセー。
0627デフォルトの名無しさんNGNG
>>626
何か作ればいいじゃん。
何作ればいいかとかは自分で考えてね(w
0628デフォルトの名無しさんNGNG
>>616
ん ? "%le" って ANSI で規定されてるのか ?

C99 では規定されてるみたいだけど。
0629デフォルトの名無しさんNGNG
なかったらfloat*しか受け取れなくなるYO!
0630デフォルトの名無しさんNGNG
>>626
これからが本番なんだyo
言語を一通り理解するのは土俵に立つ程度のことっス
0631デフォルトの名無しさんNGNG
>>626
既存のソフトを改造してみるとか
0632デフォルトの名無しさんNGNG
Cでウィルスとか作れるんでちか?
0633デフォルトの名無しさんNGNG
VBSがいいよ
0634デフォルトの名無しさんNGNG
>>632
てーか、程度の低いウィルスなら、
簡単。
0635デフォルトの名無しさんNGNG
程度が低くなくても簡単。
0636デフォルトの名無しさんNGNG
>>629
K&R には、"%le" なんかありませんでしたが、何か ?
0637デフォルトの名無しさんNGNG
>>635
> 程度が低くなくても簡単。

こう言う奴は、大体何もできない奴。
0638デフォルトの名無しさんNGNG
ところで
2chはどこまで
ウィルスの話OKなの?
てか、一応禁止だし。
0639デフォルトの名無しさんNGNG
禁止なんだろ。
0640デフォルトの名無しさんNGNG
>>636
lとeを分けて考えれば分かりそうなものだけど。

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/sscanf.3.html
http://www.bohyoh.com/CandCPP/C/Library/fscanf.html
0641デフォルトの名無しさんNGNG
void op(void){
int fd1;
char buffer[1000];

fd1 = open("data.c", O_RDONLY);
read(fd1, buffer, 1000);
puts(buffer);
close(fd1);
}
関数opを実行するとdata.cのなかの一部分しか表示されません。
全部表示するにはどうしたらよいでしょうか?
0642デフォルトの名無しさんNGNG
>>641
バッファをもっと多くとる。data.cに'\0'を含まないようにする。

ところで、(UNIXの)readは末尾に'\0'を付加したりしないよ。
0643デフォルトの名無しさんNGNG
>>641
てーか、
readで読み込むのに賛成しない。
while(fguts(buffer,1000,fd1)!=NULL)
   fputs(buffer,fd1);
なら大丈夫。
0644デフォルトの名無しさんNGNG
>>643
getとputが混ざっているぞ
0645644NGNG
というか、fd1から読み出してfd1に書き出しちゃだめだろ。
0646デフォルトの名無しさんNGNG
while(fgets(buffer,sizeof buffer,fd1))
fputs(buffer,stdout);
0647641NGNG
皆さん、レスありがとうございます!

課題があってreadを使わないといけないんです。

>>642
文字数は少ないので、バッファはこれで十分だと思います。
data.cに\0を含まないようにするには
どうしたらいいのですか?
使ってはいけない関数とかありますか?
0648デフォルトの名無しさんNGNG
int n;
if ((n = read(fd1, buffer, 1000)) > 0) {
write(1, buffer, n);
}
0649デフォルトの名無しさんNGNG
微妙にスレ違いですけど、バッファのスペルを
buf と書いてあるのを C のソースでよく見かけるのですが、なにか歴史的な理由でもあるのですか?
自分は buff とか buffer と書いてきたので。
0650デフォルトの名無しさんNGNG
K&Rでそう書いてあったから。
0651デフォルトの名無しさんNGNG
以下のプログラムをコンパイルするとscanf("%c",b);
の所でWarning: 'b' used before setと出ます。
どうしたら正常にコンパイルできますか?

#include <stdio.h>
static int a;
static int sum;
int plus(void);
int minus(void);
int kakeru(void);
int waru(void);

main(){
char b;

puts("数字を入力");
scanf("%d",&a);
puts("演算子を入力");
scanf("%c",b);
以下略
0652デフォルトの名無しさんNGNG
&b
0653デフォルトの名無しさんNGNG
>>651
なんでbに&がついてないの
0654デフォルトの名無しさんNGNG
>>650
> K&Rでそう書いてあったから。
そうなのか。
creat 見たいなもんかな(微妙に違うか、、、
0655デフォルトの名無しさんNGNG
>>651
どうでもいいけど関数のネーミングセンスどうにかせーよ。
あと、aとかsumは本当にグローバルじゃないとだめなのか。
0656651NGNG
>>652.653
ありがとうございました。
以下のプログラム(>>651の続きです)のコンパイルはできたのですが、
実行したとき演算子入力の所で、
入力できずに終わってしまいます。
どうすれば自分が意図したとおりになりますか?

main(){
char b;
puts("数字を入力");
scanf("%d",&a);
puts("演算子を入力");
scanf("%c",&b);

if(b == '+')
{plus();}
else if(b == '-')
{minus();}
else if(b == '*')
{kakeru();}
         else if(b == '/')
{waru();}
else if(b == '=')
{printf("%d", &sum);}
}
0657動画直リンNGNG
http://homepage.mac.com/hitomi18/
0658651NGNG
>>655
英語苦手なので、単語が思いつきません。

一応、aもsumもグローバルでないとだめなようなプログラム
を作ったつもりです。
0659デフォルトの名無しさんNGNG
数字に続けて演算子も入力してからEnter
0660くりえいとりすNGNG
fopen("a.txt", "w");
みたいなやつで、低水準のフォルダ作成関数をキボヌン。
0661デフォルトの名無しさんNGNG
>>658
> 英語苦手なので、単語が思いつきません。

mult(), divide()

> 一応、aもsumもグローバルでないとだめなようなプログラム
> を作ったつもりです。
んなわきゃーない。
0662デフォルトの名無しさんNGNG
>>660
mkdir()
0663くりえいとりすNGNG
さんくすこ
0664デフォルトの名無しさんNGNG
低水準の文字列比較関数をキボヌン。
0665651NGNG
>>659
やってみたら今度は演算子のところでとまってしまいました。

>>661
英語サンクスです。
でも、グローバルでも作れますよね?
0666デフォルトの名無しさんNGNG
>>665
> でも、グローバルでも作れますよね?
できるからやりゃあいいってもんじゃない。
まともなプログラム作りたかったら、グローバル変数を濫用するな。
0667 NGNG
CString ss("123.45");
float f;
こんなコードがあったとして、文字列ssを変数に変換して
fに代入することは出来ますか?
関数でスマートにやる方法があったらぜひ教えて下さい。
0668デフォルトの名無しさんNGNG
>>667
f = atof("123.45");
スレ違い。

0669647NGNG
>>648
ファイルを正常に開けたならば
バッファを標準出力に書き込むって意味ですか?
それをすることとによって何がどうなるのですか?
0670デフォルトの名無しさんNGNG
>>669
read()のマニュアルなりヘルプなり読め。
0671デフォルトの名無しさんNGNG
>>640
何の話 ? 特定環境のヘルプ示されても困るんだが。

>>641
そもそも read() で読んで、puts() するのが不自然。
read() は、基本的にはバイナリを相手にしてるから、それをそのまま出力したいなら、write() にすべし。
と言うことを >>648 は言いたいんだと思う。

ただ、>>669 の

> バッファを標準出力に書き込むって意味ですか?

の発言が、非常に不安。アンタ puts() の仕様わかってんの ?
0672デフォルトの名無しさんNGNG
一つ目はともかく、二つ目も特定の環境のヘルプか(藁
0673デフォルトの名無しさんNGNG
2つ目はISO Cの文章そのままだな。
自分の知らないものは環境依存と決め付けるとは救いがたいアホだ
0674デフォルトの名無しさんNGNG
JISで閲覧できるPDFには次のように書かれているよ。確かにANSIから引っ張ってきたものじゃないけど。

「変換指定子e,f及びgに対応する実引数が、float型へのポインタではなくdouble型へのポインタであるときにはlを」


K&Rの中で明確にそんなものはないと書かれているならまだしも、あれはあくまでも教本なんだから規格を何から何まで網羅しているとは思えないよ。
0675デフォルトの名無しさんNGNG
>>637
> こう言う奴は、大体何もできない奴。

こう言う奴は、大体何もできない奴。
0676デフォルトの名無しさんNGNG
煽りあい貶しあいは2ちゃんの華
0677名無しさん@EmacsNGNG
プロトタイプ宣言でよくでてくる、

int foo _((int arg));

のように _()で囲むのはどういう意味ですか?
0678デフォルトの名無しさんNGNG
>>677
_ が何かのマクロになってんじゃないの?
標準ヘッダの中では使われてる事はあっても、
そんなもん自分のプログラム内で使っちゃダメよ。
0679デフォルトの名無しさんNGNG
>>677
K&R対策だったかな?
0680デフォルトの名無しさんNGNG
乱数作るのは次の段階でいい。rndをaと比較使用とすると無限ループ化してしまう。何故?
#include <stdio.h>
main(){
int a,rnd=6;
while(){
printf("数を当てたまえ。");
scanf("%d,&a");
if(a<rnd){printf("もっと大きい\n");continue;}
if(a>rnd){printf("もっと小さい\n");continue;}
if(a==rnd){break;}
}
printf("正解!");
}
0681デフォルトの名無しさんNGNG
whileの条件式って空にできたんだ。forならできるけど。
0682名無しさん@EmacsNGNG
>>678

/usr/include 以下をgrepしてみて見付けられませんでした。
find /usr/include -type f | xargs grep ' _('
どのヘッダで定義されてるのですか?
0683デフォルトの名無しさんNGNG
&aを外に出せ
0684681NGNG
できねーじゃねーか!
0685デフォルトの名無しさんNGNG
>>680
突っ込み所満載だな
0686デフォルトの名無しさんNGNG
>>682
んなもん知らん。
こっちの GCC ではそんなマクロ使われてないし。
0687682NGNG
#ifdef PROTOTYPES
# define _(Args) Args
#else
# define _(Args) ()
#endif

>>686
すいません。標準ヘッダではなく普通に定義されてました。

>>677
そうみたいですね。
0688デフォルトの名無しさんNGNG
#include <stdio.h>
struct Num{int iti[10];}zyuu[10];
int main(void)
{
int i,n;
for(i=0;i<=9;i++)for(n=0;n<=9;n++)zyuu[i].iti[n]=i*10+n;
for(i=0;i<=9;i++)for(n=0;n<=9;n++)printf("%4d",zyuu[i].iti[n]);
getchar();return 0;
}
上プログラムの構造体を
struct Num2{int zero,int one,int two int three int four
int five,int six,int seven,int eight,int nine}zyuu[10];
とした時、同じ値をスムーズに与えるにはどうすればよいのでしょう。
下の構造体にしたい理由は、配列番号だと、メンバのどこにどれが入っているか
分からなくなる時があるからです。enumとかありますが、じかに出来ればいいなと。
0689デフォルトの名無しさんNGNG
>>688
あんまりきれいな方法はないかなあ。

struct Num tmp = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (i = 0; i < 10; i++) {
 zyuu[i] = tmp;
}

てなかんじかね。
0690デフォルトの名無しさんNGNG
スーパーハカーを目指している青少年ですが
linuxを勉強するのが先でしょうか?それともパイソン?C?

最短でハカーになりたいので、迅速な回答お願いします。
(ネットワークは無駄だと最近気づいたので)
0691デフォルトの名無しさんNGNG
>>690
マジレスしてみると、最短なんてものはない。
ハカーに王道なし。ただソースと戯れ、たくさんプログラムを書き、
他人の技術を盗み、精進するのみ。

とか書くといかにも求道者風で苦痛の道のりみたいに見えるけど、
ハカーと呼ばれる人たちはそれが楽しいからやってるだけだ。

「最短コース? なんでいろいろ寄り道して楽しまないんだ? もったいないしつまらんじゃないか」

何をやればいいか? などと楽する道を人に聞いてるようじゃハカーには向いてないよ。
ハカーになるべくしてなるやつはそんなこと考えずにどんどん技術を身につけていくものだ。
0692デフォルトの名無しさんNGNG
レス有難う御座います

>最短コース?
高校生のハカーとかかっこいいじゃないですか。。。
日本の餓鬼なんかに負けるかゴルァ!!って気持ちがどうも働くんですよね。
いや、もちろん私も日本人なんですが。

>何をやればいいか? などと楽する道を人に聞いてるようじゃハカーには向いてないよ。
そうですよね・・・ベクトルがhack=カッコイイ→若いともっとカッコイイからきてるのです。
ハカーになる目標を5年後から7年後に移動します。

7分で書いた>>691さんに感謝です。
0693デフォルトの名無しさんNGNG
>>689
ありがとうございました。
0694デフォルトの名無しさんNGNG
>>692
おいおい、青少年っつーか少年じゃないか。
だったら若さを活かして他人のプログラムを読み捲くれ。
その中から自分に合ったものを見つけて、自分流に何度も書いてみろ。

それからいろんな知識を身につけろ。数学は勿論、どんな知識でもいい。
プログラミング技術と知識を味方につければハッカーも夢じゃないぞ。
#そしてそれらはハッカーにならなくても役に立つしな。
0695デフォルトの名無しさんNGNG
>>692
ついでに一般常識も勉強するように。
ハカーじゃなくてクラカーになっちゃ駄目よ。
0696デフォルトの名無しさんNGNG
>>692
これも読んどけ。(いろいろ文句があるけどそれほど外れちゃいない)
http://cruel.org/freeware/hacker.html
0697デフォルトの名無しさんNGNG
>696

Q: Windows ソフトのことで困っています。助けてもらえますか?
 はい。DOS プロンプトにいって、「format c:」とタイプしましょう。ものの数分で、困っておいでの各種問題は消滅することでしょう。

こういうのってどうなんだろ(´∀`;)
もしも知らない人がこれで助かると思って実行したら
0698デフォルトの名無しさんNGNG
> しかし HTML は十分なプログラミング言語ではありません。

この時点でネタ決定 「十分な」がなければいいんだが。
0699デフォルトの名無しさんNGNG
>>698
同意。マークアップ言語はプログラミング言語ではないからね。
0700デフォルトの名無しさんNGNG
オーバーフローについて

long min = LONG_MIN;
long max = LONG_MAX;
long tmp = min - max;
としたときのtmpの値は?

1.シラネーヨ(不定)
2.そもそもそんな計算すんじゃねぇゴルァ!
0701デフォルトの名無しさんNGNG
>>690
英語も勉強シル!
何か Unix/Linux 系の手頃なソフトを決めて、ソースを完全解読。
dev 向けのメーリングリストに入る。
パッチを投げる。
スーパーハカーへの第一歩。
0702デフォルトの名無しさんNGNG
>>694
実はエンジニアの底辺を支えてる人だったりするのだ。
勉強する順序みたいのが知りたかったのです。
Python→linux→Perl→C→他の言語 の順番で覚えようかと思います。

>>696
ありがとうです。そことwww.hackerslab.orgはお気に入りに入ってたりします。

スレ違いスイマセンでした(^^
0703デフォルトの名無しさんNGNG
>>701
その通り!英語大事あるよ。
英語やっときゃよかったと後悔することしかり。RFC くらい辞書なしで読んでみたい(恥。
0704デフォルトの名無しさんNGNG
>>701
言語が全くできないんですよ。
わけもわからずMLに入ってきますw
0705デフォルトの名無しさんNGNG
>>672-674
ぐちゃぐちゃ言ってるけど、ANSI で定義されてんの ?
定義されてるなら、ソース出してくれ。
それとも、C99 って話か ?

>>637=>>675 か ? つまんね。
0706デフォルトの名無しさんNGNG
JISってANSIそのままじゃ・・・
0707デフォルトの名無しさんNGNG
Webで公開されていない以上、>>705が規格書を買うしかないのでは?
引用したところで疑うだけだろうし。
0708デフォルトの名無しさんNGNG
long intって64bitなの?
sizeofで測ったら4バイトだったけど
0709デフォルトの名無しさんNGNG
>>708
何バイトかは処理系依存 ただしintより小さくなることはない
で、32bit以上はかならずある。
0710デフォルトの名無しさんNGNG
> で、32bit以上はかならずある。

ANSIで決まってたか?
0711デフォルトの名無しさんNGNG
>>710
決まっています(怒)
0712デフォルトの名無しさんNGNG
またアメリカマンセー主義者か
0713デフォルトの名無しさんNGNG
>>710
ANSI規格で決まった。
それ以前の処理系については保証はない。
0714デフォルトの名無しさんNGNG
>>708
1バイトが16ビットの環境だったら4バイトで64ビットじゃん。
とか言ってみる。
0715デフォルトの名無しさんNGNG
>>706
アフォですか ?

>>707
結局ソースはだせないのか ?
章 - 節 ぐらい書けるだろ。
0716デフォルトの名無しさんNGNG
>>715
おい、アフォ。
JISのCもISOのCもANSIそのまんまだぞ。
0717デフォルトの名無しさんNGNG
C++もmain関数から始まるの?
0718デフォルトの名無しさんNGNG
>>717
スレ違い
0719デフォルトの名無しさんNGNG
じゃあCは?mainから始まるの?
0720デフォルトの名無しさんNGNG
>>719
何か「C言語でもmainから始まらない場合もある」とかいう話でも
聞いたのか?
0721お祭りですよ NGNG
東芝dynabook SS S7の画像表示について、
特定のベンチマークを行った場合、不当に好成績が出せるよう
意図的な描画品質の操作が行われていたことが明らかになりました。

          
本スレ
【インチキ】東芝S7マジ死亡!【偽装】
http://pc3.2ch.net/test/read.cgi/mobile/1054292029/

◇dynabook SS S7 問題のスレッド◇
http://pc.2ch.net/test/read.cgi/pcnews/1054387292/
            

関連記事

「3DMark2001で測定したら、GeForce4 Ti4200並みのパフォーマンスを出している」
http://www.zdnet.co.jp/news/0305/02/nj00_ss7xp4.html
http://www.zdnet.co.jp/news/0303/12/nj00_centri_toshiba.html

3DMark2001のファイル名をリネームするとスコアが下がるXP4
http://pc.watch.impress.co.jp/docs/2003/0530/ubiq7.htm
0722デフォルトの名無しさんNGNG
Cの例文が沢山あって、単語(例えばgetsとか)で検索出来るサイトを教えて下さい
0723デフォルトの名無しさんNGNG
MSDN
0724デフォルトの名無しさんNGNG
VC6ですが、組み込み型memsetって、データが4バイトアラインメントされてないと遅いんですね。

#pragmanko function(memset)
と書くと上記の場合でも速くなる。

って事にさっき気付いた。


気にする程の事ではないが・・・
0725デフォルトの名無しさんNGNG
「組み込み型memset」ってなんすか?
0726デフォルトの名無しさんNGNG
>>724
おれは「データが4バイトアラインメントされてないと」の中の「データ」とは
何をさしているのかが知りたい。
0727デフォルトの名無しさんNGNG
>>726
第一引数のアドレスが4の倍数とか?
0728デフォルトの名無しさんNGNG
インライン展開されたmemsetの事。
0729デフォルトの名無しさんNGNG
pragmankoって言いたかっただけ?
0730724NGNG
>726
 第一引数のアドレス値です。スマソ
0731デフォルトの名無しさんNGNG
wavファイルの音程を上げ下げするには、どうすれば良いでしょうか?
0732デフォルトの名無しさんNGNG
サンプラーを使う
0733デフォルトの名無しさんNGNG
>>731 誤爆
0734デフォルトの名無しさんNGNG
あるファイルで HOGEHOGE とだけ書いたときに、
マクロ定義によって、実際の値を変更したくて下記のように書いたのですが
思ったとおりにいきません

#define HOGE(a) tenkaigo_##a

#define AHYA ahyahya

#define HOGEHOGE HOGE(AHYA)

定義されてほしいのは tenkaigo_ahyahya
実際には引数は展開されず tenkaigo_AHYA が定義されます
下記は確認のソース

#include <stdio.h>
int main()
{
int HOGEHOGE;

// printf("%d", tenkaigo_ahyahya); //
printf("%d", tenkaigo_AHYA); //
}

実際には値じゃなくて予約語をマクロ展開で置き換えたいので、#if などで使えるマクロじゃなきゃだめなのです
(代行手段は他にありません)

何かうまい方法はありますか?
0735デフォルトの名無しさんNGNG
予約語をマクロ展開で置き換えたい?
0736734NGNG
>>735
はい、内容が C 部分だけなのでこちらで質問させていただきましたが、
実際には C++ で

#if -ライブラリのヘッダを読み込み中なら TRUE -
#define INTERNAL private
#else
#define INTERNAL public
#endif

としたいのです。で、ヘッダもソースも書き換えずに
ライブラリのヘッダをインクルードしているのか、
今コンパイル中のソースに関連深いヘッダをインクルードしているのかを
マクロでうまいこと定義したいんです。
0737デフォルトの名無しさんNGNG
>>736
そんなもの置き換えるなばか。
0738デフォルトの名無しさんNGNG
>>736
それは設計を見直したほうがいいんじゃないのか?
0739デフォルトの名無しさんNGNG
乱数を使ったシミュレーションをしているのですが
たまに結果が-1.#INDOO
となってしまいます。これはどういう意味なんですか?
是非教えてください。よろしくお願いします
0740デフォルトの名無しさんNGNG
どういうコード書いたの?
0741デフォルトの名無しさんNGNG
struct hoge {
int value;
struct hoge* next;
};
ってのは出来るけど
typedef struct {
int value;
hoge* next;
} hoge;
っていうのはできません。

リスト要素の構造体を typedef で作るにはどうしたらよいのですか?
0742デフォルトの名無しさんNGNG
>>740
ボックスミュラーで乱数を正規乱数にして
いろいろ演算しました。した演算は正規乱数をa,bとして
log(exp(a)/exp(b))をとってその平均分散を計算しただ
けなんですけど・・・
何がまずいんですかねえ・・・


いつも-1.#INDOO ってでるわけじゃないんですけど。
0743takuNGNG
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>


int main(){
int pid;
int rtc;
int i;
int h = 1;
int status;

while(h){
printf("何をしますか?\n");
printf("1:アドレスブック、2:四則演算、3:終了");
scanf("%d",&i);
if(i == 0){
h = 0;
continue;
}
0744takuNGNG
pid = fork();
switch(pid){
case 0:
if(i == 1){
rtc = execl("assressbook",NULL);
exit(0x00ff);
break;
}
else if(i == 2){
rtc = execl("calc",NULL);
exit(0x00f);
break;
}
case -1:
printf("fork error");
break;
default:
wait(&status);
printf("status : %d\n", status);
break;
}
}
return 0;

}
0745takuNGNG
forkについていまいちよくわからないので質問させてください。
以下の部分は子プロセスといわれると思うのですが、
どういう意味で「子」なのですか?
case 0:
if(i == 1){
rtc = execl("assressbook",NULL);
exit(0x00ff);
break;
}
else if(i == 2){
rtc = execl("calc",NULL);
exit(0x00f);
break;
}
0746takuNGNG
また以下の部分は親プロセスと言われると思うのですが、
どういう意味で「親」なのですか?

case -1:
printf("fork error");
break;
0747takuNGNG
またこのプログラムではforkを使っているわけですが、
なぜforkを使う必要があるのかがわかりません。
forkを使うことによってどういった利点があるのでしょうか?
0748takuNGNG
また具体的にどういったときに
-1、子プロセスのプロセスIDが返されるのですか?

いろいろ質問して申し訳ありませんが、
ぜひ教えていただきたいと思います。
よろしくお願いいたします。
0749デフォルトの名無しさんNGNG
パーマンのコピーロボットと同じだ。プロセスが分裂するのだ。

・fork()→鼻を押す
・自分の鼻が丸ければ0が返る。
・本物にはコピーロボットのIDが返る
・コピーロボットがニセモノだったらfork失敗で-1が返る

で、親は本物のミツ夫。
0750デフォルトの名無しさんNGNG
>>741
しばらくタグ名付きの定義使ってないので怪しいけどこんな感じで…

typedef struct _tag_hoge{
int value;
_tag_hoge* next;
} hoge;

0751デフォルトの名無しさんNGNG
>>746
親は default のブロックだよん。
>>747
親は子の終了を待ってるから system() でも良いような…
fork() の例題作りたかったんじゃない?
0752デフォルトの名無しさんNGNG
>>740
よくわからんが、-1.#INDOO になったときの a, b の値を見てみ。
0753752NGNG
>>742ですた。スレ汚しスマソ
0754デフォルトの名無しさんNGNG
>>750
これだと next の型が hoge* ではなく struct _tag_hoge*になってしまうです。
0755ヽ(´ー`)ノNGNG
これでいいんかいな。

typedef struct _hoge hoge;
struct _hoge {
int value;
hoge* next;
};
0756デフォルトの名無しさんNGNG
>>755
タグに違う名前を付ける必要は無いですよね?
0757ヽ(´ー`)ノNGNG
たぶん必要ないと思われ。ていうか、それぐらい試しておくれよん。
0758デフォルトの名無しさんNGNG
>>757
コンパイルとおるのは知ってます。
タグ名を区別する理由を知らないので、聞いてみたのです。
0759デフォルトの名無しさんNGNG
typedef struct hoge{
int value;
struct hoge *next;
} hoge;

これでできなかったっけ?
0760デフォルトの名無しさんNGNG
>>754
struct _tag_hoge*になったら何か問題があるのかと小一時間問いつめたい。
0761デフォルトの名無しさんNGNG
俺はこんなのふうに書いてます
>>755とどっちが見やすいかなぁ?

typedef struct _hoge {
   int value;
   struct _hoge* next;
} hoge;
0762デフォルトの名無しさんNGNG
一文字目がアンダーバーってのはまずいんじゃなかった?
二文字目が大文字でなければいいんだっけ?
0763デフォルトの名無しさんNGNG
>>762
ボーランドのコンパイラ使ってるけど
警告された事も無いと思う
2文字目大文字にしても同じだった

てっかウィンドウズ関係のヘッダ見てたら
typedef struct _AAA {
int bbb;
} AAA, *AAA;
見たいな書き方たくさんあったよ
0764デフォルトの名無しさんNGNG
まずいですよ。
0765ヽ(´ー`)ノNGNG
__[[:alnum:]_]* と _[A-Z][[:alnum:]_]* は reserved だから使っちゃダメだよん(C99)。
0766デフォルトの名無しさんNGNG
(´-`).。oO(windows.hが使えなくなる)
0767デフォルトの名無しさんNGNG
>>763>>766
処理系依存の予約語(マクロなども含めて)だからいいの。
0768767NGNG
というか、それとかぶらないようにユーザー定義時には禁止しているってだけ。
0769767NGNG
s/処理系依存/処理系定義/
0770デフォルトの名無しさんNGNG
>>763,766
C99 ってわざわざ書いてくれてるんだから、仕様書読めよ。
0771デフォルトの名無しさんNGNG
構造体タグ名とtypedef型名は名前空間が違うから同じでも構わないよね。
C++を睨んで変えてるんじゃないの?
0772デフォルトの名無しさんNGNG
>>741
void * にしちゃダメなのか?

/* 注:全角空白あるからそのままコピペするなよ! */
typedef struct
{
  int value;
  void *next;
} hoge;
0773デフォルトの名無しさんNGNG
>>771
C++だって問題なし。
typedef struct hoge hoge;
があればtypedefされたhogeが優先されるけど、
なければstructを省略したhogeが使われる。
0774デフォルトの名無しさんNGNG
>>772
デスマの香り…。
0775デフォルトの名無しさんNGNG
>>772
そりゃだめだろ…
nextを参照するときにいちいちキャストすんのか?
0776デフォルトの名無しさんNGNG
hogeって何?
0777デフォルトの名無しさんNGNG
>>776
激しく既出。
0778デフォルトの名無しさんNGNG
>>777
俺の777を返せ
0779デフォルトの名無しさんNGNG
一方向連結リストをあるメンバでソートするのに効率的な方法はないでしょうか?
1回の走査であるメンバが最も小さい(大きい)構造体を見つけてmallocして…
というバブルソート的なものしか思いつかないのですが。
0780デフォルトの名無しさんNGNG
>>779
マージソート
0781デフォルトの名無しさんNGNG
c言語を独習しようと思ってフリーソフトのlsic330試食版を
ダウンロードしたのですが、それからどうすればいいのか
わかりません。誰か教えてください。
0782デフォルトの名無しさんNGNG
インストール
0783デフォルトの名無しさんNGNG
>>781
パッケージに含まれるドキュメントを読め。
それからぐーぐるにきけ。
話はそれからだ。
0784デフォルトの名無しさんNGNG
>>781
330?
CPadも一緒にDLして、CPadから起動すると結構自動的にやってくれる感じで楽ではあるよ
0785デフォルトの名無しさんNGNG
C言語で、XMLのデータを抜き出す作業について詳しい人いますか?
0786デフォルトの名無しさんNGNG
>c言語を独習しようと思ってフリーソフトのlsic330試食版を
>ダウンロードしたのですが、それからどうすればいいのか
>わかりません。誰か教えてください。
素人なら、まずLinuxをこんぴうたにインストールしろ。
そうするとgccが使えるようになる。

... まあ、Windowsが使えなくなることもたまにあるが、
CD boot linuxでgo.
0787デフォルトの名無しさんNGNG
>>785
お呼びでしょうか?
0788デフォルトの名無しさんNGNG
>>785
漏れとしては、perlで作った方が作業効率は早そうに100XML。
正規表現とかに強いし、何なら連想配列もある。
まあ、phpで組めばもっとえげつないものもできるけどな。
0789デフォルトの名無しさんNGNG
Ruby がいいよ。
0790781NGNG
>>782 783 784 786
どうもありがとうございました。
0791デフォルトの名無しさんNGNG
グローバル変数とgotoはタブーなんでしょうか・・・
0792デフォルトの名無しさんNGNG
>>787の「まあ、phpで組めばもっとえげつないものもできるけどな。」にワロタ
PHPって直接タグ抜く関数もあったね。
0793デフォルトの名無しさんNGNG
>>791
使い方の問題。

タブーではない。

gotoの扱いは注意すべきです。
gotoを初心者(無知な人間)が使うと大変です。
gotoは初心者は使っては逝けません。
gotoは使っては逝けません。
となっているだけ。
0794デフォルトの名無しさんNGNG
名前が後藤だと、この業界への就職が極端に不利です
残念でしたね
0795デフォルトの名無しさんNGNG
>>794
漏れがことごとく就職に失敗したのはそのせいだったのか…
0796デフォルトの名無しさんNGNG
名前が須藤だと、ネットワーク管理者の採用に不利です
可哀相に
0797デフォルトの名無しさんNGNG
あのーくだらないこと聞いてすみませんが、ユーザの入力を求めて
入力が正しくない場合は再度入力を求める処理は以下で間違っているでしょうか?
何も入力しなくても文字数の限度を超えてもスルーされてしまうのですが…

printf("項目「ID」の値を入力してください。\n");
while(fgets(p->ID, 5, stdin) == NULL)
 printf("入力が不正です。もう一度入力してください。\n");
0798デフォルトの名無しさんNGNG
>>797
間違っている。

何も文字を入力しない場合でも改行を入力するので、
p->ID に "\n" が入れられて fgets 成功。
文字数の限度を超えても fgets は失敗しない
(残りは次の fgets の時に得られる)ので、fgets 成功。
よってどちらの場合においても NULL は返ってこない。

入力された文字をチェック汁。
0799デフォルトの名無しさんNGNG
分かりました。ありがとうございます
0800デフォルトの名無しさんNGNG
800get
0801デフォルトの名無しさんNGNG
XMLから データの抜き出す作業なんですが
今、 データがいくつかあるかわからないので
リスト構造体
 typedef struct node{
xmlChar *agent_name;
struct node *next;
};NODE
って作りました。

0802デフォルトの名無しさんNGNG
int parse_parties(xmlDocPtr doc, xmlNodePtr cur, node NODE)
{
NODE *head;
NODE *p;

*head = NULL;

子ノードへ移る作業を行い

  while(cur != NULL){
cur = cur -> xmlChildrenNode;

if(!xmlStrcmp(cur->name,(const xmlChar *) "name" )){
p=malloc(sizeof(NODE));
if(!p){
エラー処理

      p ->agent_name=xmlNodeListGetString(doc, cur->xmlChildrenNode,1)
p -> next = head;
next = p;
}
cur = cur -> next;
}
}
return 0;
}
と作ったのですが、 おかしいとこありますか?
0803デフォルトの名無しさんNGNG
C言語をおもしろおかしく学びたいです。こつを教えてください。
0804デフォルトの名無しさんNGNG
>>802
> *head = NULL;
間接参照していいのか?
0805デフォルトの名無しさんNGNG
>>802
> };NODE
セミコロンの場所が

>>802
> , node NODE)

おいおい
0806805NGNG
一行目は>>801の間違い
0807デフォルトの名無しさんNGNG
あ };NODEは ミスです^^;

0808デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1054392076/210
C言語ってのは、コンパイラによっては、ソースコードにC++の構文を
用いてもエラーにならない。
「C++で書いてます」というコードも、実は殆どC言語特有のむかーしの
伝統的なgets()やputs()関数ばかりで
printf()や<<をあまり使わないコードでもコンパイルが通る。
0809デフォルトの名無しさんNGNG
やっぱ 引数かぁ・・・
引数がわからん・・
0810デフォルトの名無しさんNGNG
>>809
型名と変数名の区別はついている?
0811デフォルトの名無しさんNGNG
微妙です。 型って int とか charとかですよね?
0812デフォルトの名無しさんNGNG
便乗質問ですが、>>797のような場合入力値チェックするとき
何百文字入力されようとfgetsが成功してしまうのなら
入力された値が4文字以内かどうかをチェックするには
どうすればいいんでしょうか??
0813デフォルトの名無しさんNGNG
if文を使ってそのプログラムを
また最初からはじめるプログラムを書きたいのですが
goto文以外のやり方がわかりません
教えてください
0814デフォルトの名無しさんNGNG
どんなプログラムか知らないけど、gotoで実現できるなら
それでいいんじゃないの?}
0815デフォルトの名無しさんNGNG
>>812
fgetsは
 ・指定されたサイズに達した
 ・\nが現れた
 ・EOFに達した
のどれかまで読んでreturnする。
だから、規定の文字より一文字多く読んで
 ・EOFに達した(fgetsの値がNULLだった)場合
  ・文字列の末尾が\nだったら、規定の文字数である
  ・そうでない場合、strlenで規定の文字数以下であるか判定する
 ・EOFでなかった場合、文字列の末尾が\nだったら規定の文字数である
というふうに判定するかな。文字列の末尾が\nだったら、は文字列に\nが含まれていたら、でもいい。
0816デフォルトの名無しさんNGNG
素数を発見するためにエラトステネスのふるいを用いて、素数発見を
行おうと思うのですが、配列を用意してもフラグにしか使わないので
1ビットずつ使いたいんです。そこで調べてみたら、ビットフィールドとか
なんたらをマスクして、とかあったんですけど、いまいちよく分かりませ
ん。要するに、中身がそれぞれ1ビットずつの配列を作るにはどうすれ
ばいいのか教えてください。できれば、ソース付で・・・・
0817デフォルトの名無しさんNGNG
>>816 struct で unsigned で ビットとかにできるけど、
ビット演算するなら、そのまま ビット演算し使った方が早いよ。
0818デフォルトの名無しさんNGNG
fgets(buf , c , stdin)があっても入力を受け付けずに
素通りしてしまうことがあるのはなぜなんでしょうか?

fgets();
fgets();
・・・
と5つくらい入力を続けるのですが、一番上のfgetsだけ素通り、
2つ目からは正常に入力受付のカーソルが出ます。
こんなことってありますか?
0819デフォルトの名無しさんNGNG
cが0なんじゃないの
0820デフォルトの名無しさんNGNG
>>819
いえ、全て定数で1以上なのです。
0821デフォルトの名無しさんNGNG
1もダメだ
0822818NGNG
済みません、書き方が悪かったですね・・
どれも最低でも5以上です。いろんな箇所でfgetsを並べて使ってますが、
どれも一番上や単独使用の場合は素通りされて、2つ目以降は入力を求められます。
0823818NGNG
ていうか、俺のVCおかしい…?
if(・・・)
 ・・・
else
 ・・・
でifの処理が実行された後にelseが実行されたりするし…どーなってんだ
もう何がなんだか・・・
0824デフォルトの名無しさんNGNG
ソース晒せ。
0825818NGNG
謎は解けた…下のようなことやってるんですが、fgetsで入力した後
error2が出た(文字数制限を越えた)場合、ループの最初に戻って
またfgetsに来るんですが、ここで勝手に値が入力されて先に進んでるようなのです。
溢れた分が勝手に入力されてるんでしょうか?これを防ぐ手段はないでしょうか?

printf("値を入力してください。(最大3桁)\n");
while(1){
 if(fgets(buf, 7, stdin) == NULL)
  printf("error!もう一度入力してください。(1)\n");
 else{
  if((np = strchr(buf, '\n')) == NULL){
   printf("error!もう一度入力してください。(2)\n");
  }
  else{
   *np = '\0'; /* '\n'を'\0'に置き換える */
   break;
  }
 }
}
0826デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
int x;
printf("Are you 2chner? Yes:1 No:2\n");

scanf("%d",&x);
switch(x){
case 1:
printf("You are 2chner!\n");
break;
case 2:
printf("You are'nt 2chner\n");
break;

return(0);
}
}
0827デフォルトの名無しさんNGNG
>>818
戦略ミス。
fgets()で読めなかった文はバッファに残るので、読み捨てる必要がある。
なので、いっそ丸々読みこんでから判断する方がいい。
0828818NGNG
>>827
どうもです。バッファに残った分は次にユーザ入力を求める場合に
勝手にそれを入力としてしまうということですか。
しかしプログラムで最初にfgets()が呼ばれた時にスルーされてしまうのは
何故なんでしょう・・・その前にはscanf()による整数の入力しか行ってないんですが。

丸々読むにしても、読み込む配列に制限があるので
出来ればバッファを読み捨てる方法を教えていただけないでしょうか。
0829デフォルトの名無しさんNGNG
>>828
http://www.catnet.ne.jp/kouno/c_faq/c12.html#0
0830デフォルトの名無しさんNGNG
>>818
だからscanf()は使うなとあれほど・・・
0831デフォルトの名無しさんNGNG
>>813
longjmp
とか?
0832デフォルトの名無しさんNGNG
scanf()使わずにどうやって数値をint型変数に入力するんですか??
0833デフォルトの名無しさんNGNG
>>832
sscanf()
atoi()

など
0834デフォルトの名無しさんNGNG
strtol() をおすすめします。
0835デフォルトの名無しさんNGNG
p->nというのがあったんですけど、この->はどういう意味なんですか?
0836デフォルトの名無しさんNGNG
->は、ポインタ演算子というものです。
検索してくり。
0837デフォルトの名無しさんNGNG
(*p).n
0838デフォルトの名無しさんNGNG
http://www.google.co.jp/search?hl=ja&inlang=ja&ie=Shift_JIS&q=-%3E&btnG=Google+%8C%9F%8D%F5&lr=
0839デフォルトの名無しさんNGNG
>>816
#include <limits.h>

void set_bit(unsigned char *buf, int index, int value) {
unsigned char *p = &buf[index / CHAR_BIT];
if (value)
*p |= (1 << index % CHAR_BIT);
else
*p &= ~(1 << index % CHAR_BIT);
}

int get_bit(unsigned char *buf, int index) {
return buf[index / CHAR_BIT] & (1 << index % CHAR_BIT);
}

こんな感じかな。テストしてないよ。
0840デフォルトの名無しさんNGNG
>>839
補足。配列のサイズ(保持するbitの数)をNとすると、
確保すべきunsigned charの配列aのサイズは、

unsigned char a[N / CHAR_BIT + 1];

ね。
0841デフォルトの名無しさんNGNG
>>839
即レスまじ感謝です。そこで、申し訳ないんですが使い方を教えていた
だけるとうれしい次第であります。なにぶんCは初めてでして
0842デフォルトの名無しさんNGNG
>>841
そんなに難しくはないと思うんだが、使い方がないとやっぱりよくわからんかw
まず、情報を保持するバッファを用意する。これはunsigned charの配列でとる。
大きさは>>840参照。

んで、インデックスiのビットを1にしたいときはset_bit(a, i, 1);ってやる。aはバッファね。
同様にビットを0にしたいときはset_bit(a, i, 0);ってやる。

インデックスiのビットがセットされてるかどうかをチェックしたいときは、
get_bit(a, i);ってやる。0が反ってきたらセットされてない、それ以外のときはセットされてる(1でないことに注意)。

使用例

#define N 100 /* 保持するbitの数 */
void print_bit(unsigned char *buf, int index) {
printf("index %d: ", index);
if (get_bit(buf, index))
printf("on\n");
else
printf("off\n");
}
int main(void) {
static unsigned char a[N / CHAR_BIT + 1];
set_bit(a, 5, 1); /* 5番目のbitをon */
print_bit(a, 5); /* どうなってるか出力 */
set_bit(a, 5, 1); /* 5番目のbitをoff */
print_bit(a, 5); /* どうなってるか出力 */
return 0;
}
0843818NGNG
未だに解らない・・・
scanf()でintに小さな整数を入力するだけならオーバーフローは
起こらないはずですよね?なのに何故かその後特定の箇所で
入力受付(fgets、scanf)がスルーされます。
(正常に入力を受け付ける箇所もある)
しつこくて済みませんがこの原因をどなたか教えてください。

C言語始めたばかりの頃演習やらでscanf使いまくりだったけど
こんなことに一度も出くわしたことないんですが・・
0844デフォルトの名無しさんNGNG
>>843
ttp://www.catnet.ne.jp/kouno/c_faq/c12.html#18
0845デフォルトの名無しさんNGNG
h抜くな
0846デフォルトの名無しさんNGNG
ハァ?
0847デフォルトの名無しさんNGNG
>>843
だから scanf() は使うなよ。
代わりに fgets() と sscanf() 使え。

どうせ、"\n" がバッファに残ってるってことだと思う。
0848デフォルトの名無しさんNGNG
インクリメント デクリメントの詳しい説明してるサイトが見つからない
 本当は1を足したり引いたりするためのものじゃないと聞いたのだが

0849デフォルトの名無しさんNGNG
>>848
聞いた本人に聞けば?
0850デフォルトの名無しさんNGNG
>>848
1足したり引いたりするためのものです。
0851850NGNG
もちろん、++や--のことだよね?
0852デフォルトの名無しさんNGNG
はいa++とか
0853デフォルトの名無しさんNGNG
++a と a++ の違いはあまり気にするな。
それを活用すると、最悪、最適化を阻害することもある。

まぁ、C++ を使う事があるなら、
演算子のオーバーロードする時は
++a の方が実装しやすいということだけは言っておく。
0854デフォルトの名無しさんNGNG
13とか1以外が足されたりすることがあるらしいんですが
0855デフォルトの名無しさんNGNG
typedef unsigned char uchar3[3]
これってどういう意味かわかりますか?
0856デフォルトの名無しさんNGNG
>>855
わかるけどそれがどうしたの
0857デフォルトの名無しさんNGNG
>>848
ポインタのことを言ってるような気がするが、それならば気にする必要はない。
0858デフォルトの名無しさんNGNG
オブジェクトによって使わないメンバもいくつか持つ構造体を1つ作るのと
必要なメンバだけを持った似たような構造体を複数作るのどっちがいいと思う?
要はC++で言う継承をスマートな形でCで実現したいのだが。。。

0859デフォルトの名無しさんNGNG
char line[100], *p;

      ・
      ・

fgets(line, sizeof(line), stdin);

      ・
      ・

for(p = line; *p; p++);
printf("Line size = %d\n", p-line);

      ・
      ・

というソースで、 for(p = line; *p; p++) のところがよくわかりません。*pというのが範囲なんでしょうか?
どなたかお教えください。
0860デフォルトの名無しさんNGNG
>>858
>オブジェクトによって使わないメンバもいくつか持つ構造体を1つ作るのと
>必要なメンバだけを持った似たような構造体を複数作るのどっちがいい

継承自体わかってないんじゃないかという気がする。
0861デフォルトの名無しさんNGNG
>>859
文字列の終わりまで処理したいんだろ
0862デフォルトの名無しさんNGNG
*pは*p != '\0'
0863デフォルトの名無しさんNGNG
>>859
配列lineの内容が文字列だとしたら、最後に'¥0'(=0)があるわな。
for文の第2式が偽(=0)になればループが止まるから、そいつを利用
してるんだよ。日本語下手ですまん。
0864859NGNG
>>861-863
そうだったんですか。ありがとうございまっした!
0865デフォルトの名無しさんNGNG
ただバイナリにしたいだけなんですが
シェルスクリプトと同等のCのプログラムを作るにはどうしたらいいですか?
mkdirとかcdとかわかりません
0866デフォルトの名無しさんNGNG
>>865
何言ってるかわからん。
0867デフォルトの名無しさんNGNG
>>865
さぱーりわからん
0868デフォルトの名無しさんNGNG
>>865
標準Cでは無理
0869865NGNG
unixコマンドのソースを教えてください
てことです
0870デフォルトの名無しさんNGNG
なんでそれがシェルスクリプトと同等なんだろう。
0871デフォルトの名無しさんNGNG
/* false.c */
#include <stdlib.h>
int main()
{
return EXIT_FAILURE;
}
0872デフォルトの名無しさんNGNG
ぼうやだからさ
0873デフォルトの名無しさんNGNG
>>869
http://www.gnu.org/
http://www.freebsd.org/
0874865NGNG
シェルスクリプトでかいたのをCで書きたかっただけです
意味不明ですみません
0875デフォルトの名無しさんNGNG
>>874
system
0876直リンNGNG
http://homepage.mac.com/yuuka20/
0877858NGNG
>>860
継承自体わかってない>それはない
お前の読解力か俺の文章化能力が足りないだけ

具体的に言うと3Dゲームで3Dモデルとビルボードが混在している
こんなとき両方とも描画オブジェクトの
派生クラスとしていっしょに管理したいだろ?
これをCでやるとき構造体を1つにまとめるのか?個別にしてをキャストで使い分けるのか?
お前等ならどうする?
0878デフォルトの名無しさんNGNG
>>877
素直にC++使う。

つうかCでやるなら基底クラスに相当する構造体を
派生クラスの構造体のメンバーに持たせちゃうかなあ。

typedef struct {
int boke;
char *vaka;
} base_class;

typedef struct {
base_class base;
long mona;
} delivered_class;

Cでは継承なんてあんまり考えんでプログラム組むからのう…
0879デフォルトの名無しさんNGNG
>>877
質問者の態度じゃないな(笑)
0880デフォルトの名無しさんNGNG
makeでターゲットディレクトリをビルドしたいときコマンドラインでどのよ
うに記述したらいいですか?
コンパイラはBorlandのフリーのbcc5.5です。
0881デフォルトの名無しさんNGNG
>>880
スレ違いです。
0882デフォルトの名無しさんNGNG
>>865
>unixコマンドのソースを教えてください
マジで ?
0883デフォルトの名無しさんNGNG
>>869
BSDやらLinux系ディストリは全部ソースがありますが?
それを全部ここに出力せいと?
0884デフォルトの名無しさんNGNG
gets()
と
scanf()
は何が違うのでしょうか?
0885デフォルトの名無しさんNGNG
>>883
よし、俺がやってやろう。
次スレの用意も頼む。
0886デフォルトの名無しさんNGNG
>>884
標準入力から読み込むこと以外、共通点はないよ・・・・
0887動画直リンNGNG
http://homepage.mac.com/hitomi18/
0888デフォルトの名無しさんNGNG
すいません!
1〜10まで順番に足していくプログラムが解りません!
ソースお願いしますm(__)m
0889デフォルトの名無しさんNGNG
int n = 10, sum;
sum = n * (n + 1) / 2;
0890デフォルトの名無しさんNGNG
888です!
すいません!
コンパイラはcygwinです!
m(__)m
0891デフォルトの名無しさんNGNG
>>889
仕様を満たしていないから駄目。
1〜10までを足した値を得るのではなく、1〜10までを順番に足すプログラムでなければならない。
0892デフォルトの名無しさんNGNG
>>890
Cygwinはコンパイラじゃねぇ!
0893デフォルトの名無しさんNGNG
main()
{
1+2+3+4+5+6+7+8+9+10;
}
0894デフォルトの名無しさんNGNG
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
0895894NGNG
マケタ
0896デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

void main(void)
{
char moji; /* 文字列の一時的な格納領域 */
int len;
int number; /* 変換後の数値       */
while(1)
{
printf("数値を6桁以内に入力して=>");
rewind(stdin);
scanf("%s",&moji);
len=strlen(moji);
if (len>=7)
{
printf("7桁以上です。\n");
}
if (!isdigit(moji))
{
printf("数値じゃありません。\n");
}
0897デフォルトの名無しさんNGNG

number=atoi(moji);
if(number>0)
{
printf("プラスです。\n");
}
else if(number==0)
{
printf("ゼロです。\n");
}
else
{
printf("マイナスです。\n");
}
}
}
エラーが
error C2664: 'strlen' : 1 番目の引数を 'char' から 'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
error C2664: 'atoi' : 1 番目の引数を 'char' から 'const char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
cl.exe の実行エラー
と出るんですけど分かりません
0898デフォルトの名無しさんNGNG
>892
間違った!
GNU Cコンパイラだ!

1+2+3+4…
ちがーう!(゚А゚)
0899デフォルトの名無しさんNGNG
>>897
文字と文字列の区別がついてない
0900デフォルトの名無しさんNGNG
>>899
的確な指摘。
0901デフォルトの名無しさんNGNG
moji[]でいいの?
0902デフォルトの名無しさんNGNG
あげ
0903デフォルトの名無しさんNGNG
さげてた。逝ってきまつ
0904デフォルトの名無しさんNGNG
さげてた。逝ってきまつ  
0905????NGNG
int val, ans = 0;

for ( val=1; val<11; val++) {
ans += val;
}
0906デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int n,mushi;
printf("1から10までの整数を加算するプログラム\n");
for(n=1;n<=10;n++){
do{
printf("%d",n);
printf("を入力してください。数字以外の入力は動作を保証しません。\n");
scanf("%d",&mushi);
}while(n!=mushi);
};
printf("答は55です。");
}
0907デフォルトの名無しさんNGNG
>>906
少なくともコンパイル通る様にしろよ。
一目で分るぞ。
for(;;){};←なんだ?
0908デフォルトの名無しさんNGNG
>>907
ハァ?
0909デフォルトの名無しさんNGNG
>>906の後ろから3行目に注目すると、>>908の負け。
0910デフォルトの名無しさんNGNG
>907 >909
寝言はコンパイルしてから言え。
0911デフォルトの名無しさんNGNG
>>910
頼むからこうしてくれ。

#include <stdio.h>
main()
{
int n,mushi;
printf("1から10までの整数を加算するプログラム\n");
for(n=1;n<=10;n++){
do{
printf("%d",n);
printf("を入力してください。数字以外の入力は動作を保証しません。\n");
scanf("%d",&mushi);
}while(n!=mushi);
}
;
printf("答は55です。");
}
0912896-897NGNG
分からない。誰か訂正したプログラムキボンヌ!!
スマソ。
0913デフォルトの名無しさんNGNG
>>911
なんで?
0914デフォルトの名無しさんNGNG
空文(「;」のみからなる文)
0915デフォルトの名無しさんNGNG
>>912
char moji; → char moji[774];
scanf("%s",&moji); → scanf("%s",moji);
0916デフォルトの名無しさんNGNG
>>914
理由になってない
0917デフォルトの名無しさんNGNG
その位置に;がついていたとしても、
コンパイルは無事にとおるだろうし意図したとおりに動作はするだろう。
しかし通常そのような余計な;はつけないな。
0918デフォルトの名無しさんNGNG
整数の場合、++を繰り返すといつかオーバーフローしますが、
不動小数点数の場合はオーバーフローしないのですか?

寝る前に作ったfloat型の変数をインクリメントし続けて、
インクリメント前の値と比較するテストプログラムが
いまだにCPUフル稼働で動きつづけてます。
ログを見ると274877906945.000000まで逝ってます。
0919デフォルトの名無しさんNGNG
>>917
そんなことは>>911の理由にはならないな。
0920デフォルトの名無しさんNGNG
void StringCopy(char *s1, const char *s2)
{
while (*s1++ = *s2++)
;
}
これってs2がヌルぽになったら偽になるらしいですが何故???
0921デフォルトの名無しさんNGNG
*s1もぬるぽになるから
0922デフォルトの名無しさんNGNG
#include<stdio.h>
int main()
{
int d,k,l,num[100][100],dan[100],sum,sumt,m,n,po;
/*d:段数 k:きざみ若しくは現在の段 num:データ配列 dan:各段の現在のポインタ*/
/*sum:合計 sumt:最大合計 m,n:予備 po:ポインタ位置修正用変数*/
-------------------------------中略---------------------------
/*以下、計算処理*/
for(k = 1;k <= d;k++){dan[k] = 1;}
for(l = 1;l <= 100;l++){
sum = num[1][1];
for(k = 1;k <= d;k++){sum = sum + num[k][dan[k]];}
for(k = 1;k <= d;k++){printf("%d",num[k][dan[k]]);}
printf("=%d",sum);
if(sum > sumt){sumt = sum;}/*ここまで正常*/
for(po = d;po >= 2;po--){
if(dan[po] = dan[po-1]){ /*異常*/
for(m = po;m <= d;m++){dan[m] = dan[m] + (po - m + 1);}
po = 1;
}
}
printf("\n");
}
printf("biggest = %d\n",sumt);
return 0;
}

d段のピラミッド上に並んだ数を右・左に一個ずつ移動しながら降りていき、
その道筋の合計値が一番高い物を求め、出力するプログラムなのですが・・・
異常と示してある部分で、if分に入る際にどうやらdan配列の中身が全て1に
戻ってしまうようなのです。(前後で出力して確認しました)これはどのような原因なのでしょうか・・・?
0923デフォルトの名無しさんNGNG
>>922 適当にこたえるけど
>if(dan[po] = dan[po-1]){ /*異常*/
= じゃダメでしょ。
0924920NGNG
*s1に*s2を代入できないから偽ってことです??
意味わからん!
0925デフォルトの名無しさんNGNG
>while (*s1++ = *s2++);

do {
 *s1 = *s2;
 s1++;
 s2++;
}while(*s1) コウナル
0926デフォルトの名無しさんNGNG
>>920-921
NULLとNUL文字を混同してる
0927デフォルトの名無しさんNGNG
         ,l'       ::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::::::::::::::::. |     はめはめ〜
         l       ::::::::::::::::::::;;;;;;i;;;;;;;;;;;;;;;;;;;;:::::::::::::::::::: i    i
         i,       ..::::: ○:::::::;;;;/;;;;;;;;;;;;;;;;;;;;:::::::::::::::::: !   /
         i      ..::::::::::::::::::::::;;;/;;;;;;;;;;;;;;;;;;;;;;:::::::::○::  i'   /
          'l,    ..:::::::::::::::::::::::::::/|、;;;;;;;;;;;;;;;;;/::::::::::::::::: ,i'  /
          i,   .::::::::::::::::::::::::::/::|  ~"''''"/::::::::::::::::::: /  /
          ' .,  :::::::::::::::::::::::/:::::|'⌒`ヽ,/;:::::::::::::::::: / /
           `・、., ::::::::::::::/;::::::,人,__,/;;;;;:::::::::::::://
              ~--‐ '           -''"_/
0928920NGNG
>>925はwhileの継続条件の*s1がぬる文字だから偽になるのです?
ぬる文字だったら偽になるのでしょうか?
0929デフォルトの名無しさんNGNG
0だからね
0930デフォルトの名無しさんNGNG
沢村が>>925と同じミスをしていたな
0931920NGNG
え?
>>925ってミスなの?
せっかくとりあえずだけど納得できたのに・・・
どこがミスなのでしょうか?
0932デフォルトの名無しさんNGNG
>>931
ループ終了条件が違う
0933920NGNG
>while (*s1++ = *s2++);

do {
 *s1 = *s2;
 s1++;
 s2++;
}while(*s2)

こうかな?
0934デフォルトの名無しさんNGNG
敢えて展開するなら
do {
 c = *s1 = *s2;
 s1++;
 s2++;
}while(c);

s1++されるのは条件判定後である点に注意
0935デフォルトの名無しさんNGNG
>>917
同意。そんなソースで作りつづけていたら、そのソースを見た人間が
for(〜;〜;〜){

};
を正式な構文として誤認識する恐れがある。

普通、コメントとかは別だが、動作に無関係なものは入れないように配慮する。
っていうか、いったいどうやったらそんなコード書くようになることやら...
0936デフォルトの名無しさんNGNG
漏れは要らない{〜}とか(〜)とか結構付けているからなぁ
0937デフォルトの名無しさんNGNG
よくmain(int argc, char *argv[])
ってみるけどこの引数って何すか?
どんな意味が?
0938デフォルトの名無しさんNGNG
プログラムをコンパイルするとき、gccなら
gcc test.c -o test -O3
とかってやるよな?これはgccに色々パラメータを与えてるんだ。

プログラムを実行するときに、与えられたパラメータを読み込むのに使う。
argcは何個パラメータがあるか、char *argv[]はその内容だ。

以下を試してみてくれ。

#include <stdio.h>

int main(int argc,char *argv[]){
int i;
for(i=0;i<argc;i++){
printf("[%5d] - %s \n",i,argv[i]);
}
return 0;
}

$ ./a This is a pen.
[ 0] - ./a
[ 1] - This
[ 2] - is
[ 3] - a
[ 4] - pen.
0939デフォルトの名無しさんNGNG
>>937
コマンドの引数だろ。。
0940デフォルトの名無しさんNGNG
>>漏れは要らない{〜}とか(〜)とか結構付けているからなぁ
考えようだが、基本的に
if(a==0)a=10;
というような書き方してると、elseとの対応がわからなくなる可能性もあるので、
if(a==0){
a=10;
}
という書き方の方が望ましいかと。どうせコンパイルした結果は変わらないだろうし。
0941 NGNG
>>940
追加する時もうっかりミスが減るしね。
()は優先度をわかりやすくするときにも使うかな。
if ((a >= 0) && (a <= 10))とか。
0942デフォルトの名無しさんNGNG
for(i=0;i<100;i++){
int a=10;
if(a*i == 1)
  printf("%d\n",a);
}

というようなfor文の中に、変数宣言をした時は
毎回変数の領域を確保するのか
それともコンパイラが最適化してくれるのかどっちなんでしょうか?
0943デフォルトの名無しさんNGNG
>>942
処理系依存
0944デフォルトの名無しさんNGNG
>>942
その場合、レジスタに直接割り当てられる「可能性」もある
0945デフォルトの名無しさんNGNG
printf("%e",…… と書くと
8.000000e+001と出力されます

001の方の桁数を変更することはできないのですか?
ちなみに8.000000の桁数の変更はわかります
0946デフォルトの名無しさんNGNG
printf("%e",…… と書くと
8.000000e+001と出力されます

001の方の桁数を変更することはできないのですか?
ちなみに8.000000の桁数の変更はわかります
0947デフォルトの名無しさんNGNG
>>946
指数部の桁数は処理系依存じゃなかったかな。
0948デフォルトの名無しさんNGNG
数字反転のプログラムで

12345 → 54321
12300 → 321
0 → 0

という風に作りたいのですが、0の場所をどうすればいいかどうしても分かりません。
どなたか教えてくれませんでしょうか?
0949デフォルトの名無しさんNGNG
オーバーフロウしない範囲なら数値にした後、数字列に戻す。
0950デフォルトの名無しさんNGNG
>>948
1.変換したい数値を文字列に変換
2.変換した文字列を反転
3.反転した文字列を数値に変換

これで OK
0951948NGNG
>>949-950
なるほど・・・ありがとうございました
0952デフォルトの名無しさんNGNG
関数が暗記できません!!!!!
0953デフォルトの名無しさんNGNG
>>948
反転したあと文字列の先頭から'0'判定して、
'0'の数だけmemmoveでもいんじゃない?
これなら何桁でもオーバフローしない。

あるいは、反転する前に1の位から上位に
判定していって、'0'以外の数字が見つかった
ところから処理をはじめるとか。
0954186NGNG
>952
暗記じゃない。理解汁
0955918NGNG
テストプログラム動かしっぱなしで家を出て、
帰って来て見たけど、まだ動きつづけてる。
ログによると、2199023255553.000000を超えているらしい。

インクリメントでfloatをオーバーフローさせるのは相当遠いらしい。
もぅやーめた。
0956デフォルトの名無しさんNGNG
つーか、そのうち精度をオーバーして空回りするよ。
0957デフォルトの名無しさんNGNG
FLT_MAXを入れて1.0を足してみればいいのに。
0958デフォルトの名無しさんNGNG
>>957
あーあ、いっちゃった。
0959918NGNG
float x = 0;
for(;;)
{
 float y = x;
 ++x;
 if( !( x > y ) )
 {
  // このときの x の値を調べたかったのです
 }
}
0960デフォルトの名無しさんNGNG
>>955
浮動小数点数で遊ぶときは、ちゃんと例外処理を入れといた方がいいよ。
0961デフォルトの名無しさんNGNG
#include <stdio>
main()
{
float f;
for (f=1.0 ; f+1>f ;f=f*2); ;
printf ("%e\n",f);

for(f=1.0 ; f+1>f ; f=f*2+1); ;
printf ("%e",f);
}
0962デフォルトの名無しさんNGNG
#include <stdio>
main()
{
float f;
for (f=1.0 ; f+1>f ;f=f*2); ;
printf ("%f\n",f);
printf ("%f\n",f-1);
printf ("%f\n",f-10);
printf ("%f\n",f-1000);
printf ("%f\n",f-10000);
}
0963918NGNG
二分探索で見つけた値をいじってみたんだけど、
++とか--でこっそり数億かわってる・・・。
あぶねぇ。・・・アァ、アノコードシュウセイシナキャ・・・
0964デフォルトの名無しさんNGNG
>>918
浮動小数点数は一度に数桁しか表現できないから、
数が大きくなってくると 1 足しても何も起こらなくなっちゃうよ。
0965デフォルトの名無しさんNGNG
なんでfgetsは読み込む文字数を制限できるのに、getsはできないようにしたんでしょうね。
0966デフォルトの名無しさんNGNG
歴史的に順番が逆なんでねえの?
gets が読み込む文字数を制限できなかったから
fgets で読み込む文字数を制限できるようにした、と。
よく知らないけど。
0967デフォルトの名無しさんNGNG
プログラムの終了時にexit,returnを入れると思うのですが、
その2つの違いがよくわかりません。
どのように違うか、わかりやすく教えてください。
よろしくお願いします。
0968直リンNGNG
http://homepage.mac.com/yuuka20/
0969デフォルトの名無しさんNGNG
>>967
return → 関数の処理を終了する
exit() → プロセスの処理を終了する
0970デフォルトの名無しさんNGNG
アホ丸出しの質問で悪いんだが
>>2のリンクにあるホームページでgccって
どこでダウンロードすればいいんだ?
教えて君でスマソ。
0971デフォルトの名無しさんNGNG
>>970
> アホ丸出しの質問で悪いんだが
> >>2のリンクにあるホームページでgccって
> どこでダウンロードすればいいんだ?
> 教えて君でスマソ。
http://gcc.gnu.org/install/binaries.html
普通にダウンロードからいけたよ。
0972970NGNG
良く読んだら言葉足らずだな…
gccのHPのどこで、どのコンパイラをダウンロード
すれば一番良いのかと、聞きたかったんでつ…・゚・(ノД`)・゚・
0973デフォルトの名無しさんNGNG
>>972
OSによってちがう。
windows ならCygwin かMinGW。
0974970NGNG
>>973
thx。
windows使ってるんでそれでやってみるYO!
0975デフォルトの名無しさんNGNG
昨日から勉強始めました。C machineてソフトを使って、教本に載ってる例を参考にしながら自分で書いて動作確かめながらやってるんですが、同じように書いたと思うんですがエラーが起きます。
何度も見直したんですが解らないので・・・凄い単純な見落としがあるかも知れないんですが。

/*if文と等価/関係演算子*/
#include <stdio.h>
main()
{
int a,s;
printf("整数を二つ入力して下さい\n");
printf("それらが満たす関係を示します: ");
scanf("%d %d",&a,&s);

if (a==s)
printf("%dは%dと等しい\n",a,s);

if (a!=s)
printf("%dは%dと等しくない\n",a,s);

if (a<s)
printf("%dは%dよりも小さい\n",a,s);

if (a>s)
printf("%dは%dよりも大きい\n",a,s);

if (a>=)
printf("%dは%d以上である\n",a,s);

if (a<=s)
printf("%dは%d以下である\n",a,s);

return 0;
}
0976デフォルトの名無しさんNGNG
>>975
エラーが出ますとだけ書いて、エラーの内容を書かないやつは
聞く気がないんですよね。
0977デフォルトの名無しさんNGNG
あとCmachineとかいうのは使っちゃいかんとあれほど…
あれはC処理系じゃないのでこのスレで質問するのはスレ違い。

出てるのは文法エラーとかsyntax errorとかだろう。
下から2番目のifの条件式が変だぞ。
0978デフォルトの名無しさんNGNG
このプログラムの出力結果の説明をお願いします。
1.〜
2.〜  という感じで。
#include<stdio.h>
main()
{ char a[10];
int n,k,i,j,l,m,h,g;
scanf("%d %d",&n,&k);
for(i=0;i<n+1;i++)
if(i%2==1)
a[i]='*'; else a[i]=' ';
g=0;
if(n%2==0)
g=1;
for(i=0+g;i<n+g;i++)
for(l=0;l<k;l++)
{
h=0;
if(i%2==0)
h=1;
for(j=0+h;j<n+h;j++)
for(m=0;m<k;m++)
printf("%c",a[j]);
printf("\n");
}
}
おかしな出力結果になったら教えて下さい。ではお願いします。
0979デフォルトの名無しさんNGNG
意味がよく分からない。宿題?
0980デフォルトの名無しさんNGNG
とりあえず次スレ先頭に「C machineはCに非ず」を書くこと求む。
0981デフォルトの名無しさんNGNG
>>979
レポートを提出しなければいけないので。
0982デフォルトの名無しさんNGNG
>>981
宿題スレがあるのに、なんでわざわざここで?
0983デフォルトの名無しさんNGNG
>>982
スマソ。では移動します。
0984デフォルトの名無しさんNGNG
次スレ立てないの?
0985デフォルトの名無しさんNGNG
イラネ。
0986デフォルトの名無しさんNGNG
どうして、

・0 && 1 || 1 : 真
・0 && (1 || 1) : 偽
・1 || 1 : 真

なんでしょうか。
どうにも理解できませんです。
0987デフォルトの名無しさんNGNG
1
> || 1
これだけで真
2
> 0 &&
これだけで偽
3
おいおい。
0988987NGNG
0が偽、非0が真ということを知らないのかな?
0989デフォルトの名無しさんNGNG
申し訳ない…今気づきました。
ただそれだけのことだったのね。

ホンマすいません。
0990デフォルトの名無しさんNGNG
>>987
おいおい1と2の説明を合わせたら、1がわからなくなるだろ。
0991デフォルトの名無しさんNGNG
>>990
括弧で演算の順番を変えているじゃん。
0992989=986NGNG
名前書き忘れ、989=986でした。
こんなあほらしいこと聞いちゃってホントすいません。。。
0993デフォルトの名無しさんNGNG
 ! 0 && (1 || 1) これは?
0994デフォルトの名無しさんNGNG
1
0995デフォルトの名無しさんNGNG
新スr(PAM!
0996デフォルトの名無しさんNGNG
>>980
> とりあえず次スレ先頭に「C machineはCに非ず」を書くこと求む。
テンプレ追加
0997デフォルトの名無しさんNGNG
てんぷれきぼん

C言語なら俺に聞け! Part 〈57〉
http://pc2.2ch.net/test/read.cgi/tech/1053725121/
0998デフォルトの名無しさんNGNG
1000
0999デフォルトの名無しさんNGNG
いーつーもーかがやいていたね!!
1000デフォルトの名無しさんNGNG
--- 僕の前に1000はない。
--- 僕の後ろに1001はできる。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。