C/C++の宿題を片付けます 74代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/21(木) 22:21:52【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 73代目
http://pc8.2ch.net/test/read.cgi/tech/1155355501/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0002デフォルトの名無しさん
2006/09/21(木) 22:37:47乙!
あげていこうぜイエイイエイ
0003デフォルトの名無しさん
2006/09/21(木) 22:40:13乙カレー
0004デフォルトの名無しさん
2006/09/22(金) 00:22:280005 ◆jG/Re6aTC.
2006/09/22(金) 08:17:25[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2679.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2005
[3.3] 言語: ベターCとしてC++
[4] 期限: 2006年09月25日12:00まで
[5] その他の制限: Winsock2を使用します。
ライブラリは、Cの標準ライブラリとSTLは使って大丈夫です。
基本的にコンソールアプリになります。
コーディングに関してはほとんど教えられておらず、Winsock FAQやMSDNを参考にして組め、と言われています。
言語はC++ですが、別にstdio.hを使っても大丈夫です。cstdioでもいいです。
あと、Winsock2ってことですが、無理にWinsock2の新機能を使わなくても、Winsock1の機能の方が使いやすければそれでも大丈夫です。
どうか、よろしくお願いいたします!
(前スレに間違えて投稿してしまったので、移動してきました。すみません。)
0006デフォルトの名無しさん
2006/09/22(金) 13:43:480007デフォルトの名無しさん
2006/09/22(金) 13:52:04テンプレ書いてくれ。
0008デフォルトの名無しさん
2006/09/22(金) 14:03:43すいません、自己解決しました。
0009(^-^) ◆MONSOON/qo
2006/09/22(金) 14:37:34長い
無理
0010素人です
2006/09/22(金) 14:53:50[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2682.txt
[3] 環境
[3.1] OS:Linux (FodoraCore2)
[3.2] コンパイラ名とバージョン: gcc バージョン不明
[3.3] 言語: Cのみ
[4] 期限: 2006年09月29日午前中
[5] その他の制限: 入力、表示は自作関数使用すること。
エラー理由が分からなくって困ってます。よろしくお願い致します。
0011デフォルトの名無しさん
2006/09/22(金) 15:07:18どんなエラーが出るんだ?
0012(^-^) ◆MONSOON/qo
2006/09/22(金) 15:12:03関数MyGetAddressとMyOutputがない
0013デフォルトの名無しさん
2006/09/22(金) 15:16:49このプログラム、多分それだけじゃ正常な動作はしない。
0014デフォルトの名無しさん
2006/09/22(金) 21:21:230015デフォルトの名無しさん
2006/09/22(金) 21:36:38テーブルってなんですか?DBでも連携させるのかな?
0016デフォルトの名無しさん
2006/09/22(金) 21:50:41それと仮IPと実IPの定義がわからない。
>「ホスト」から仮 MAC アドレスと仮 IP アドレスが送られてきたら
これはどういう意味でしょうか
0017デフォルトの名無しさん
2006/09/22(金) 22:51:16あと
>(注意)練習のため、サーバーはデフォルトポート(システムに指定させる)を使用して
ください。
これの意図するところがわかりません。
問題を作った人はSOCKETの知識はあるんですか?
0018デフォルトの名無しさん
2006/09/22(金) 23:20:39ゴメンよく読んだらほとんど書いてますね。
途中まで気づかずにコーディングしてて途中で気づいてやる気がなくなったので
とりあえず途中までうpします
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2683.txt
0019デフォルトの名無しさん
2006/09/22(金) 23:29:55空いてるポート使うってだけでしょ
勝手にOSが割り当ててくれる
0020デフォルトの名無しさん
2006/09/22(金) 23:41:510021デフォルトの名無しさん
2006/09/23(土) 00:17:280022デフォルトの名無しさん
2006/09/23(土) 00:27:30まぁまず>>1を読んで書き直せ
0023(^-^) ◆MONSOON/qo
2006/09/23(土) 01:00:33#include <stdio.h>
#define keta 30
main(){
int i,s,n,m;
for(n=2;n<15;n++){
s=1;
printf("1/%d = 0.",n);
for(i=0;i<keta;){
while(1){
s*=10;
if(n<=s)break;
printf("0");i++;}
m=s/n;
printf("%d",m);
s-=m*n;i++;
if(s==0)break;}
printf("\n");}}
00245 ◆jG/Re6aTC.
2006/09/23(土) 03:41:45すいません。確かに長いですね。
>>15
テーブルといってもDBではありません。
vectorやmapを使ってメモリ内に「概念的な」テーブルを作ります。
とにかくIP→MACの変換ができれば何でもいいと思います。
>>16
仮とか実っていうのは、自分もよくわかりません。
たぶん、仮というのは、そういうIPアドレスが存在するフリをする、って感じのことだと思います。
00255 ◆jG/Re6aTC.
2006/09/23(土) 03:42:49デフォルトポートの意図に関しては、自分もよくわかりません。
0を指定したら自動的に割り当ててくれるっていうのを、知らしめたい(?)んでしょうか。
>>18
取り組んでくれたんですね!!
ありがとうございます。
正直言うと、ネットワークは自分の専門でもないので、こんな長々したプログラムやってる時間がなくなってしまったのです。
もし、ちょっと時間を割いていただける方や、ネットワークの得意な方などいらっしゃいましたら、超猛烈に大感謝です!!
0026デフォルトの名無しさん
2006/09/23(土) 10:46:38[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2684.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:bcc
[3.3] 言語:C
[4] 期限:9月27日
[5] その他の制限:特になし
よろしくお願いします
0027デフォルトの名無しさん
2006/09/23(土) 12:07:02なんか問題文の日本語おかしいから、ちゃんと意味取れてるかわからんが、やるだけやった。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2685.txt
コードはここを参考にした。
http://www2.starcat.ne.jp/~fussy/algo/algo7-3.htm
0028デフォルトの名無しさん
2006/09/23(土) 15:57:46ありがとうございます、動きました
でもよくわからないところがあるんですがこの「free(table)」って命令は何をやってるんですか?
0029デフォルトの名無しさん
2006/09/23(土) 16:03:020030デフォルトの名無しさん
2006/09/23(土) 16:47:27いますぐ大学辞めた方がいいぞ。
0031デフォルトの名無しさん
2006/09/23(土) 17:52:040032デフォルトの名無しさん
2006/09/23(土) 18:27:03tableをfreedomしてます
動物愛護の精神です
0033デフォルトの名無しさん
2006/09/23(土) 19:22:23malloc で、確保したメモリを開放してる。
最近の OS はプログラム終了時メモリを強制的に開放するから、短いプログラムしか
書かない授業段階じゃ、一々 free() をさせてないんだろ。このスレじゃ珍しく
貰った答え読んで動作理解しようと努力してる奴をあんまり叩くなや><
0034デフォルトの名無しさん
2006/09/23(土) 19:28:570035デフォルトの名無しさん
2006/09/23(土) 19:39:180036デフォルトの名無しさん
2006/09/23(土) 21:16:110037デフォルトの名無しさん
2006/09/23(土) 21:18:20お前ら単位やらないから俺の講義でなくていいぞ
0038デフォルトの名無しさん
2006/09/23(土) 21:23:28先生!落ち着いてください!
0039デフォルトの名無しさん
2006/09/23(土) 23:15:13ワロタ
0040デフォルトの名無しさん
2006/09/23(土) 23:37:310041デフォルトの名無しさん
2006/09/24(日) 00:09:49Qとかかな?
0042デフォルトの名無しさん
2006/09/24(日) 00:16:56個人的にはZXCが苦手
リファクタリングとかやってると関数名や変数名にzxcの使用頻度が低い事に良く気が付く
0043デフォルトの名無しさん
2006/09/24(日) 00:44:340044デフォルトの名無しさん
2006/09/24(日) 13:04:08そうでもないか。。
0045デフォルトの名無しさん
2006/09/24(日) 13:23:010046デフォルトの名無しさん
2006/09/24(日) 15:00:18"6"は右手で打ちたいんだけど、MSナチュラルキーボード使ってるから強制的に左に…
0047デフォルトの名無しさん
2006/09/24(日) 16:27:08みんなどうやってうってるの?
左手小指でシフト、薬指で1を押してるんだけど…
0048デフォルトの名無しさん
2006/09/24(日) 16:29:08人差し指 - 1
0049デフォルトの名無しさん
2006/09/24(日) 16:37:29何故にそんな特殊な打ち方を・・・
0050デフォルトの名無しさん
2006/09/24(日) 16:44:56左小指でSHIFTを、左薬指を軽くTabに当てて姿勢制御、左中指で突き立てるように1を突く。
0051デフォルトの名無しさん
2006/09/24(日) 16:51:20例えば、
if(!
ってうつ場合、
(をうつときは左手の小指でシフト、右手中指で8を押して、
次に!をうつとき、左手の小指のシフトは押しっぱなしになるから、
薬指で1を押すことになっちまうんだよ><
どこかおかしいよね
0052デフォルトの名無しさん
2006/09/24(日) 16:55:28なれるまでは薬指でタブっちゃいそうだけど、
そっちのがよさげだね。
参考にさせてもらうよ
0053デフォルトの名無しさん
2006/09/24(日) 18:05:030054デフォルトの名無しさん
2006/09/24(日) 18:16:540055デフォルトの名無しさん
2006/09/24(日) 18:25:05自分は右シフトの存在に気付く前に一通りタイピングを覚えちゃった
0056デフォルトの名無しさん
2006/09/24(日) 18:58:210057デフォルトの名無しさん
2006/09/25(月) 00:01:060058デフォルトの名無しさん
2006/09/25(月) 00:31:56インタフェースはvoid wait( int time )で、
引数 time で渡された遅延時間(msec単位)だけ待って
処理を上に返す仕様です。
処理待ちの関数を作る課題でどうやって処理待ちをするか困ってます。
CPU速度に依存しない(ポーリングは使わない)やり方があったら教えてください。
WindowsのBCC32コンパイラを使っています。
005958
2006/09/25(月) 00:35:53今日はもう寝ます、ごめんなさい
0060デフォルトの名無しさん
2006/09/25(月) 00:38:420061デフォルトの名無しさん
2006/09/25(月) 06:00:33void wait(clock_t wait)
{
clock_t total = wait + clock();
while(total > clock());
}
0062素人です
2006/09/25(月) 08:33:26>>12
コンパイルの『ステータスは終了しました』という文は直りましたが、期待するものは得られませんでした。
精進します。どうもありがとうございました。
0063デフォルトの名無しさん
2006/09/25(月) 08:45:400064デフォルトの名無しさん
2006/09/25(月) 08:57:57Cの宿題なのでたぶんそれはないでしょ。
0065デフォルトの名無しさん
2006/09/25(月) 11:37:550066デフォルトの名無しさん
2006/09/25(月) 12:24:50[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):http://hp28.0zero.jp/diary/see_diary.php?dir=569&num=1&uid=akiyu0901&hiduke=20060925&now=0
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C++
[4] 期限:2006年09月30日
[5] その他の制限:なし
0067デフォルトの名無しさん
2006/09/25(月) 12:52:06ホントに宿題か? ゲーム作ろうとして一定時間でメインループを
まわす方法を調べてるんじゃないの?
0068デフォルトの名無しさん
2006/09/25(月) 15:11:27#include <windows.h>
void wait(DWORD r)
{
DWORD s = timeGetTime();
while(timeGetTime() - s < 1000 / r);
}
int main(void)
{
for(;;){ wait(60); }
return 0;
}
0069デフォルトの名無しさん
2006/09/25(月) 15:15:571secあたり60回更新ね。
0070デフォルトの名無しさん
2006/09/25(月) 15:21:490071デフォルトの名無しさん
2006/09/25(月) 15:35:26これが答えだったら出題者の釣りか罠だな。
0072デフォルトの名無しさん
2006/09/25(月) 15:41:20単なるサンプルなのにそこまで書くのめんどい。
Winでゲーム作る場合は、DoEvents()関数とか作ってイベント強制通知すればいい。
0073デフォルトの名無しさん
2006/09/25(月) 19:48:16wait(0)
0074デフォルトの名無しさん
2006/09/26(火) 07:41:100075デフォルトの名無しさん
2006/09/26(火) 10:34:220076デフォルトの名無しさん
2006/09/26(火) 10:39:270077デフォルトの名無しさん
2006/09/26(火) 11:47:410078デフォルトの名無しさん
2006/09/26(火) 11:52:230079デフォルトの名無しさん
2006/09/26(火) 15:09:54Word等のワープロソフトでは、
文章中の文字(単語)のミスや変更などをする場合、
その文字検索して置き換える(検索→置換)機能を持っている.
単語と単語の間には必ずスペースが入っているものとして考えて,
これはどのように処理しているんですか?
0080デフォルトの名無しさん
2006/09/26(火) 15:16:06文章の構成単語が、辞書に登録されているものと合致する、もしくは固有名詞としての体裁を整えているか確認。
0081デフォルトの名無しさん
2006/09/26(火) 15:37:51strstr()とかで検索してその部分を置き換えればいいんじゃないの?
0082デフォルトの名無しさん
2006/09/26(火) 17:28:100083デフォルトの名無しさん
2006/09/26(火) 17:47:44[2] 問題文
ランダムウォークの長さ?
5
シード?
3098
とすると,3098 を seed として, 長さ 5 の1次元ランダムウォークを行い,
0 0 0
0 0--------|-------------------
0 0 *
1 -1 *
2 0 *
3 +1 *
4 +2 *
5 +1 *
のように表示するプログラムです.
(図がずれてる時の説明です)
基本の*はlの下にくる形になります
-1だったら左にずれて+1だったら右にずれる形です。
+2ならふたつ右にずれます。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: Visual Studio.NET2003
[3.3] 言語: C
[4] 期限: 2006年10月02日09:00まで
0084デフォルトの名無しさん
2006/09/26(火) 17:54:24#include <stdio.h>
#include <stdlib.h>/* 乱数を使うために include */
double get_uniform_random(void);
int main(int argc, char **argv){
int n;/* 繰り返し回数 */
unsigned int seed;/* 乱数のシード */
int i;
int s;
printf("繰り返し回数?\n");
scanf("%d",&n);
if(n<0){
n=0;
}
printf("シード?\n");
scanf("%d",&seed);
srand(seed);
for(i=0; i<n; i++){
if( get_uniform_random()<0.5 ){
s=-1;
} else {
s=+1;
}
printf("%d %+3d\n",i,s); /* %+d はいつでも+-をつける. %3d は3桁確保*/
}
return 0;/* 必ず何か返す */
}
double get_uniform_random(){
return ((double)rand())/((double)RAND_MAX+1.0);
}
0085デフォルトの名無しさん
2006/09/26(火) 18:56:16標準関数使ってるから、関数の意味はググって調べてくれい。
#include <stdio.h>
#define ZERO_POINT 9
#define LENMAX 80
/* 中略 */
int* s;
s = malloc(n * sizeof(int));
/* ここで先のプログラム流用して、s[i]にそれぞれ累計が保存されてるとおもいねえ */
/* +1 -1 +1 +1 +1 という結果だったら s[0]=1, s[1]=0, s[2]=1, s[3]=2, s[4]=3となる感じでひとつ */
{
int i;
char exstr[LEXMAX+1];
char blankstr[]=" ";
for(i=0; i!=n; i++){
if(i==0){
/* <-------> ここのながさ、ZERO_POINT=9文字分
puts(" 0 0 0");
puts(" 0 0---------|-------------------");
puts(" 0 0 *");
continue;
}
strcpy(exstr, "");
strncpy(exstr, blankstr, ZERO_POINT + s[i]);
strcat(exstr, "*");
printf("%3d %+3d%s\n", i+1, s[i], exstr);
}
free(s);
}
0086デフォルトの名無しさん
2006/09/26(火) 20:09:50もう、答え貰ってるようだけど、とりあえずコピペでそのまま提出して動く ver.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2686.txt
0087デフォルトの名無しさん
2006/09/26(火) 20:26:58[2] 問題文(含コード&リンク): UNIXを今動かしていて、プログラムはCで書いています。
問題:echoクライアント・サーバとあり、echoサーバでクライアントから読み込んだ行を逆順にして返すようなサーバを作れ
。(プログラムを書け)
例えば、ABC\としたら\CBAのようになるようにプログラムを書き換えるということです。
ABC←打ち込む
CBA←表示 これは駄目である。
正しくは
ABC←打ち込む
CBA←表示 つまり改行してはならない。
echoサーバでは文字を逆にするプログラムをC言語で書き、echoクライアントでは、null等を使って改行を無くす。
注:echoサーバで文字を逆にするプログラムはreverse()を使い、buf,buf2を使うこと。
[3] 環境
[3.1] OS: (Windows/Linux/等々) XP(ちなみに家のPCはMEです)
[3.2] コンパイラ名とバージョン: teletarm←UNIX C言語を書いてるのはメモ帳
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語です
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 今日中
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
一応、C言語は浅く広く習っています。スレ違いかもしれませんが、よろしくお願いします。
0088デフォルトの名無しさん
2006/09/26(火) 20:27:59echoクライアントのプログラムです
#include <stdio.h>
extern int errno;
#define LINEBUF 1024
main(argc,argv)
int argc;
char *argv[];
{ int s,n,oc,ic;
char buf[LINEBUF+1];
s=connectTCP(argv[1],argv[2]);
while(fgets(buf,LINEBUF+1,stdin)){
write(s,buf,oc=strlen(buf));
for(ic=0;ic<oc;ic+=n) {
n=read(s,&buf[ic],oc-ic);
if(n<0) errexit("socket read failed: %s\n",strerror(errno));
}
fputs(buf,stdout);
}
}
0089デフォルトの名無しさん
2006/09/26(火) 20:29:19#include<sys/types.h>
#include<sys/signal.h>
#include<sys/socket.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/wait.h>
#include<sys/errno.h>
#include<netinet/in.h>
#include<stdio.h>
#define QLEN 5
#define LINEBUF 4096
extern int errno;
main(argc,argv)
int argc;
char *argv[];
{struct sockaddr_in fsin;
int ms,ss,alen,cc;
char buf[LINEBUF];
int heaven();
0090デフォルトの名無しさん
2006/09/26(火) 20:29:57signal(SIGCHLD,heaven);
while(1){
alen=sizeof(fsin);
ss=accept(ms,(struct sockaddr*)&fsin,&alen);
if(ss<0){
if(errno==EINTR) continue;
errexit("accept failed: %s\n",strerror(errno));}
switch(fork()){
case 0:
while(cc=read(ss,buf,LINEBUF)){
if(cc<0) errexit("echo read: %s\n",strerror(errno));
if(write(ss,buf,cc)<0) errexit("echo write: %s\n",strerror(errno));
}
exit(0);
default:
close(ss);
break;
case -1: errexit("fork: %s\n",strerror(errno));
}
}
}
heaven()
{ int status;
while(wait3(&status,WNOHANG,(struct rusage *) 0) >=0) ;
signal(SIGCHLD,heaven);
}
0091デフォルトの名無しさん
2006/09/26(火) 20:30:32[3]がめちゃくちゃだぞ。
推敲して再書き込みしろ。
0092デフォルトの名無しさん
2006/09/26(火) 20:32:30そのコードは何だ?
0093デフォルトの名無しさん
2006/09/26(火) 20:58:58[3] 環境
[3.1] OS: (Windows/Linux/等々) OSはWindowsXP(学校のです)
[3.2] コンパイラ名とバージョン: C言語のコンパイラは使っていません。telatarmというソフトでワークステーションに
接続して、メモ帳に書いたC言語のプログラムをUNIX上に貼り付けて動かしています
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C言語
です。
>>92
上がechoクライアントのプログラムで、下がechoサーバのプログラムです。
echoクライアントは、端末から入力を貰い、echoサーバに送りつけて、echoサーバの返してきたものを端末に表示する
ものです。
0094デフォルトの名無しさん
2006/09/26(火) 21:02:00いや、コンパイラは使ってるだろうし、上のコードはどうみてもUnix/Linuxのものだぞ。
0095デフォルトの名無しさん
2006/09/26(火) 21:21:14例えば、コンパイラと言えばvisual studioのような物ですよね?授業では、telatarmというソフトとメモ帳しか使ってない
んですよね。telatarmを起動し接続してemacsで書くのがいつもで、特にvisual studioのようなC言語コンパイラは使って
ないんです。
0096デフォルトの名無しさん
2006/09/26(火) 21:31:300097デフォルトの名無しさん
2006/09/26(火) 21:37:22[2] 問題文(含コード&リンク): 2つの配列を作り,周波数の異なる2つの正弦波形
を描くプログラムを書け。
[3] 環境
[3.1] OS: (Linux
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: ([2006年9月27日)
[5] なし
したのプログラムの続きからお願いします。
#include<stdio.h>
#include<math.h>
int main(void){
int i;
float x[3600],y[3600];
0098デフォルトの名無しさん
2006/09/26(火) 21:39:31お前の知識レベルはわかったからもう環境に関して説明しなくていいよ。
ただ、reverse()というのが何者かわからないと、解けないから説明しろ。
0099デフォルトの名無しさん
2006/09/26(火) 21:43:54visual studioはコンパイラではなくIDE(統合開発環境)と呼ばれるものです。
これには、エディタ、コンパイラ、リンカ、デバッガ、UIデザイナなどソフトウェア開発に必要なもの一式が含まれます。
C言語のプログラムを実行するには、C言語のコンパイラか、C言語のインタープリタが必要になります。
一般にC言語のインタープリタが使われることは滅多にないので、普通はコンパイラを使います。
C言語のソースコードを実行ファイルに変換するときに"cc hogehoge.c"とか、"gcc hogehoge.c"とかのコマンドを実行していると思います。
この"cc"や"gcc"がコンパイラと呼ばれるものです。
0100デフォルトの名無しさん
2006/09/26(火) 21:44:33reverse()に関する説明があるので書きます。
echoサーバで、逆順に返すohceもちゃんと作るように。cでまともに手をいれる最初です。 バッファー用の配列をもう1つ作
って、逆順につめて戻す関数reverse()を作 成してそれを使うという手と、元の配列の上で逆順にしてしまう という手の2つ
が考えられます。
echoサーバは入力が文字列であることは仮定していません。ですから、reverse()するときは、文字数であるccも引数に
渡してやるべきです。reverse(buf,buf2,cc); さて、単純にリバースすると、今のクライアントから送られる文字列 としては
最後に改行コードがあるので、先頭に改行がきてあまり良くないです。 つまり、入力が"ABC\n"を単純にリバースすると
"\nCBA"となります。
そこで、最後の文字が改行だったら、それは折り返さないというtipsを入れることにして、 "ABC\n"を"CBA\n"となるように
するのは駄目です.
ということで、最終的には、エコー逆順は本当に逆順にするだけ。クライアントが送るときに改行はサーバーに送らずに、
戻ってきたら最後に改行も表示とします。
reverserを使わない例として書くと、 int i; char c;を仮定して for(i=0;i<cc/2;i++) {c=buf[i];buf[i]=buf[cc-1-i];buf[cc-1-i]=c;}
で反転します。
クライアントは、fgets()でbufに読み込んだ時点で、最後が改行になっているから、 文字列の長さがstrlen(buf)で、bufの
最後の場所は長さ引く1だということに注意して、そこに'\0'を入れて やると、最後の改行がつぶせます。あとは逆順から
でも普通のエコーでもサーバに送ってやって 戻ってきたらその文字列を書いて、がfputs()あたりかな、その後ろに改行文
字を書き出す。つまり、putchar(`\n`);すれば いいと思います。
0101デフォルトの名無しさん
2006/09/26(火) 21:47:06すいません・・。ありがとうございます。ということは、デフォルトがtestとすればgcc test test.c〜のようにコンパイル
しています。
■ このスレッドは過去ログ倉庫に格納されています