930 :
890:2008/04/08(火) 02:37:57
>>929 ありがとうございます。
参考にさせて頂きます。
>>890 $ cat xmkfs.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; system("touch .fs"); sprintf(commnd, "tar --file %s --create .fs", argv[1]); system(commnd); system("rm .fs"); }
$ cat xcpin.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --append %s", argv[1], argv[2]); system(commnd); }
$ cat xdir.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --list | grep --invert-match --line-regexp \\.fs", argv[1]); system(commnd); }
$ cat xmore.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --get %s --to-stdout", argv[1], argv[2]); system(commnd); }
$ cat xcpout.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --get %s", argv[1], argv[2]); system(commnd); }
>>931 これでええやん
$ cat xdir.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --list --exclude .fs", argv[1]); system(commnd); }
チートwww
>>932 > void main(int argc, char *argv[])
はずかしい間違いなのですが……。
>>934 (1)
後出しのエラー仕様を
>>913に追加したらええやん
if (n < 0 || n > 255) { puts("エラー"); exit(0); }
if (c < '0' || c > '9') { puts("エラー"); exit(0); }
if (n[0] == '\0') { puts("エラー"); exit(0); }
mainから出るときはきちんとintを返しましょう
>>935 >>936 $ gcc -o xdir xdir.c
xdir.c: In function `main':
xdir.c:2: warning: return type of 'main' is not `int'
何か問題あるの?
間違いかどうかは一概には言えないが、ISO準拠だとmainはint型の値を返すのが
標準的とされている。くどいようだが、一概には言えないのは、各個人でISO準拠ではない
スタイルでも問題のない環境が存在するから。とりあえず、幅広い環境で通用する
int main(void) あるいはそこに書かれているスタイルの引数の変数を宣言するのが望ましい。
というのは、1年以上前にこのスレで五月蝿いくらいに議論されたことがある。
さてと、久々に帰ってきた俺が再びこのスレでレスしちゃうよぉ〜。あれから腕を磨いた。
そうだな、スーパーサイヤ人になったとでも言おうか。界王拳が使えるだけのときと比べて
かなりレベルアップしたぜ?やるかい?うほっ?あっーー!
942 :
940:2008/04/09(水) 15:50:05
>>940 チョンボしてたんでちょっと修正。
× if (month < 0 || 12 < month) {
○ if (month < 1 || 12 < month) {
他にも変なとこあるかもしんない。そんときはごめん。
943 :
デフォルトの名無しさん:2008/04/11(金) 01:42:06
[1] 授業単元:C言語プログラミング基礎実習
[2] 問題文(含コード&リンク):if文を用いて上半分が赤、下半分が青の正方形を描く
プログラミングを作れ。(上半分なら赤、そうでなければ
青、という命令をif文で書く。)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: わかりません;;
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 4月12日までにお願いします。
[5] その他の制限:for文とif文で作ってください。
ちなみに(10,10)〜(29,29)の範囲の正方形(赤)を描くプログラムは下の通りです。
int i,j;
for(i=10,j=10;i++)
for(j=10;j<30;j++)
myDC.SetPixel(i,j,RGB(255,0,0));
説明が分かりにくいかもしれませんがお願いします。
>>943 サンプルがどう見てもC++ですが……
つーか、有り得ない間違いがあるし。
945 :
940:2008/04/11(金) 01:56:13
(0,0)〜(9,9)の範囲だとこんな感じか。
int i, j;
for (i = 0; i < 10; ++i) {
for (j = 0; j < 10; ++j) {
if (i < 10 / 2) {
myDC.SetPixel(i, j, RGB(255, 0, 0));
} else {
myDC.SetPixel(i, j, RGB(0, 0, 255));
}
}
}
946 :
940:2008/04/11(金) 02:09:06
>>944 別にCでも問題ないでしょ。
struct test_struct {
void (*SetPixel)(int, int, int);
};
static void test_func(int i, int j, int rgb)
{
/* ... */
}
int main(int argc, char *argv[])
{
struct test_struct myDC;
myDC.SetPixel = test_func;
myDC.SetPixel(0, 0, 0);
return 0;
}
947 :
デフォルトの名無しさん:2008/04/11(金) 02:22:24
>>945 そんな感じで(10,10)〜(29,29)の範囲でしていただけないでしょうか?
948 :
940:2008/04/11(金) 02:44:34
>>947 int i, j;
for (i = 10; i < 30; ++i) {
for (j = 10; j < 30; ++j) {
if (i < 20) {
myDC.SetPixel(i, j, RGB(255, 0, 0));
} else {
myDC.SetPixel(i, j, RGB(0, 0, 255));
}
}
}
949 :
デフォルトの名無しさん:2008/04/11(金) 03:45:57
なにこのあつかましさ
950 :
890:2008/04/11(金) 14:12:20
>>929 >>931 >>932 前回はありがとうございました。
更に質問なのですが、アーカイブファイルに取り込んだファイルの情報に最終修正時刻を追加したいのですが、どうすれば良いでしょうか?
最終修正時刻の方は何とか自分でコードが書けたのですが、それを
>>929が作ってくれたプログラムに追加が上手く行っておりません。
struct stat st;
struct tm* t;
char strtime[256];
int tlength;
stat(argv[3], &st);
t = localtime(&st.st_mtime);
strftime(strtime, 256, "%b %d %H:%M %y", t); //format time
tlength = strlen(strtime);
fwrite(&tlength, sizeof(int), 1, fout);
fwrite(strtime, sizeof(char) * tlength, 1, fout);
時間情報の追加はこのような形で行えばいいでしょうか?
また、[i] ファイル名, サイズ、日にちの順番でアーカイブの中身を表示をするにはどうすればいいでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6218.c
951 :
940:2008/04/11(金) 16:26:17
953 :
934:2008/04/12(土) 13:14:31
>>936様
解決しました。ありがとうございますー
>>940様
わざわざありがとうございます。ですが、元を使わなくていけなかったので;
あと、@がコンパイルできたのですが、入力結果がでませんでした;
955 :
936:2008/04/12(土) 13:38:54
>>953 おめ。3つ目のは以下の間違いだったので今更だけど訂正
if (s[0] == '\0') { puts("エラー"); exit(0); }
あと、2進数変換は
>>940氏のアルゴリズムのほうがエレガントなので
余力があるなら書き換えたほうが良さそう
956 :
940:2008/04/12(土) 14:17:59
>>953 問題文に「@0〜255の整数を入力し、数値に変換して unsigned char型配列に格納する。」
とあるので、0〜255を入力し終えるまで何も出力されないです。
そこら辺はソース見てもらった方がいいと思います。
#include <stdio.h>
int main(void)
{
int dst=0;
int cnt;
for(cnt=0; ; ++cnt){
char in = getchar();
if(in=='0' || in=='1'){
if(cnt<8)
dst = dst*2 + (in - '0');
}else{
if(in=='\n'){
if(cnt>0)
break;
else
printf("エラー\n再入力せよ\n");
}
dst=0;
cnt=-1;
}
}
printf("%d\n", dst);
return 0;
}
元の仕様には明記されていないんだが、エラー文字があった場合はエラーメッセージが何度も表示されないようにしてみた。
958 :
940:2008/04/12(土) 16:38:04
[5] その他の制限:入力はgetcharで行う。
960 :
940:2008/04/12(土) 17:04:00
963 :
940:2008/04/12(土) 21:16:42
964 :
940:2008/04/12(土) 22:09:30
全然違いますね、わかります。
>>936様
了解です。わざわざどもですー。
>>940、958様
説明が下手で申し訳ありません。つまり入力した数が255なら、
こんな感じで表示するようにしたかったのです;
『ビット処理前 dec:255 hex:ff bin:11111111 〜』
こっちのほうはすいません、ちょっとよく判らないです;
あと、Aは問題なく動いてると思うのですが、0のとき何もおきなかったですー。
>>957様
問題なく動いてます。ありがとうございますー。
>>962 ツッコめるLvならいいのですが、修正できればここには来ないです;;
とりあえず動いていて、気になったのは03を例にすれば、
警告 W8068 main.c 34: 比較において定数が範囲外(関数 main )
警告 W8004 main.c 30: 'Pow' に代入した値は使われていない(関数 main )
警告 W8004 main.c 30: 'Answer' に代入した値は使われていない(関数 main )
警告 W8004 main.c 29: 'ch' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'Point' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'L' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'i' に代入した値は使われていない(関数 main )
と、こんな感じで警告文が出るのですが問題ないでしょうか?
968 :
962:2008/04/13(日) 01:56:58
ボーランドのコンパイラって、初期化に警告だすの?
初期化時の値は大体つかってない。途中でかわってるはず。習慣なんでね。
一点だけ、EOFが現状-1だと気づかなくって、確認漏れなんだけど、
unsigned charでは比較できない。ので、intに変更してくだちい。
それだけかな?何で動いてるのかよくわかってないもんでね。。。
うごいててよかったよ。あっはっは〜。
970 :
966:2008/04/13(日) 16:09:28
知らない人がお礼してますが、966のものです。
>>967様
警告 W8065 ParseFlt.c 84: プロトタイプ宣言のない関数 'parse_input' の呼び出し(関数 main )
とでて、数字を入力するとerror3が出たり、英数を入力すると、入力のループになってるようです;;
>>962様
変えて見たのですが、iとhが残ってますね。でも、動いてよかったですー。
そして少々特殊?な問題なのですが、
こちらのフローチャートを見てプログラムしなさいという問題があったので、
できれば今日中でよろしくお願いします。
ワードもエクセルもないので、オープンオフィスで申し訳ないのですが;
[1] 授業単元:プログラミング
[2] 問題文:
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6234.zip [3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: CPad for Borland
[3.3] 言語:C
[4] 期限:2008年4月14日提出
[5] その他の制限:getcharで入力
971 :
967:2008/04/13(日) 17:48:29
do{
scanf("%d", &s);
}while(s<0 || s>=10000);
if ( s == 0 ) { return 0; }
>>972 なんかめんどくさいことやりすぎじゃね?
#include <stdio.h>
int f( int s_ ) { return ( ( s_ * s_ ) % 1000000 ) / 100; }
int main(){
int i,s;
do { scanf( "%d", &s ); } while ( s < 0 || s > 10000 );
if ( s == 0 )
return 0;
for ( i = 0; i < 10; ++i )
printf( "%d\n", ( s = f( s ) ) );
return 0;
}
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define DATASIZE 10
#define RANDS 4
int main()
{
int s,rank=2,base;
int RandInt[DATASIZE] = {0};
int i,j;
char *RandStr;
puts("初期値(10000未満の正の整数");
scanf("%d",&s);
if( s == 0 )
return 0;
RandStr = malloc(sizeof(char)*((rank * RANDS) + 1));
s = (int)pow(s,rank);
for(i = 0; i < DATASIZE; i++){
sprintf(RandStr,"%0*d",rank * RANDS,s);
for(j = - (RANDS/2) ; j < (RANDS/2); j++){
RandInt[i] *= 10;
RandInt[i] += RandStr[(rank * RANDS)/2 + j] - '0';
}
s = RandInt[i];
s = (int)pow(s,rank);
}
for(i = 0; i < DATASIZE; i++)
printf("%d\n",RandInt[i]);
free(RandStr);
return 0;
}
977 :
デフォルトの名無しさん:2008/04/14(月) 22:31:13