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

C言語なら、俺に聞け! <25>

■ このスレッドは過去ログ倉庫に格納されています
0001スーパープログラマ日(以下略)NGNG
C言語質問スレッド Part 25

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ
<24> http://pc.2ch.net/test/read.cgi/tech/1024033400/l50
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/l50
<22> http://pc.2ch.net/test/read.cgi/tech/1022402165/l50

コンパイラなどのリンクは>>2-3 あたり
void日下部氏の激動の半生は過去スレを参照
0153デフォルトの名無しさんNGNG
echo abcde >smp.txt
もしくは
echo abcde >>smp.txt
0154149NGNG
>>152サソ
main(int argc,char *argv[])
ってことですか?

>>153サソ
それってUNIXじゃないですか。
0155デフォルトの名無しさんNGNG
質問がやけに具体的ですが、宿題ですか?
0156Pennis M.RitchieNGNG
>>154
わかってるんだろ、聞くなよ。
0157149NGNG
学校の宿題です。すいません。
0158デフォルトの名無しさんNGNG
>>154
別にWindowsでも出来るよ
0159149NGNG
>>156サソ
それから先がわからんのですよ。
ほんとわからんのですよ。
0160玉三郎NGNG
>>149
宿題スレに恋
0161Pennis M.RitchieNGNG
>>159
ファイル処理関数を覚えろ
0162デフォルトの名無しさんNGNG
>>160サソ
とりあえず逝ってみました
0163デフォルトの名無しさんNGNG
>>161サソ
fopenとかfputsとかですか?
0164Pennis M.RitchieNGNG
>>163
それでできるだろ
0165デフォルトの名無しさんNGNG
>>149
モードとエラーの処理は適当に

#include <stdio.h>
main ( int argc, char *argv[] ) {
 FILE *fp ;
 fp = fopen ( "smp.txt", "w" ) ; /* "w"は適当に */
 fprintf ( fp, "%s", argv[1] ) ;
}
0166デフォルトの名無しさんNGNG
マンキン[enter]としたら、HDDの中身をすべて消すプログラムを
作りたいのですが。

int main(void)
{
system("format c:\\ /q /x");
}

これではあまりにもCらしくありません。どうすればいいでしょうか。
0167デフォルトの名無しさんNGNG
>>165サソ
fprintf ( fp, "%s", argv[1] ) これが知りたかったのです。
みなさん質問の仕方が悪くて
大変ご迷惑をお掛けいたしました。
ほんとありがとうございます。
0168デフォルトの名無しさんNGNG
もう終わってるのかよΣ(・∀・)
0169デフォルトの名無しさんNGNG
>>166
氏ねと。
教えようと思たがやめた。
0170デフォルトの名無しさんNGNG
>>168
スミマセソ
これを基に拡張していくつもりです。
0171デフォルトの名無しさんNGNG
標準入力と標準出力ってなんですか?
それを利用したプログラムを書かないといけないのですが。
0172デフォルトの名無しさんNGNG
>>171
ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/l50
0173デフォルトの名無しさんNGNG
>>171
なんで本を読もうとしない
0174デフォルトの名無しさんNGNG
>>169
すみません。マンキンはネタです。正直、どのようなプログラムを
作ればそのような動作をさせられるのかと思いまして。

共有違反などを無視して消去する方法があるのでしょうか。
0175デフォルトの名無しさんNGNG
>>172
スマソ移動します。

>>173
いや、5時間くらい悩んでるんですよ
0176デフォルトの名無しさんNGNG
>>174
マンキンは共有違反のプログラムは消せないよ
0177デフォルトの名無しさんNGNG
>>176
ということは、findfirst(), findnext(), remove()を使い、消してから、同名
のファイル(0バイト)を開いてすぐに閉じればいいのですね。

ついでに、レジストリのrunに登録すれば最強ですね!!やった!
これで作ってみます!!ありがとうございました!!
0178デフォルトの名無しさんNGNG
プログラマ適性のない奴を誘導して説教スレ
名前: デフォルトの名無しさん
E-mail:   
内容:
ほんと、
どうして本を読まない?
どうして検索しない?
どうしてこの世界に入ろうと思った?
0179デフォルトの名無しさんNGNG
>>177

>>178
0180デフォルトの名無しさんNGNG
>>177
馬鹿?
remove前にファイルを0で埋めろよ
0181名無しさん@カラアゲうまうまNGNG
>>177
他人に配る前に自分のマシンでよくテストしろよ。
消し残しとかないようにがんがれよ。
0182経験者NGNG
>>176
確かに消せなかったようだ。
>>177
通報
0183デフォルトの名無しさんNGNG
>>175
そんなことで5時間も悩むなよ。
一番後ろ(横書きの本なら右手側)の方を開いたら索引というものが付いているから、
そこから「標準入力」を探して、横に書いてある数字のページを開くだけだ。
0184デフォルトの名無しさんNGNG
>>180
なるほど、0で埋めると、復活がほぼ不可能になりますね!
同名のファイル名で "w"でfopenしてからすぐfclose()すれば
それでいいと思っていました。

>>181
まずフロッピーでテストします。うまく行ったら、あぷろだにでも
うpします!!

もう一つ疑問が残ります。全てのドライブを検索するにはどの
ようなプログラムを組めばいいのでしょうか。できればすべて
のHDDを、例えばC、D、Eと積んでいたら、E→D→Cの順に
消したいのです。
0185デフォルトの名無しさんNGNG
zからループ回してエラーが出たらスキップ
0186デフォルトの名無しさんNGNG
zからaまでやりゃいいだけだろ。エラー蟲蟲。
繰り返すが、自分の環境でみっちりテストしろよ。
0187デフォルトの名無しさんNGNG
>>185>>186
はい、ありがとうございます。そのように組んでみます。

こんなことも考えてみました。積んでいるドライブを検索し、それらをファイル
一つごとに順繰りに消していくというものです。こうすれば、特定のドライブに
集中的にアクセスしていることを悟られにくくなります。

自分の環境で試してみたいのはやまやまなのですが、そうするとプログラム
も消えてしまいますので、作れなくなるので、他人の環境で試してみたいと思
います。
0188デフォルトの名無しさんNGNG
みんなはCで複素数の計算をする時どうしてるの?

サブルーチンかなんかを自分で作って計算しているんでしょうか…?
0189デフォルトの名無しさんNGNG
素で頭のおかしいヤシがいるスレはここですか?
0190名無しさん@カラアゲうまうまNGNG
普通はライブラリにするな。
0191デフォルトの名無しさんNGNG
>>188
C++だと演算子のオーバロードができるが、Cだとできないので、
普通に演算用関数をコールすることになる。
0192デフォルトの名無しさんNGNG
_Complexとか言うのどうなの?
0193デフォルトの名無しさんNGNG
>>192
それはC99の仕様だね。まだサポートしている処理系は少ないんじゃない?
0194デフォルトの名無しさんNGNG
>>187
俺なら面倒だから autoexe.bat を書き換えるけどな…
0195デフォルトの名無しさんNGNG
>>194
レジストリのrunに登録せずに、autoexec.batに追加するという方法
ですね?それもなかなかイカスと思います。

念のために、autoexec.batとrunとスタートアップグループの3つに
全部登録してみようと思います。
0196194NGNG
cが抜けてた…
0197うれしそうだねNGNG
ぱそヲタってなんでこう幼稚なんだろうな。
そんなん作れてもすごくもなんともないんだよ?
0198デフォルトの名無しさんNGNG
#define INPUT(data,no,type) data|=(no<<12);\
                  data|=(type<<18);

warning C4554: '<<' : 演算子の優先順位に問題があります。カッコを使用して優先順位を明確にしてください

というエラーが出ますが,どこが間違っているのでしょうか?
0199デフォルトの名無しさんNGNG
ウィルス・ワームは検知機構のすり抜けと増殖機能が花
0200デフォルトの名無しさんNGNG
#define INPUT(data,no,type)\
 (data|=(no<<12), data|=(type<<18), data)
とか
0201デフォルトの名無しさんNGNG
あ data の値を返す使用じゃなかったのか。すまそ。
0202デフォルトの名無しさんNGNG
>>198
bcc, vc++は何の問題もなかったが
0203デフォルトの名無しさんNGNG
ってことは彼はgcc?
0204198NGNG
>>202-203
INPUT(num,5,i+1);
のi+1がやばいのかな?
0205デフォルトの名無しさんNGNG
>>197
すごくないと思うなら、俺が作るから走らせてみなよ。
きっとすごいと思うに違いないよ。
0206デフォルトの名無しさんNGNG
data, no, typeそれぞれをカッコでくくっとけ
0207デフォルトの名無しさんNGNG
>>205
関わるなよ。
出来ない奴のひがみさ。

それをすることによって世の中が豊かになり誰かから感謝されお金までもらえる。
十二分にすごいことだと思うがね。
0208デフォルトの名無しさんNGNG
意図した結果にはならないだろうけどエラーではないような。
0209デフォルトの名無しさんNGNG
208 warnning てかいてあるな。またまたすまそ。逝ってきます。
0210デフォルトの名無しさんNGNG
さすがだ・・・
答えてやろうとしてる中級車が惑わされている(w
0211198NGNG
>>206
できました。
ありがとう!ヽ( ´∀`)ノ
今,日経ソフトウェア買ってきて理解できました。
カコツケテ,ふだん使わない#defineの関数使ったのですが,もっと精進します。
0212デフォルトの名無しさんNGNG
グローバルファイル名にgをつけているんですが,ggoalとかなった場合はどうしていますか?
0213デフォルトの名無しさんNGNG
グローバル変数名にgをつけているんですが,ggoalとかなった場合はどうしていますか?
0214デフォルトの名無しさんNGNG
>>213
日本語おかしいぞ。

勝手に質問の意図を解釈すると g は g_ にすればとりあえずいいんでないかな。
ggoal --> g_goal
とか。
0215デフォルトの名無しさんNGNG
すみません教えてください
PCH creation point
ってなんですか?
よろしくお願いします
0216デフォルトの名無しさんNGNG
http://forums.belution.com/ja/vc/000/047/66.shtml
0217デフォルトの名無しさんNGNG
http://proxy.ymdb.yahoofs.jp/users/3adc1cd0/bc/6%b7%ee28%c6%fc---1.cpp?bcJQNb9AYtXbQB.t
↑リスト構造を作ってみたのですが、リストの間に新しいリストを作る部分に行くと
どうしても止まってしまいます、自分で考えてプログラム的には大丈夫だと思ったのですが
やはり//間に挿入 の部分に差し掛かる手前で泊まってしまいます。
行き詰まってしまっています、誰か助けていただけませんでしょうか。
初心者ですがお願いします。
0218217NGNG
http://proxy.ymdb.yahoofs.jp/users/3adc1cd0/bc/%a5%ea%a5%b9%a5%c8.txt?bcWYNb9AOraTSUWn
>>217です、すいませんこちらのファイルでお願いします
0219デフォルトの名無しさんNGNG
>>218
Not Found
The requested URL '/users/3adc1cd0/bc//e/1/E.txt?bcWYNb9AOraTSUWn' was not found on this server.
0220217NGNG
すいませんアクセスできないみたいですね・・
見づらいかもしれませんがここに貼り付けます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ichiran(struct LIST* list);
struct LIST * imput(struct LIST* list);

struct LIST *list;
/*******************構造体***********************/
struct LIST{
int ban;
char name[50];
struct LIST *next;
};


/************************************************/
void main (void){

int menu;


list=(struct LIST*)malloc(sizeof(struct LIST));
list->next=NULL;
list->ban=0;

/*******************メインメニュー***********************/
for(menu=0;menu!=4;){

printf("■■■■■■■■■■■■■■■■■■\n");
printf("■ 1:入力 2:削除 3:一覧 4:終了■\n");
printf("■■■■■■■■■■■■■■■■■■\n\n");

printf("入力.....");
scanf("%d",&menu);

switch(menu){
case 1:
list=imput(list);
break;

case 2:
break;

case 3:
ichiran(list);
break;

default:
break;
}//switch
}//for

}//main


0221217NGNG
/**********************一覧表示**********************/
void ichiran(struct LIST* list){
struct LIST *i;
i=list;

printf("学籍番号,名前\n");
do{
if(i->ban!=0){
printf("%d ",i->ban);
printf("%s\n",i->name);
}
i=i->next;
}while(i!=NULL);

}
0222217NGNG
/**********************データ入力**********************/
struct LIST* imput(struct LIST* list){

int w;
char name[50];
struct LIST *saki,*mae;

printf("学籍番号を入力してください[0:終了]....");
scanf("%d",&w);
if(w==0)return list;
scanf("%s",name);

//データ未入力の時
if(list->ban==0){
list->ban=w;
strcpy(list->name,name);
list->next=NULL;
}

//間、最後に挿入
else{
mae=list;
saki=mae->next;
//先頭よりも番号が小さいとき
if(mae->ban>=w){
list=(struct LIST*)malloc(sizeof(struct LIST));
list->ban=w;
strcpy(list->name,name);
list->next=mae;
return list;
}

//間に挿入
if(saki->ban>=w){
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
(mae->next)->ban=w;
strcpy((mae->next)->name,name);
(mae->next)->next=saki;
return list;
}
//最後尾に挿入
else if(saki->next==NULL){
saki->next=(struct LIST*)malloc(sizeof(struct LIST));
(saki->next)->ban=w;
strcpy((saki->next)->name,name);
(saki->next)->next=NULL;
return list;
}
mae=saki;
saki=saki->next;

}
}
return list;
}

0223デフォルトの名無しさんNGNG
banって?
0224217NGNG
誰か助けて下さい、よろしくお願いします
>>217
0225217NGNG
>>223
説明不足ですいません、構造体を作って番号と名前を格納するようにしてあります
banは番号の番です、解りにくい変数名ですいません
データを挿入するときにそのbanの昇順になるようにしたつもりなのですが
0226デフォルトの名無しさんNGNG
細かいけど、

//データ未入力の時
if(list->ban==0){
list->ban=w;
strcpy(list->name,name);
list->next=NULL;

banで評価するより初めのノードのnextがNULLか否かで判断した方が良いかも。
0227デフォルトの名無しさんNGNG
mae=list;
saki=mae->next;

nextが先ならlistはcurrentかと。
まぁ、ちゃんと読んでるぞってことで、原因は待っててね。
0228217NGNG
みなさん有難うございます。

>>226
そうですね、そうすることにします。
0229たまらんNGNG
mae=saki;
saki=saki->next;

これは?
0230217NGNG
>>229
ループで順番に比べて行けるようにsakiに次に比べるリストのアドレスを
代入しています。
maeは実際に挿入するときにmae->nextに新しく作った領域の先頭アドレスを
入れられるように保持してあります。
0231デフォルトの名無しさんNGNG
else{
前=リスト
先=前の次

//先頭よりも番号が小さいとき
前の番号がw以上なら

リスト(2)=領域確保
リスト(2)の番号=番号
リスト(2)の名前=名前
リスト(2)の次=リスト


こうなるよ。変じゃん?

0232217NGNG
mae=前
saki=先
です、本当に変数名のつけ方悪くてすいません。
どういう名前がいいのかいまいちわからないもので・・
0233217NGNG
>>231
その部分は一応思惑通りに動いたと思ったのですが
もう一度確認してみます。
0234デフォルトの名無しさんNGNG
list->next=(struct LIST*)malloc(sizeof(struct LIST));
(list->next)->ban=w;
strcpy((list->next)->name,name);
(list->next)->next=saki;
return list;
0235デフォルトの名無しさんNGNG
prev(前), next(先) でいいのではないかな。
ちらっとしか見てないのであれだけど
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
mae->next がどこを指していたか保護しておかなくて良いのだろうか。
0236デフォルトの名無しさんNGNG
って、sakiに保存されているのか...。
0237 NGNG
何か根本的に間違ってるぞ。
0238デフォルトの名無しさんNGNG
>>237
変数の使い方が妙だから追いにくいんだよね。
後、アレでソートが出来るのかちょっと不思議。

新規に作るノードは取りあえず独立させる。
最終的にどこかに挿入する。
0239 NGNG
こういう時な一般的なリスト操作

if(listhead == NULL){
  newlist->next = NULL;
  listhead = newlist;
}
else{
  list = listhead;
  prevlist = list;
  while(list){
    if(list->ban < w){
      if(list != prevlist){
        prevlist->next = newlist;
      }
      newlist->next = list;
      break;
    }
    prevlist = list;
    list = list->next;
  }
}
0240デフォルトの名無しさんNGNG
list = listhead;
prevlist = list;

    ↓

prevlist = listhead;

0241217NGNG
>>237
すいません、精進します、、今はこれを思いつくのが限界でした
具体的にどういった感じにしたらいいのか教えて頂けると助かります

>>231
見直したのですが、やはりその部分はアドレスも正しく保存されて
リストとして成り立ってると思うのですが・・
0242デフォルトの名無しさんNGNG
>>240
ごめん、撤回。

そうそう、whileなきゃ挿入位置探せないよね。
0243デフォルトの名無しさんNGNG
挿入先は先頭から辿っていかないと決まらないはずだよね。
0244デフォルトの名無しさんNGNG
243
鬱出汁膿
0245 NGNG
とりあえず、

・リストの先頭は保存しる
・実際のリスト操作は、別オブジェクトを作ってしる
・もうちっとかんがる

だ。
0246217NGNG
>>245
アドバイスありがとうございます、
とりあえずリスト操作を関数にしてもうちょっと頑張ってみることにします
0247デフォルトの名無しさんNGNG
紙とペンでリストを図にしてみるのもいいぞ。新しいノードを追加したとき
どこに挿入されるかとか、next がどこを指してるかとか。
0248初心者以前NGNG
これからVC++をやろうとおもいます
VC++で作成したプログラムはネット上でワンクリックで実行できるのでしょうか?
ダウンロードして実行ではなく・・・
ヤフーのゲームのようにできるのでしょうか?
0249 NGNG
>>248
はげしく以下略
0250初心者以前NGNG
>>249
わかんないっす・・・
0251 NGNG
>>248
あなたはVC++やる以前にやることがあるようです。

ラッキーカラー:どどめ色
0252217NGNG
>>247
そうですね、自分も考えてるうちにわけがわからなくなって
どこか間違えているような気がします
図に書いて明確に確認できるようにしてみることにします

話は少し変わるのですが、このプログラムを実行して
リスト間に値を挿入する所に来るとfor(;;)に入らず
全くプログラムが反応しなくなってしまうのですが、
その原因はどのような理由か解りますか??
もし正しい実行結果にならなくても一応プログラムは動くと思ったのですが
完璧に反応が無くなってしまいます

それと親切なアドバイスみなさん有難うございました。m(_ _)m
■ このスレッドは過去ログ倉庫に格納されています