トップページ⇒tech
983コメント281KB

C言語なら私に聞いてYO! 49

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問してYO!
むしろ質問する前にWEBで検索するのが常識だYO!

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行ってYO!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行ってYO!

コンパイラを探しているなら >>2 を見てYO!

上記を逸した場合の結果は激しく未定義とするYO!

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/

前スレだYO!
http://pc3.2ch.net/test/read.cgi/tech/1041127646/
0232デフォルトの名無しさんNGNG
>>231
元金と利子だからな
0233デフォルトの名無しさんNGNG
032 #なんだかnandaka
038 #あそこがasokoga
214 #むず痒いmuzugayui
314 #なんでだろnanndedaro
286 #なんだか切ないnanndakasetsnai

↑こんな感じの複数行のテキストファイルがあり、
このファイルを引数で渡すと
数字のみファイルに書きこむプログラム
(#以降はコメントのようにみなす)を
作成していたのですが、変更があって
032 #なんだかnandaka
ne #あそこがasokoga
214 #むず痒いmuzugayui
↑のように数字以外のものがあっても
変換する必要性が出てきました。
今まではisdigit()で済ませていたのですが
それでは2行目の"ne"が弾かれてしまいます。

そこでどのようにすれば#以降を弾きつつ
先頭行の数字以外のデータを書きこむように
できるのかをお教え頂きたくカキコしております。

ほんと厨房で長々と乱文でスイマセソ
5教授お願い致します。。。
0234デフォルトの名無しさんNGNG
>>233
書き込むって何に書き込むんだ?
文脈から判断できない
メモリーか?
0235234NGNG
ああ、わるい。ファイルか。
0236234NGNG
>>233
strchrで#までの長さを求める。
なければ行末までとする。
0237236NGNG
言い方が悪いな。
strchrをうまく使って長さを求める。
strcspnを使ってもいいけど
0238デフォルトの名無しさんNGNG
isdigitの代わりにisgraphをつかう
023910000NGNG
C言語でいまCGI作ろうとしているんですが
とりあえず文字表示するだけとかやってみたわけなの
printf("<HTML>");みたいに。
それをコンパイルしてXREAってトコロにUPしてみたの
だけど・・動かないの・・・EXEをCGIにリネームしてUPしたのに。
・・・・なにがわるいんでしょう・・・??
0240236NGNG
>>239
・コンパイルした環境がxreaと違うから
・Content-Typeヘッダーを出力していないから
0241デフォルトの名無しさんNGNG
>>239
EXEとか言っているあたりWindows上でコンパイルしたな・・・・
xreaはLinux(CPUはIntel系)だから。
024210000NGNG
printf("Content-type:text/html\n\n");
こんなん付けていましたが・・・ダメでした・・。
環境はVCなんです。・・うーぬ。
レスありがトン。
0243デフォルトの名無しさんNGNG
トクトクでコンパイルしたものをXREAにアップすれば動くかも
024410000NGNG
Windowsじゃだめなのですか!!
それは気付かなかった・・っていうか知らなかった〜
Linux対応にするにはどうすればいいか、わかります・・?
0245デフォルトの名無しさんNGNG
>>233
strtok(バッファの内容を改変してもいいとき)
もしくは strchr(よくないとき)を使う。

>>242
: の後は空白を空ける。
printf("Content-type: text/html\n\n");

>>244
Linux 上でコンパイルする。
0246デフォルトの名無しさんNGNG
>>245
他のバッファにコピーするならsscanf(src,"%[^#]",dest);こんな感じかな?
0247デフォルトの名無しさんNGNG
>>244
自分とこでLinux環境整えてそこでコンパイル、が一番楽なんじゃないかなぁ…
Cygwin使えばWIN上でLinuxバイナリ作れる?
ttp://www.sixnine.net/cygwin/cygwin-doc/devel/cygwin-to-linux-cross-howto.html
024810000NGNG
Linuxヵー自分全然わかんないッス・・・。
まだ遠い道なのかな・・。
0249セグメントフォルトNGNG
レンタル鯖でCGIするなら、やっぱperlとかの方がいいっしょ。
実験用に自前鯖つくるか
0250デフォルトの名無しさんNGNG
*.cgi の中身ってどんな言語?
ってか、コンパイルされた状態なの?
テキストソースなの?
0251デフォルトの名無しさんNGNG
>>250
実行できるなら何でも。
0252デフォルトの名無しさんNGNG
>>239のことなら>>239を読めば分かると思うけど・・・

> C言語で
> それをコンパイルして
0253252NGNG
そういう意味か・・・

標準入出力と環境変数にアクセスする機能があれば言語は問わない。
Cで書かれたものならもちろんコンパイルしないとだめ
0254251NGNG
>>252
確かにそういう意味かもしれんな...。

>>251 に補足するなら、サーバが許可してない形式のは実行できなかったと思う。
インタプリタ言語なら、もちろんインタプリタがサーバに置いてないと実行できない。
ホームでインタプリタを自前でコンパイルして使うという手もあるが...。
0255デフォルトの名無しさんNGNG
const struct ABC {int i;} a;
struct ABC b;

ってすると、なんで a しか定数にならないのー?
型限定子なのに
0256デフォルトの名無しさんNGNG
書き換え不能なstruct ABC型のaだからじゃない・・・
何がおかしいんだろ・・・
0257困った1 ◆tr.t4dJfuU NGNG
int findpos(char s[], int lim)
{
 int i;

 for (i = 0; s[i] != '\0' && i < lim; i++)
 {
  ;
 }
 if (i == lim)
 {
  while (i >= 0 && (s[i] == ' ' || s[i] == '\t'))/*�@*/
  {
   i--;
  }
 }

 return i;
}

�@の条件が常に偽になるのはなぜなのでしょう?
0258デフォルトの名無しさんNGNG
free()でsegmentation faultが発生するんですが考えられる原因は何でしょうか
0259デフォルトの名無しさんNGNG
>>258
・mallocで得た領域でない。
・既にfree済み。
0260デフォルトの名無しさんNGNG
const struct ABC {[?[struct]?] int i;} a;
0261困った ◆tr.t4dJfuU NGNG
「困った1」ではなくて「困った」でした。スマソ。
0262デフォルトの名無しさんNGNG
>>257
常に偽になるわけないでしょ。
findposに与える引数を工夫してみな。
0263デフォルトの名無しさんNGNG
>>259
それ以外にも、ポインタとかの使い方間違えてて、メモリ管理がぐちゃぐちゃになってるとか...。
0264デフォルトの名無しさんNGNG
>>230
>変数を後ろに宣言する何の必要があるのか?
関数でも変数でも定義や参照の後ろで宣言するのは意味無いし
0265258NGNG
>>259,263
1)でした...
静的に確保した領域を開放しようとしてました.
どうもありがとうございました.
0266デフォルトの名無しさんNGNG
>>255
それで正常です。
構造体の定義の部分に const をつけても、
その構造体変数を作ろうとした場合に const になるわけではありません。
定義の部分でついでに定義した構造体変数が const になるのです。

常に const になって欲しいんならこんな感じで。
typedef const struct __ABC {int i;} ABC;
ABC a = { 0 };
ABC b = { 5 };
0267困った ◆tr.t4dJfuU NGNG
>>262
ありがとうございます。
その方向で工夫してみます。
0268デフォルトの名無しさんNGNG
>>198
再帰関数を書いたときにauto変数であることを明示するために書いたことがある。
0269デフォルトの名無しさんNGNG
>255
>const struct ABC {int i;} a;
だと
const struct ABC a;
でって、ABCがconstになるわけじゃないですからね。
そもそも、型を定数にしてなんかいいことある?

あえてするなら
struct ABC {const int i;};
かな?

0270デフォルトの名無しさんNGNG
sizeof honyaraと、sizeof(honyara)って何か違いますか?
0271デフォルトの名無しさんNGNG
don't worry.
0272デフォルトの名無しさんNGNG
>>270
#define honyara honya + ra
後は自分で考えませう
0273デフォルトの名無しさんNGNG
>>269 です。
んー、簡単なプログラムかいて、色々実験してみたんだけど、
結果は、同じになります。
あんまり悩む事じゃないのかな??
0274デフォルトの名無しさんNGNG
>>272
それは、そんな定義する奴の方が悪いと思うけど。
0275デフォルトの名無しさんNGNG
>>273
じゃ↓を試してみ
#define honyara 7 + 11
printf("%d\n",sizeof honyara );
printf("%d\n",sizeof(honyara));
0276デフォルトの名無しさんNGNG
型に対してsizeofするときは括弧が必要なんじゃなかった?
0277デフォルトの名無しさんNGNG
>>274
それは同意だが、>>270は、何が違うのか聞いてるので…
0278デフォルトの名無しさんNGNG
>>277
だからと言ってそんな変な例を出してどうする。

sizeof 単一式
sizoof(型名)

と言うだけのことだろ。規格書ぐらい読めよ。
0279デフォルトの名無しさんNGNG
>>275さん、どうもです。
なるほど、この場合だと結果は違いますね。

自分の環境だと、
printf("%d\n",sizeof honyara );
これは、15になって、
こちらは、
printf("%d\n",sizeof(honyara));
4になりました。

後者は、sizeof(int)をあらわしてると思うのだけど、
前者はなんだろう?
うーむ、、、、考え中...
0280デフォルトの名無しさんNGNG
>>278
>sizoof(型名)
>規格書ぐらい読めよ。
プッ
0281デフォルトの名無しさんNGNG
>>279
型名に()が必要と言うのは
#define honyara int
や
typedef int honyara;
の場合
0282デフォルトの名無しさんNGNG
>>278
そうか?俺は勉強になる良い例だと思うが・・・

ところで単一式なんて単語定義されてたっけ?
0283デフォルトの名無しさんNGNG
>>279
sizeof 7 + 11 は ( sizeof 7 ) + 11
sizeof( 7 + 11 ) は sizeof( 18 )
で、あなたの環境の場合 sizeof 7 も sizeof 18 も4だったって事
0284デフォルトの名無しさんNGNG
>>281
つまり、一般的には(typedefしない時などは)、両者は同じであるというわけですか?

正直、わかったような、わからないような。
なんだか釈然としないですょ。
0285デフォルトの名無しさんNGNG
>>283
なるほど!
非常によくわかりました。

カッコつけることで、優先順位あげてるわけか。
理解しますた。
みなさん、どうもありがとうございました。
0286デフォルトの名無しさんNGNG
>>284
いつでも括弧をつけていれば間違いない。
俺は変数に対してはあまり括弧をつけないけど・・・
0287デフォルトの名無しさんNGNG
>>284
要は、honyaraの正体を知ってる時は、どっちを使っても構わないが
honyaraの正体を知らない時は()使えって事
また、honyaraの正体を知ってても変更する(される)
可能性がある場合も()使えって事
0288デフォルトの名無しさんNGNG
俺はいつもつけるようにしてるな、
つけないとワードとワードが2つ連続して並んじゃってなんか居心地が悪い

hage + sizeof hoge + huge
        ↑ここに何も無いのがキモイ
0289デフォルトの名無しさんNGNG
ところで
sizeof(i++)
のように、変数を変化させる事を書いた場合の
ふるまいって、どうなってるの?
0290デフォルトの名無しさんNGNG
sizeofの中味は評価されないんじゃなかった?
i++の型だけが使われて、iの値は変化しないと
0291デフォルトの名無しさんNGNG
>>289
変数の大きさに変数の中身は関係ないんじゃ?
0292291NGNG
ああ、i++が実行されるかどうかということか。
どうだろ・・・
0293289NGNG
手持ちのコンパイラは全て変化しないけど
これが、保証済みだったら良いけど
未定義や処理系定義だったら怖いでふ…
まぁ
#define i j++
とかアホな宣言しなければ良いんですけどね…
0294デフォルトの名無しさんNGNG
C++/C99の規格では、(C99の可変長配列を除いて)オペランドは評価されない。
となってる。
0295デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
putchar(126);
}

だと ~ が表示される.(~のコードが126だから)
しかし 。 のコードは130のはずなのに,

#include<stdio.h>
main()
{
putchar(130);
}

と打っても結果が表示されません.これに関して,130〜159までが表示されないみたいなんですが,なぜなんでつかー??おせーてくらさい.
0296デフォルトの名無しさんNGNG
130のコードが'。'では無かったから
0297デフォルトの名無しさんNGNG
>>295
isgraph()で調べてみたら。
スペース以外の表示可能文字なら0以外を返す。
0298デフォルトの名無しさんNGNG
>>295
。 は 161(0xA1) だと思います。

129(0x81) 〜 159(0x9F) はSJISでは2バイト文字用の
文字コードなので、単独では何も表示されません。
0299デフォルトの名無しさんNGNG
putchar はコードを文字に変換出力しますが,その逆(文字をコードに)をしてくれる命令はありますか??
0300296NGNG
誰も突っ込んでくれない…鬱
0301デフォルトの名無しさんNGNG
勉強になります.ここはレベル高杉ですね
0302デフォルトの名無しさんNGNG
ぼけのレベルがですか?
0303レゴ其の二NGNG
助けて下さい。
#include <iostream.h>
#include<stdio.h>

void main()
{
FILE *fp;
fp=fopen("素数−実行結果.txt","a");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
0304レゴ其の二NGNG
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
}

素数を表示するプログラムなんですが、
実行結果をテキストファイルに出力するにはどうしたら良いですか?
教えて下さい。御願いします。
ちなみに、コレを実行しても、作成されたテキストファイルは白紙になってしまいます。

0305デフォルトの名無しさんNGNG
>>299

printf( "A=0x%02x\n", 'A' ) ;
0306デフォルトの名無しさんNGNG
てっとり早くやるなら、そのプログラムの名前をtestとしたら、
test > hoge.txt
ってしたら、いいんじゃねーか?
面倒くせーから、まともなやりかたは、他の人に聞いてくれ。
0307デフォルトの名無しさんNGNG
>>303-304
お前最悪。
マルチポストかよ。

氏ね。
0308レゴ其の二NGNG
実行結果をテキストファイルに出力する仕方を教えて下さい。
御願いします。
なかなかうまくいかないんです。
0309デフォルトの名無しさんNGNG
マルチポストなのでIP抜いて通報しますた
0310レゴNGNG
マルチポストってなんですか?
0311デフォルトの名無しさんNGNG
>>310
複数のスレッドに同じことを投稿する違法行為。
知らなかったじゃ済まされないのが犯罪。
0312レゴNGNG
すいません。
いえ、あちらの方に、MFC限定と書いてあったので、
書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
だから、他には投稿してないです。
0313デフォルトの名無しさんNGNG
ム板はやたらスレが細分化されてるからなあ。
マルチポストと移動の違いが分からない罠。
0314デフォルトの名無しさんNGNG
>>312
ならそう書けよ……
0315レゴNGNG
迷惑掛けてしまったみたいで恐縮なんですが、
どうしたら、うまくテキストファイルに出力できるか、
教えて下さい。御願いします。
0316デフォルトの名無しさんNGNG
>>312
マルチポストが何故いけないのかちゃんと調べておこうな。

>>313
移動はちゃんと移動したと書いてある。
マルチポストと勘違いされるのを防ぐのにな。
0317名無しさん@3周年NGNG
「レゴは
 素直に
 単位を
 落とせ。」
0318デフォルトの名無しさんNGNG
向こうにレス付いてたよん。
0319デフォルトの名無しさんNGNG
>>312
>書き込んだ後で、違うかも知れないと思って、こっちに来たんです。
1、書き込む前に確認する
2、移動する時は、必ず、移動すると元スレに書き込んでから移動する
以上、基本ですので憶えて置きなはれ

追記
反省してるならMFC限定スレにも謝っておく事
0320デフォルトの名無しさんNGNG
>>303
それは C++ だが、ここは 「C 限定」 なんだよな。
0321レゴNGNG
316>>
はい、分かりました。

317>>
単位というか、研究室に入れなくなってしまうんです。

0322レゴNGNG
fprintfの使い方分かる方、教えて下さい。
0323デフォルトの名無しさんNGNG
>>322
>>1読んだ?
0324レゴNGNG
読んだんですけど、C言語というと、C++も入ってるんですかね?
違うけど、言葉的に入ってると思ったんですが。違うのでしょうか?
間違ってたら、すいません。
0325レゴNGNG
FILE *fp,*fc;
fp=fopen("素数−実行結果.txt","w");
int i, j ,f,n=1000,c=0;
// 1から1000までの数の素数を求める
// i, jはループ変数
// fは一回でも割り切れたら1。
// 一度も割り切れなかったら0。
for(i = 2; i <= n; i++) // i(==2,3,4,..,1000)について調べる。
{
f = 0;
for(j = 2; j < i; j++) // j(==2,3,...,i)で割ってみる。
{
if(i % j == 0) // あるjで割り切れたらfは1。
f = 1;
}
if(f == 0){// iを割り切るjがなかった場合
cout << i << "は素数です。" << endl;
c++;
}
}
printf("%d個です。",c);
fc=fclose("素数−実行結果.txt","w");
と入力したのですが、エラーが出てしまいました。
0326デフォルトの名無しさんNGNG
>>324
はっきり言われないとわからないか。
>>1 の 2 行目は呼んだか?

あと、C と C++ は全然別言語だ。
0327レゴNGNG
fprintfを使った方が簡単に出来るのですか?
もしかして、両方使わないといけないんですかね?
0328レゴNGNG
326>>
はい。
自分で色々調べたり、先輩に聞いたんですけど、
ここまでしか分からなくて。
本当に頭悪くて、すみません。
0329レゴNGNG
それでは、失礼します。
0330デフォルトの名無しさんNGNG
>>328
まずfopenとfprintfとfcloseの使い方をおぼえたほうがいいな。

なんでfpにファイルをオープンしたポインタを代入してるのにcoutに出力してんだ?
fpをまったく使わない時点でおかしいと思わないのか?
0331レゴNGNG
えっ?
fpに出力ですか?
coutは、使わないんですかね?
初めに素数を表示するプログラムが完成した後で、
テキストファイルに出力出来るようにしようとしたので、
分からなくなったんです。
ちょっと、いじってみます。
■ このスレッドは過去ログ倉庫に格納されています