C言語なら俺に聞け! Part 107
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/17(火) 23:32:03質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
各種リンク、関連スレは>>2-13あたり
C言語なら俺に聞け! Part 106
http://pc8.2ch.net/test/read.cgi/tech/1113102515/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/05/17(火) 23:33:48gcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.cygwin.com/
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
【ライセンスや機能などに問題あり】
Microsoft 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
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0004デフォルトの名無しさん
2005/05/18(水) 00:06:02リスト構造を用いて,挿入整列のプログラムを作成せよ
・リスト構造は,ポインタによるリンクリストを用いること
・整列前のリスト内の各要素,整列後のリスト内の各要素を
表示するようにすること
って課題が出て、配列を使ったリスト表現を作りたいんですが
さっぱりわかりません。ヒントでいいので教えていただけませ
んか?
0005デフォルトの名無しさん
2005/05/18(水) 00:07:200006デフォルトの名無しさん
2005/05/18(水) 00:22:20表現したいんです。すみませんでした。
0007デフォルトの名無しさん
2005/05/18(水) 00:22:56http://pc8.2ch.net/test/read.cgi/tech/1115794784/359
http://pc8.2ch.net/test/read.cgi/tech/1112968209/635
いいかげんウザい
0008デフォルトの名無しさん
2005/05/18(水) 01:03:20>>1 に宿題は別スレって書いてあるだろうが。
7 にリンクが貼ってあるが、回答はもう出てる。
0009デフォルトの名無しさん
2005/05/18(水) 01:34:36リスト構造と配列構造は同時に構築できないんだが。
0010デフォルトの名無しさん
2005/05/18(水) 01:39:46だから
リストへの挿入時にメモリを配列からアロケートするとかじゃないの
0011デフォルトの名無しさん
2005/05/18(水) 03:33:46typedef struct node {
Data data ;
struct node *pre ;
struct node *next ;
} Node ;
本来リストで処理するところを↓のような配列で処理したいのでは?
まぁ、何にしても俺は答えるつもりはないけど
#define MAX 10
Data data[MAX] ;
0012デフォルトの名無しさん
2005/05/18(水) 11:43:48int atoi(char s[])
{
int i, n;
n=0;
for(i=0; s[i]>='0' && s[i]<='9'; ++i) n = 10*n+(s[i]-'0');
return n;
}
の記述で、s[i]>='0' && s[i]<='9' となっていますが、
s[i]が数字か判定するならば'0'<=s[i]<='9'でも、
配列sはchar型であるので良いと思うのですが、
なぜこのような記述をしているのでしょうか。
0013デフォルトの名無しさん
2005/05/18(水) 11:49:30それ、ちゃんと動くか検証してみたか。
('0'<=s[i])<='9'
こういうことだぞ
0014デフォルトの名無しさん
2005/05/18(水) 11:50:40001512
2005/05/18(水) 11:56:47数学的に考えすぎてたみたいです。
演算子の優先度をもう少しよく調べてみます。
ありがとうございました。
>14
数学のように、n,a,bが整数だからa<=n<=bでも動作するか(例)、
という事を聞きたかったんです。
0016デフォルトの名無しさん
2005/05/18(水) 12:02:4513で書いたように、a<=n<=b は
a<=nの結果(0(FALSE)か0以外(TRUE))とbを
比較することになるので意味がない。
0017デフォルトの名無しさん
2005/05/18(水) 12:06:250018デフォルトの名無しさん
2005/05/18(水) 13:18:16struct node {
void *data;
node *next;
} array[10];
ほいよ、配列を使ったリスト構造
一応、メリットとしては途中の要素の削除にmemmoveを使う必要がない
0019デフォルトの名無しさん
2005/05/18(水) 13:24:040020デフォルトの名無しさん
2005/05/18(水) 13:52:260021デフォルトの名無しさん
2005/05/18(水) 23:58:52ビットシフトはなんの役に立つのでしょうか?
0022デフォルトの名無しさん
2005/05/19(木) 00:04:56除算や乗算よりはやい、と言われている
アンタがその差が生きるプログラムを書いているかどうかは別だ
0023デフォルトの名無しさん
2005/05/19(木) 00:16:070024デフォルトの名無しさん
2005/05/19(木) 00:21:320025デフォルトの名無しさん
2005/05/19(木) 00:26:40そろそろ次のやつたのむ
0026マルチプロセス初心者
2005/05/19(木) 00:48:33それで、少し問題が・・・・・
fork()を利用して複数のプロセスを同時に起動させて
pipe()を利用して子プロセスから親プロセスへ演算結果を
返すようなプログラムを組んでおります。
それをfor文で一定以上繰り返すと、fork()自体が失敗
するようになってしまいます・・・
これの原因はどこにあるのでしょう?
ex
for( i = 1 ; i <= 100 ; i++ )
{
pid[i] = fork();
if( pid[i] == -1 ) printf("error!\n");
if( pid[i] == 0 )
{
何か色々と処理させる
exit(0);
}
}
wait();
子プロセスが1個起動して終了するまで待つのは効率が悪いので
一気に複数のプロセスを起動させて全てが終わるまで待つようにしてます。
色々と調べてみたんですが、どうしても原因がわからなかったので
どなたかご存知でしたら教えてください。
0027デフォルトの名無しさん
2005/05/19(木) 01:17:47どうしてもやりたいならカーネルを再コンパイルしたらよい。
0028マルチプロセス初心者
2005/05/19(木) 08:35:08アドバイスありがとうございます。
/etc/security/limits.conf で設定されている nproc を変更してもだめなんですかね?
カーネルリビルドは全然OKなんですが、どこの項目を変更すればよいのやら・・・・
0029デフォルトの名無しさん
2005/05/19(木) 10:29:51スレ違い。該当OSスレへどうぞ。
0030デフォルトの名無しさん
2005/05/19(木) 19:01:40ただ好みの問題でしょうか?
do { ... } while(0) か { ... } だけかってことなんですが。
#define MACRO1() {\
var1 = foo; \
var2 = bar; \
}
#define MACRO2() \
do { \
var1 = foo; \
var2 = bar; \
} while (0)
0031デフォルトの名無しさん
2005/05/19(木) 19:12:11gotoとかわらん気がスルガ・・・
0032デフォルトの名無しさん
2005/05/19(木) 19:50:05・リストボックスに文字列を書き込む関数
・リストボックスに書いてある文字列を取得する関数
を教えてください!!お願いします!
0033デフォルトの名無しさん
2005/05/19(木) 20:04:01それはgotoより酷いよう泣きガス。
0034デフォルトの名無しさん
2005/05/19(木) 20:13:36標準Cにリストボックスはありません。
0035デフォルトの名無しさん
2005/05/19(木) 20:17:40MACRO1 のほうは、
if (...)
MACRO1();
else
...;
と書けない。
0036デフォルトの名無しさん
2005/05/19(木) 20:31:47return が関数だとかポインタは配列だとか言い出す痛いトーシロ
アフォの一言で斬るのみ
0037デフォルトの名無しさん
2005/05/19(木) 22:59:440038デフォルトの名無しさん
2005/05/19(木) 23:53:41a[0] = 0.0;
として、a[0]に0が入らないってどういうこと?
0039デフォルトの名無しさん
2005/05/20(金) 00:01:57入らなかったことはどうやって確認したのですか?
0040デフォルトの名無しさん
2005/05/20(金) 00:11:17その後の何かの処理で書き換えた、とか。
0041デフォルトの名無しさん
2005/05/20(金) 00:27:00それはあなたの脳みそが暴走しています。
0042デフォルトの名無しさん
2005/05/20(金) 00:55:13これを意図的にシステムに依存させずに使い分けるにはどうやって
宣言すればいいでしょうか?
0043デフォルトの名無しさん
2005/05/20(金) 01:11:59処理系に依存するしかない。
0044デフォルトの名無しさん
2005/05/20(金) 01:14:19{}
0045デフォルトの名無しさん
2005/05/20(金) 01:52:10sizeof(int)==4 だからといって 32bit とは限らない。
0046デフォルトの名無しさん
2005/05/20(金) 02:43:040047デフォルトの名無しさん
2005/05/20(金) 03:13:33int_leastXX_t
とか
int_fastXX_t
とか
は、
C99、らしい
0048デフォルトの名無しさん
2005/05/20(金) 04:20:211バイトが8ビットじゃない環境のこと?
0049デフォルトの名無しさん
2005/05/20(金) 05:31:160050デフォルトの名無しさん
2005/05/20(金) 08:36:04C言語でBMI計算式を書きたいのです。計算式は体重÷(身長×身長)です。
ほとんど初心者なので、一番簡単な計算式でお願いします。
005150
2005/05/20(金) 08:45:55この板の人間は酷すぎます。
詐欺です。
私の接続料金を返してください。
返却なき場合は警察と顧問弁護士に相談します。
0052デフォルトの名無しさん
2005/05/20(金) 10:09:42bmi = weight / (height * height);
0053デフォルトの名無しさん
2005/05/20(金) 10:13:12005450
2005/05/20(金) 10:29:53失礼な事言わないでください。
割り算掛け算ぐらいわかります。
名誉毀損です。
所轄裁判所に訴えます。
0055デフォルトの名無しさん
2005/05/20(金) 10:36:090056デフォルトの名無しさん
2005/05/20(金) 11:26:520057東大宮
2005/05/20(金) 11:42:12下のプログラムを実行すると以下の出力が得られた。
値(1)、(2)、(3)を求めよ。
プログラム
---------------------------------------------------------------
#include<stdio.h>
int main(void){
int ai[3]={(1), (2), (3)};
int n;
for(n=0;n<5;n++)
printf("%d,%d\n", n, *(int *)(((char *)(ai+1))-n));
for(n=0;n<2;n++)
printf("%d, %d\n", n, *((short *)(&ai[sizeof(ai)/sizeof(int)-1]+n)));
}
---------------------------------------------------------------
出力結果
--------------------------------------------------------------
0, 1
1, 256
2, 65536
3, 16777216
4, 0
0, -9
1, 9
です。よろしくお願いします!
0058デフォルトの名無しさん
2005/05/20(金) 11:46:31{
float weight,height;
if(argc != 3) return 0;
weight = atof(argv[1]);
height = atof(argv[2]);
printf("BMI=%f\n", weight / (height*height) );
return 0;
}
0059デフォルトの名無しさん
2005/05/20(金) 11:49:11>>57
スレ違い
宿題スレでも逝け
0060デフォルトの名無しさん
2005/05/20(金) 12:03:390061デフォルトの名無しさん
2005/05/20(金) 12:24:340062デフォルトの名無しさん
2005/05/20(金) 12:26:49書き換えてる箇所なんてないのに勝手に
変わるんです。
a[0]=0.0;とした直後は0.0が入っていて
ある行でいきなり変な値が入って・・・。
わけわからん
0063デフォルトの名無しさん
2005/05/20(金) 12:34:19double a[8];
の前後に一行ずつ追加して、
int dummy1[100];
double a[8];
int dummy2[100];
で、やってみそ。
0064デフォルトの名無しさん
2005/05/20(金) 12:38:17どこかで領域を破壊している。
配列・ポインタ関連の処理が怪しいとみた。
006562
2005/05/20(金) 12:45:41a[i] = 0.0;
}
u_int XX, YY, U_bar, V_bar;
u_int *X, *Y, *u_bar, *v_bar;
X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
X[0] = 355; Y[0] = 435;
X[1] = 747; Y[1] = 429;
X[2] = 747; Y[2] = 453;
X[3] = 355; Y[3] = 458;
X[4] = 97; Y[4] = 281;
X[5] = 889; Y[5] = 256;
X[6] = 882; Y[6] = 326;
X[7] = 10; Y[7] = 347;
というコードにしてて、
X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
をなくすとa[]が書き換えられなくなりました。
どういうことなんでしょうか?
0066デフォルトの名無しさん
2005/05/20(金) 12:53:05> X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
> X[1] = 747; Y[1] = 429;
> X[2] = 747; Y[2] = 453;
> X[3] = 355; Y[3] = 458;
> X[4] = 97; Y[4] = 281;
> X[5] = 889; Y[5] = 256;
> X[6] = 882; Y[6] = 326;
> X[7] = 10; Y[7] = 347;
どこにアクセスしてるんだ?
>>64
的中の様です。
0067デフォルトの名無しさん
2005/05/20(金) 12:54:32> u_int XX, YY, U_bar, V_bar;
u_int XX[256], YY[256], U_bar[256], V_bar[256];
> X = &XX; Y = &YY; u_bar = &U_bar; v_bar = &V_bar;
X = XX; Y = YY; u_bar = U_bar; v_bar = V_bar;
に直してやってみそ。
0068デフォルトの名無しさん
2005/05/20(金) 13:02:250069デフォルトの名無しさん
2005/05/20(金) 13:04:40A *A1,*A3;
A **A2;
A2 = A1;(参照渡し)
*A3 = A2;(値を渡したい)
で,
A3->youとかやるとエラってしまいます。
DOしたらいいんでしょうか?お願いします。
0070デフォルトの名無しさん
2005/05/20(金) 13:07:42warning と error 出ないか?
0071デフォルトの名無しさん
2005/05/20(金) 13:22:02Cに参照渡しはない。
0072デフォルトの名無しさん
2005/05/20(金) 13:24:54A *A1, *A2, *A3;
A2 = A1; //(参照渡し)
*A3 = *A2; //(値を渡したい)
0073デフォルトの名無しさん
2005/05/20(金) 13:24:59typedef struct a{int you;}A;
A a;
A *a1, *a3;
A **a2;
a1 = &a;
a2 = &a1;
a3 = *a2;
/* a3->you を使う */
007469
2005/05/20(金) 13:40:34もうしばらく参考にしてがんばってみます。
0075デフォルトの名無しさん
2005/05/20(金) 13:52:23同じように2で返すような関数
など無いですかね?
DBが半角カタカナはニバイトに変換して
しまいましてstrlenだとうまく
文字数チェックできなくて…
携帯からでスマソン
0076デフォルトの名無しさん
2005/05/20(金) 14:30:05ワイド文字で処理すれば?
0077デフォルトの名無しさん
2005/05/20(金) 15:37:26int i, j;
i = j = 0;
�A
int i, j;
i = 0;
j = 0;
�B
int i = 0, j = 0;
�@�A�Bは全部同じ実行速度でしょうか?
0078デフォルトの名無しさん
2005/05/20(金) 15:46:12char a[10] = "0x96";
char b = 0x00;
b = ((char)(a[2] - '0') << 4) ;
printf("b=%x\n",b );
b = b | (a[3] - '0');
printf("b=%x\n",b );
}
・実行結果
b=0xffffff96
文字列”0x96”から16進数の0x96に変換したいんですけど、なんかないでしょうか?
aの値は0x00〜0xffを予定しています。
いまの 「- '0'」の処理がだめなのはわかってますが、なんで実行結果に「ffffff」入るのかさっぱりわからないです。
0079デフォルトの名無しさん
2005/05/20(金) 15:48:170081デフォルトの名無しさん
2005/05/20(金) 15:58:46なるほど。
有難うございました。
0082デフォルトの名無しさん
2005/05/20(金) 15:59:03bはcharじゃなくてunsigned charにしないと負になってしまいますよ
0083デフォルトの名無しさん
2005/05/20(金) 16:01:09これで基礎部分ができました、ありがとうございます。
0084デフォルトの名無しさん
2005/05/20(金) 16:01:21符号拡張している
strtoul を使うのが一番手っ取り早い、
isdigit と isxdigit とtoupper 等を
組み合わせて自分でやるのもそんなに手間じゃない
008584
2005/05/20(金) 16:11:110086デフォルトの名無しさん
2005/05/20(金) 16:16:14おおおおお、1関数じゃないですか。
なるほどstrtoul()ってこういう使いときに使えるのですね。
ありがとうございます。
0087デフォルトの名無しさん
2005/05/20(金) 17:31:53この意図は何なのでしょうか?
0088デフォルトの名無しさん
2005/05/20(金) 17:35:45ポインタが指してる先の内容を変えないという宣言
0089デフォルトの名無しさん
2005/05/20(金) 17:43:33なるほど。
念の為に付けておくと安心ですね。
有難う御座いましたm(_ _)m
0090デフォルトの名無しさん
2005/05/20(金) 18:25:23どうすればいいでしょうか?テンプレは英語のサイトばっかりで頭こんがらがってます。
0091デフォルトの名無しさん
2005/05/20(金) 18:29:570092デフォルトの名無しさん
2005/05/20(金) 18:33:54>>1-2
0093デフォルトの名無しさん
2005/05/20(金) 18:34:09printf("0x%lx\n", strtoul(a, NULL, 16));
としないと、値が0の際0xが表示されなかったりするので注意。
0094デフォルトの名無しさん
2005/05/20(金) 18:34:13タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/
0095デフォルトの名無しさん
2005/05/20(金) 19:30:09環境変数を列挙する方法を教えてください。
mainの仮引数を利用する方法と関数を利用する
方法があった気がするのですが、思い出せません。
>>93
幅4を指定したほうがスマートな気がします。
(といっても、今コンパイラも入ってない状態で値0の時の
確認もできんのですけど、、)
0096デフォルトの名無しさん
2005/05/20(金) 19:36:02環境依存。
0097デフォルトの名無しさん
2005/05/20(金) 19:36:050098デフォルトの名無しさん
2005/05/20(金) 19:53:41依存でしたか・・・。
>>97
ありがとうございます。mainの方ですね。
(これも標準ではないからあんまり載ってないのでしょうか)
ただいまいち使い方がわかりません。
for(; ; ) if (*envp) puts(*envp++);
でいいのでしょうか。インストールしたら確認してみます。
有り難うございました。
010095,98
2005/05/20(金) 21:42:50BCBインストールしました。
>>98は駄目ですね。なんで終了しないのか5分も悩みました・・・
for(; ; ) if (*envp) puts(*envp++); else break;
無限ループでした、、、アホだ>俺
0x00の表示は、
int i=0;long j;
char a[][5]={"0x00","0x99","0xff",NULL};
for (;i<=0xFF;i+=0x01) printf("%#04lx ", i);
for(i=0;*a[i];i++){
sscanf(a[i],"%lx",&j);
printf("strtoul:%#04lx sscanf:%#04lx \n", strtoul(a[i], NULL, 16) ,j);
}
BCBだとこれでいいみたいですけど、他の環境では駄目なんですか?
0101デフォルトの名無しさん
2005/05/20(金) 21:52:10NULLは無効なポインタをあらわすために使うものだからchar配列にNULLは入れられない。
その直後のforはなぜインクリメント演算子を使わないんだ。
あと、envpのループはこうでいいだろ。
while (!*envp)
puts(*envp++);
0102デフォルトの名無しさん
2005/05/20(金) 22:14:280103デフォルトの名無しさん
2005/05/20(金) 22:27:04たしかにそう定義されている場合もあるが、意味論としてはchar配列にNULLを入れるのはやはりおかしい。
0104デフォルトの名無しさん
2005/05/20(金) 22:33:48NULL と '\0' と "" の区別ができてない奴のコードは見ればわかる
例え動いても単位は出せない
010595,98
2005/05/20(金) 22:35:42部分部分書き直して色々試した残骸が残っていたようです、、。
NULLは""に直したつもりだったのですが、・・・NULLでも動作
してて気づきませんでした。
010695,98
2005/05/20(金) 22:47:36for(i=0;a[i];i++)
こういう形から書き換えてて、混乱した結果です。
急いで投稿しようとしてミスりました(うぅ・・)
0107デフォルトの名無しさん
2005/05/20(金) 22:55:56たとえ二軍でも腐ってもプロ野球選手が打って左へ走ったりはしない
それほどのことだ
0108デフォルトの名無しさん
2005/05/20(金) 23:15:42大きさも求められるの?
0109デフォルトの名無しさん
2005/05/20(金) 23:21:12C99の可変長配列なら問題ない。
0110デフォルトの名無しさん
2005/05/20(金) 23:32:030111デフォルトの名無しさん
2005/05/20(金) 23:32:41それは可能か
0113デフォルトの名無しさん
2005/05/21(土) 15:06:44o、x、X の各書式と一緒に使用すると、0 以外のすべての出力値の前にそれぞれ 0、0x、または 0X が付きます。 空白は表示されません。
e、E、f の各書式と一緒に使用すると、出力値には必ず小数点が付きます。 後続の数字がある場合だけ小数点が付きます。
g 書式または G 書式と一緒に使用すると、出力値には必ず小数点が付き、後続する 0 は切り捨てられません。
後続の数字がある場合だけ小数点が付きます。後続の 0 は切り捨てられます。
c、d、i、u、または s のいずれかと一緒に使用すると、このフラグは無視されます。
ってマイクロソフトのやつにはかいてある
0114デフォルトの名無しさん
2005/05/21(土) 15:11:19ビットシフトはなんの役に立つのでしょうか?
0115デフォルトの名無しさん
2005/05/21(土) 15:25:33いつかわかる。それまで辛抱しろ。
0116デフォルトの名無しさん
2005/05/21(土) 15:38:310117デフォルトの名無しさん
2005/05/21(土) 16:31:49struct token{
enum{NUM,ADD,SUB,MUL,DIV}type;
int value;
};
(各定数は左から数、加算、減算、乗算、除算)
という様に規定した場合、関数内での変換方法は
int i;
if(i=='+')'+'=ADD;
かもしくは
int i;
'+'=ADD;
で良いのでしょうか?
0118デフォルトの名無しさん
2005/05/21(土) 17:05:57ビットシフト→お前
0119デフォルトの名無しさん
2005/05/21(土) 17:11:20char a[][5]={"0x00","0x99","0xff",NULL};
for (;i<=0xFF;i+=0x01) printf("%#04lx ", i);
for(i=0;*a[i];i++){
sscanf(a[i],"%lx",&j);
printf("strtoul:%#04lx sscanf:%#04lx \n", strtoul(a[i], NULL, 16) ,j);
}
このように掲示板などに貼られた文章をcygwin・viで貼り付ける場合には
どのようなコマンドを打てばいいのでしょうか?
コピペのやり方がわかりません・・・。
0120デフォルトの名無しさん
2005/05/21(土) 17:12:03激しく意味がわからないが、'+'=ADD; はコンパイルエラー。
0121デフォルトの名無しさん
2005/05/21(土) 17:12:41スレ違い。
0122デフォルトの名無しさん
2005/05/21(土) 17:39:23OMANKOtyu-tyu-♪
0123デフォルトの名無しさん
2005/05/21(土) 18:45:49どうやるのですか?
例えば、
ads 213 g
asd 765 h
のファイルで、
fp=fopen("aaaa.txt",r);
while((c=getc(fp)!=EOF){
の後の処理なんですが。
お願いします。
0124デフォルトの名無しさん
2005/05/21(土) 18:48:19行に分かれてるならfgetsとsscanfでよくね?
0125デフォルトの名無しさん
2005/05/21(土) 18:56:26テキストです。
ただ、scanf系を使わないで処理したいんですよ。
0126デフォルトの名無しさん
2005/05/21(土) 19:00:490127デフォルトの名無しさん
2005/05/21(土) 19:04:02できれば、標準関数を使わないでやりたいです。
かなり、面倒なやり方になるとは思うのですが。
0128デフォルトの名無しさん
2005/05/21(土) 19:07:49俺が知りたいのは
enum{NUM,ADD,SUB,MUL,DIV}type; ←トークンの種類
int value; ←トークンの値
とした場合のトークンの種類の使い方が知りたいんです。
0129デフォルトの名無しさん
2005/05/21(土) 19:20:48fscanf が嫌いなら、気の済むような関数作ったら?
何のために C 使ってるのか忘れた奴をこの業界ではアフォと言う
たかが fscanf 程度の関数ごとき作れない者には廃業以外の選択はない
0130デフォルトの名無しさん
2005/05/21(土) 19:23:04typedef struct tagObject
{
int x;
int y;
}OBJECT;
OBJECT Obje_01[OBJECT_MAX];
このように構造体を定義して、
各ソースファイルからこれを使用するにはどうしたらいいでしょうか。
このヘッダーファイルを各ソースからインクルードすると、
多重定義になってしまいます。
ご教授お願いいたします。
0131デフォルトの名無しさん
2005/05/21(土) 19:24:24{
int x;
int y;
}OBJECT;
extern OBJECT Obje_01[];
0132デフォルトの名無しさん
2005/05/21(土) 19:30:10返答ありがとうございます。
extern を付けましたが、以下のようなリンクエラーになってしまうのです。
外部シンボル ""struct tagObject * Obje_01" (?Obje_01@@3PAUtagObject@@A)" は未解決です
今は2つのソースファイルがこのヘッダーをインクルードしています。
もしかして、原因は他にあるのでしょうか。
0133デフォルトの名無しさん
2005/05/21(土) 19:33:41関数と同じようにただ1つのソースファイルで実体定義すれ
0134デフォルトの名無しさん
2005/05/21(土) 19:57:28main.cppの方で実態定義し、sub.cppの方でexternを使っての定義をしたところ
正常にコンパイルできました。
これでいいですか?
0135デフォルトの名無しさん
2005/05/21(土) 20:50:06宣言と定義を混同していると単位貰えない
0136デフォルトの名無しさん
2005/05/21(土) 21:12:12よろしくお願いします。
0137デフォルトの名無しさん
2005/05/21(土) 21:15:31それは日本語であなたを指す言葉と発音が似ています
0138デフォルトの名無しさん
2005/05/21(土) 21:23:390139デフォルトの名無しさん
2005/05/21(土) 21:27:00ありがとうございました。
1つ前進することができました。
0140デフォルトの名無しさん
2005/05/21(土) 21:30:11それは日本語であなたを指す言葉と発音が似ています
0141デフォルトの名無しさん
2005/05/21(土) 21:31:56それは日本語であなたを指す言葉と発音が似ています
0142デフォルトの名無しさん
2005/05/21(土) 21:34:20それは日本語であなたを指す言葉と発音が似ています
0143デフォルトの名無しさん
2005/05/21(土) 22:37:40プログラムが終了した時点で、実行にかかった速度を表示させたいです。
0144デフォルトの名無しさん
2005/05/21(土) 22:54:27自分で考えるとおりのコードを書け。
0145デフォルトの名無しさん
2005/05/21(土) 22:54:48#include <time.h>
0146デフォルトの名無しさん
2005/05/21(土) 23:01:54http://page6.auctions.yahoo.co.jp/jp/auction/f34841613
0147デフォルトの名無しさん
2005/05/21(土) 23:07:540148デフォルトの名無しさん
2005/05/21(土) 23:09:080149デフォルトの名無しさん
2005/05/21(土) 23:14:28配列の作成に変数が使えないので困っています。
どうすれば良いでしょうか。
0150デフォルトの名無しさん
2005/05/21(土) 23:16:15質問は、入門書を読み終わってからでも遅くは無いだろう?
0151デフォルトの名無しさん
2005/05/21(土) 23:17:09プロファイラ使えとスレ違いのレスをしてみるテスト
0152デフォルトの名無しさん
2005/05/21(土) 23:18:02入門書でmallocを探してみろ
ないなら買え
0153デフォルトの名無しさん
2005/05/21(土) 23:21:500154デフォルトの名無しさん
2005/05/21(土) 23:24:30C99対応のコンパイラを使え。
古いCは配列の要素数に変数を指定できない。
0155デフォルトの名無しさん
2005/05/21(土) 23:27:00そこはさすがに察してくれよ・・・
0156デフォルトの名無しさん
2005/05/21(土) 23:32:11warata
0157デフォルトの名無しさん
2005/05/22(日) 00:17:20void function(char);
int main(void){
char init[10];
function(init[10]);
return 0;
}
void function(char a[ ]){
functionの処理
}
のようにすると、エラー
10: 'function' の再宣言で型が一致していない
1: 一つ前の 'function' の定義位置
となってしまいます。どのように変えればうまくコンパイルできるでしょうか?
0158デフォルトの名無しさん
2005/05/22(日) 00:17:390159デフォルトの名無しさん
2005/05/22(日) 00:25:41一体どこからつっこんでいいのかわからない
0160デフォルトの名無しさん
2005/05/22(日) 00:32:57釣りだよな?
0161デフォルトの名無しさん
2005/05/22(日) 00:54:43> void function(char);
> void function(char a[ ]){
どうして宣言と定義の仮引数の型が違うんだ?
揃えろ。
0162デフォルトの名無しさん
2005/05/22(日) 00:57:24int main(void){
char init[10];
function(init[10]);
return 0;
}
void function(char a[ ]){
functionの処理
}
0163デフォルトの名無しさん
2005/05/22(日) 00:57:30> function(init[10]);
( ゚д゚) …
0164デフォルトの名無しさん
2005/05/22(日) 01:00:05>>157には
char a[]
の型はcharで名前がa[]に見えるんだろう
だから両者の違いがわからない
Cの宣言は左にも右にも書かれるから
この場合は
名前がaで型は char []なんだよな
Javaではシンタクス改められてるけど
0165デフォルトの名無しさん
2005/05/22(日) 01:03:45型は char* だろ
0166デフォルトの名無しさん
2005/05/22(日) 01:05:200167デフォルトの名無しさん
2005/05/22(日) 01:06:090168デフォルトの名無しさん
2005/05/22(日) 01:06:510169デフォルトの名無しさん
2005/05/22(日) 01:08:140170デフォルトの名無しさん
2005/05/22(日) 01:15:23function(&init[10]);
と渡すとエラーにはならないことがたぶん保証されているのでエラーにはたぶんならない
0171デフォルトの名無しさん
2005/05/22(日) 01:19:59こちらへどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1115386557/
0172デフォルトの名無しさん
2005/05/22(日) 01:22:13int main(void){
char init[10];
function(init);
return 0;
}
void function(char *a){
functionの処理
}
〜 終 了 〜
0173デフォルトの名無しさん
2005/05/22(日) 01:30:05ビットシフトはなんの役に立つのでしょうか?
0174デフォルトの名無しさん
2005/05/22(日) 01:33:02ビットシフトは役に立ちますよね
0175デフォルトの名無しさん
2005/05/22(日) 01:36:22オマエモナー
http://pc8.2ch.net/test/read.cgi/tech/1115386557/
0176デフォルトの名無しさん
2005/05/22(日) 01:48:470177デフォルトの名無しさん
2005/05/22(日) 02:00:340178デフォルトの名無しさん
2005/05/22(日) 02:05:36ビットをシフトするのに役立つ
0179デフォルトの名無しさん
2005/05/22(日) 02:09:500180デフォルトの名無しさん
2005/05/22(日) 02:16:12恒真命題
0181デフォルトの名無しさん
2005/05/22(日) 02:56:06複数のバラバラに並んだ自己参照構造体配列を、宣言、初期化したあと。
チェーンのつなぎ変えによってソートするには、どう書けばいいんでしょうか?
struct Kouzou {
int x;
struct Kouzou *next;};
で、kouzou[100]={{0,},{1,},{2,},[6,},{21,},{3,}・・・・・・・・
と、延々つづく構造体を、
大きい数から順にチェーンのつなぎかえで、最後に、
for (ip=stert;ip->next!=NULL;ip=ip->next)
printf ("%d\n",ip->x);
で一覧表示したいのですが・・・
構造体配列のコピーや移動でソートするのではなくて、チェーンの
つなぎ変えの記述を教えて下さい、お願いします。
0182デフォルトの名無しさん
2005/05/22(日) 03:01:42カプセル化されていない線形リストは無限ループが紛れ込む危険があるのでお勧めできない。
宿題なら宿題スレへ。
0183デフォルトの名無しさん
2005/05/22(日) 03:11:20宿題ではありません。
もう4日くらいこれで止まってしまってます。
だれか・・・・
0184デフォルトの名無しさん
2005/05/22(日) 03:11:46何故この程度でカプセル化?
何故C言語でカプセル化??
何故勝手に宿題板行き???
0185デフォルトの名無しさん
2005/05/22(日) 03:16:240186デフォルトの名無しさん
2005/05/22(日) 03:35:54if(ip->x<ip->next->x)
if(ip==stert)stert=ip->next;
tmp=ip->next;
ip->next=ip->next->next;
tmp->next=ip;}
これでいけると思ったんですが、
教えていただけないでしょうか?
0187デフォルトの名無しさん
2005/05/22(日) 03:37:120188デフォルトの名無しさん
2005/05/22(日) 03:39:250189デフォルトの名無しさん
2005/05/22(日) 03:43:160190デフォルトの名無しさん
2005/05/22(日) 03:47:47temp=a.next
a.next-=c.next
c.next=d.next
d.next=temp
forは2重になるでしょ
0191デフォルトの名無しさん
2005/05/22(日) 03:54:04for (y=0;kouzou[x].next!=NULL;y++)
kouzou[x].next=&kouzou[x+1];で、
つなげてます。書いてませんでした、すいません。
最後尾のポインタにNULLもつけています。
教える気が無いのはいいんですが、ヒントだけでも下さい。
0192デフォルトの名無しさん
2005/05/22(日) 03:54:080193デフォルトの名無しさん
2005/05/22(日) 03:56:170194デフォルトの名無しさん
2005/05/22(日) 04:00:52ソート済みポインタ配列の順に繋げば?
0195デフォルトの名無しさん
2005/05/22(日) 04:01:14だいぶ自分のバカさを晒してしまいましたが、
要するに自己参照構造体の理解が足りないだけのようです。
もうすこし悩みます。では。
0196デフォルトの名無しさん
2005/05/22(日) 04:02:16struct Kouzou *ListSort(struct Kouzou *data)
{
struct Kouzou root = { 0, NULL }, *n, *r;
while(data)
{
n = data;
r = &root;
data = data->next;
while(r->next)
{
if(r->next->x > n->x)
break;
r = r->next;
}
n->next = r->next;
r->next = n;
}
return root.next;
}
...
stert = ListSort(stert);
019775
2005/05/22(日) 04:09:33ありがトン!さっそくワイド文字列でコーディングしてみます。
今、環境が無いのですが、charからワイドにコピーする場合は
普通にstrcpyで出来るでしょうか?
ANSI Cを使用してます。
0198デフォルトの名無しさん
2005/05/22(日) 04:19:05196の内容は、ありがたいんですが、正直意味が解りませんでした。
ヒントも理解できないとは・・・
自分で解るまで考えますわー。今度こそさいならー。
0199デフォルトの名無しさん
2005/05/22(日) 04:19:23mbtowc()
0200デフォルトの名無しさん
2005/05/22(日) 04:28:34>>197
mbstowcs() だった
0201デフォルトの名無しさん
2005/05/22(日) 04:29:25リストをソートしようとするから面倒になる
一度、リストを分解して、各ノードに分けてから
規則的(大きい数から順になるよう)にノードを追加すれば良い
0203196
2005/05/22(日) 04:41:04if(r->next->x < n->x) だったorz
0204187,188,190
2005/05/22(日) 06:55:35ネタもいいけど
聞かないと教えられないんだけど
わざわざ繋げるんなら繋ぎ換えなんてことしなくて
a=>bの間にcを入れるだけなんだから
c.next=a.next
a.next=&c
で済むでしょ
cのための外側のforとどこに入れるか探すための内側のfor(while)でできるジャン
0205デフォルトの名無しさん
2005/05/22(日) 09:05:21どっちをつかいますか?
マニュアルに access 関数はセキュリティホールの元になるという記述が
あるのですが、ファイルの存在を調べるだけなら関係ないですよね?
0206デフォルトの名無しさん
2005/05/22(日) 09:08:020207デフォルトの名無しさん
2005/05/22(日) 09:13:350208デフォルトの名無しさん
2005/05/22(日) 09:18:240209デフォルトの名無しさん
2005/05/22(日) 09:46:00「そういえばどっかでセキュリティ問題を聞いたような気がしないでもない」と思い、
"access セキュリティホール"でぐぐってみたら
結果はご想像の通り。
accessもstatも、「標準C」の話題じゃないけどな。
0210205
2005/05/22(日) 10:03:56いま書いているプログラムが、書き込み先が存在していたら別の名前の
ファイルを作って書きこめという仕様なもので…
とりあえずaccessでやってみていますが、いろんなソースコードをみると
statが成功するか失敗するかで判定しているコードが多いので、どうしてか
と思って205を書きました。
access関数のセキュリティホールですが、どうもaccessでパーミッションを
調べてからおもむろにopenするようなプログラムは、acccess呼び出しと
open呼び出しの時間差をついた攻撃ができるらしいです。単にファイルの
有無を調べるだけなら関係ないような気もしますが。
# accessとセキュリティホールでぐぐるとMS Accessの話ばかりで…
0211デフォルトの名無しさん
2005/05/22(日) 11:45:32>c.next=a.next
>a.next=&c
ワロタ
0212デフォルトの名無しさん
2005/05/22(日) 11:55:38オレにも説明してくれないか
ずっと悩んでたのに簡単にできたから?
0213デフォルトの名無しさん
2005/05/22(日) 12:02:540214デフォルトの名無しさん
2005/05/22(日) 12:05:53それを c.next に入れてるが、何か?
0215デフォルトの名無しさん
2005/05/22(日) 12:12:560216デフォルトの名無しさん
2005/05/22(日) 12:29:58c.next=&b
の方が、、、ってことかな?
でも aとbとc の3つが出てくる必要があるからなんだかなぁ
0217デフォルトの名無しさん
2005/05/22(日) 13:17:53>>186と>>191の方法で、考えてみた?
c以降も繋がってるのだから、元々のc.nextの値を
b.nextに入れないで、どうするの?
>>191(>>198)が分かってないのは、挿入ソートという考え方で、
その説明を端折ったら、>>204の説明は全く検討違いだし、
そうでないなら、>>204の説明は、ただのネタとしか思えんが?
0218デフォルトの名無しさん
2005/05/22(日) 13:35:22今、非常に激しくうんこがしたいのですが、そうするとケ・セラ・セラという言葉の
意味もわからないし、ぬるぽで動きません。
ありがとうございました。
0219デフォルトの名無しさん
2005/05/22(日) 13:38:40もともとソート済みの列に、新しい要素を1つづつ挿入していくのが、挿入ソートだろ?
>c以降も繋がってるのだから、元々のc.nextの値を
どゆこと?
0220デフォルトの名無しさん
2005/05/22(日) 13:40:12>>186と>>191の方法は挿入ソートではない
0221デフォルトの名無しさん
2005/05/22(日) 13:41:39> もともとソート済みの列に、新しい要素を1つづつ挿入していくのが、挿入ソートだろ?
>>196 ではそうしてるだろ。
0222デフォルトの名無しさん
2005/05/22(日) 13:45:43>>>196 ではそうしてるだろ。
ってゆってるよw
0223デフォルトの名無しさん
2005/05/22(日) 13:48:360224デフォルトの名無しさん
2005/05/22(日) 14:02:050225デフォルトの名無しさん
2005/05/22(日) 14:09:53>>192で一度挿入ソートって単語が出てきて、
さらに、>>196で挿入ソートのサンプルを見てるにも関わらず、
>>198で理解できてないのだから、>>204の
>わざわざ繋げるんなら繋ぎ換えなんてことしなくて
>a=>bの間にcを入れるだけなんだから
って言い方は、どっちを向いても見当違いって事
0226デフォルトの名無しさん
2005/05/22(日) 14:11:47int n = 1000000000;
for( int i = 0; i<=32; ++i )
{
printf( "%8x, %8x\n", n>>i, n<<i );
}
0227デフォルトの名無しさん
2005/05/22(日) 14:12:59Cはforの中で変数宣言しちゃダメジャン・・・。
0228デフォルトの名無しさん
2005/05/22(日) 14:15:15ネタ乙
0229デフォルトの名無しさん
2005/05/22(日) 14:17:38C99ならおけでつが、何か?
0230デフォルトの名無しさん
2005/05/22(日) 14:37:100231デフォルトの名無しさん
2005/05/22(日) 14:39:350232デフォルトの名無しさん
2005/05/22(日) 14:46:56どうなんでしょう、小泉さん
0233デフォルトの名無しさん
2005/05/22(日) 14:56:11言語まわりの開発力が手薄なベンダでも何とかサポートできる程度の簡潔さだ
それと高い表現力との両立がバカウケしたのをどこの唐変木が勘違いしたのやら・・・
0234デフォルトの名無しさん
2005/05/22(日) 14:57:080235デフォルトの名無しさん
2005/05/22(日) 15:34:12バグの60%はなくなるはずだ。
0236デフォルトの名無しさん
2005/05/22(日) 15:36:36世界の平均気温が0.5℃上がるはずだ。
0237デフォルトの名無しさん
2005/05/22(日) 15:36:51その統計はおかしいな
C言語がなくなったとしても他の言語に書き換えるバグはへらない
0238デフォルトの名無しさん
2005/05/22(日) 15:43:302chのム板の書き込みが半減するはずだ
0239デフォルトの名無しさん
2005/05/22(日) 16:02:560240デフォルトの名無しさん
2005/05/22(日) 16:03:460241デフォルトの名無しさん
2005/05/22(日) 16:05:08それ以外では文字数を別に管理するしかない。
0242デフォルトの名無しさん
2005/05/22(日) 16:06:34それどうやるの?
0243デフォルトの名無しさん
2005/05/22(日) 16:08:01NUL文字だね
0244デフォルトの名無しさん
2005/05/22(日) 16:10:33null characterは正しい用語だよ
大文字でNULLと書いちゃうと、null pointerを表すNULLマクロに見えるから
誤解されやすいだろうけど
0245デフォルトの名無しさん
2005/05/22(日) 16:12:50「全ての」文字列をchar*とsize_tあたりのセットで管理すれば?
もちろんリテラルなどというものは使わない(w
0246デフォルトの名無しさん
2005/05/22(日) 16:12:56struct str {
char *p ; /* 実体も適当に確保してね */
size_t len ; } ;
あとはstr同士を使う時は、lenを使えばOK
最初にpの実体の長さが分からない時は'\0'を探す必要があるけど…
0247デフォルトの名無しさん
2005/05/22(日) 16:19:390248デフォルトの名無しさん
2005/05/22(日) 16:20:25Cですか?それ
0249デフォルトの名無しさん
2005/05/22(日) 16:21:030250デフォルトの名無しさん
2005/05/22(日) 16:21:550251デフォルトの名無しさん
2005/05/22(日) 16:23:57ついでにDelphiなどのPascal系はサイズと領域のペアで管理してるな
0252デフォルトの名無しさん
2005/05/22(日) 16:37:09そこで言う「文字列」とは、どのようなデータ構造を言うんだ?
ラスタやベクタで文字列の形を表しているのか、文字または文字列に対応する数値を導入しているのか、
その数値は計算に直接使うことを考慮しているのか、入力装置の特性に合わせた仕様のものか、
記憶装置上でどのような配置順になっているのか、C はいかようにも表現しうる言語だ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ただ唐突に文字列と言われても客体が曖昧すぎて何を聞かれても答えようがない
0253デフォルトの名無しさん
2005/05/22(日) 16:49:27つ§7.1.1 用語の定義
0254デフォルトの名無しさん
2005/05/22(日) 16:52:41ばかだな、そんなややこしいことしなくても
str[0] に文字数格納して、文字列を str[1] から開始すればいいんだよ。
0255デフォルトの名無しさん
2005/05/22(日) 16:56:320256デフォルトの名無しさん
2005/05/22(日) 17:00:050257デフォルトの名無しさん
2005/05/22(日) 17:01:28ショートマン参上う
0258デフォルトの名無しさん
2005/05/22(日) 17:01:56おい小僧、質問者はライブラリでとも strlen とも言ってねえぜ
文字列の表現を1つまたはほんの数例知っているだけなヒヨッ子が高脳ならあんたが高脳、うん偉い
0259デフォルトの名無しさん
2005/05/22(日) 17:09:17>文字列の表現を1つまたはほんの数例知っているだけなヒヨッ子が高脳ならあんたが高脳、うん偉い
前文も後文も意味不明すぎなわけだが
0260デフォルトの名無しさん
2005/05/22(日) 17:17:04↑
この図形であんたが何を表しているのか容易に推定できたぜ
わかりゃいいんだよ
0261デフォルトの名無しさん
2005/05/22(日) 17:26:00意味不明な文章を書くのはやめようよ
0262デフォルトの名無しさん
2005/05/22(日) 17:30:180263デフォルトの名無しさん
2005/05/22(日) 17:34:24ってC言語じゃやっちゃいけないことになってるが
これって 未定義 なだけだよね。
こういうときの副作用の働き方を 定義 する動きは
コンパイラ作ってる人たちのあいだに無いの?
0264デフォルトの名無しさん
2005/05/22(日) 17:38:27一度でいいよって…まさか同一人物だと勘違いしてる?
0265デフォルトの名無しさん
2005/05/22(日) 17:42:34ない
副作用完了点に関する曖昧さは意図的なものだから
それが問題になる場合はアセンブラを使うべき
0266デフォルトの名無しさん
2005/05/22(日) 17:43:10ということにしたいのですね
0267デフォルトの名無しさん
2005/05/22(日) 17:44:25「i++」と「++i」の違いがよくわかりません
0268デフォルトの名無しさん
2005/05/22(日) 17:44:35なぜ曖昧にしてるんだっけか
コンパイラの設計や最適化方法の妨げになる可能性があるから?
0269デフォルトの名無しさん
2005/05/22(日) 17:47:55前者は式の評価後に淫クリ
後者は評価前に淫クリ
0270デフォルトの名無しさん
2005/05/22(日) 18:09:01つまりこういうこと。
int a = 5, b = 5;
printf("%d %d\n", a, b);
printf("%d %d\n", ++a, b++);
printf("%d %d\n", a, b);
0271デフォルトの名無しさん
2005/05/22(日) 18:28:22if( up() < up() ) printf("unko\n"); else printf("chinko\n");
これはどうなるの?式の評価順序ってなんか法則あるの?
FAQ読んだけどよくわかんね
0272デフォルトの名無しさん
2005/05/22(日) 18:30:00はぁ…取り付くシマも無いか…
0273デフォルトの名無しさん
2005/05/22(日) 18:39:08ウィンドウがアクティブのときは普通に再生されます。
アクティブから非アクティブになったときでも普通に再生され続けます。
しかし非アクティブからアクティブに戻ると、一番始めに戻って再生されてしまいます。
ウィンドウがどの状態でも、始めに戻らず再生され続けるにはどうしたら良いですか?
0274デフォルトの名無しさん
2005/05/22(日) 18:43:42もう一つ作業用の変数を使う方法がありますが、
余分な変数を使わない方法はないでしょうか?
0275274
2005/05/22(日) 18:46:09お騒がせしました
0276デフォルトの名無しさん
2005/05/22(日) 18:49:07http://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
0277274
2005/05/22(日) 18:54:11私が考えたのは3処理でできます。
作業領域を使った場合と速度は一緒っぽいです。
あと、そんな方法を考えていた理由は
値交換のマクロを作るためです。
0278デフォルトの名無しさん
2005/05/22(日) 18:59:02276の示したページでは作業用の領域を使えば2命令で済む可能性があると書いてあるだろ。
0279デフォルトの名無しさん
2005/05/22(日) 19:22:25値交換はマクロでなく、実装した方が良いよ。一瞬で作れるんだし…
引継ぎに失敗すると、インクリメント等で、訳の分からんバグを生む事もあるし…
あと、値の入れ替え程度の速度が本気で気になる場合は、
諦めて、その部分だけ、アセンブリ言語使うべし。
C言語の範疇で、一律に早くする交換する方法なんてないから。
0280デフォルトの名無しさん
2005/05/22(日) 19:25:06マクロで作業用に変数を使いたいときにはdo { } while(0)
C99ではinline関数が使えるし、VC/BCCでは__inlineが代わりとしてある。
0281274
2005/05/22(日) 19:38:56すいません。
>>276のリンク先はほとんど読んでませんでした。
ちなみに私が考えたのは
x+=y
y=x-y
x=x-y
でした。
inlineとかdo{}whileはまだ勉強していないので調べて見ます。
ありがとうございました
0282デフォルトの名無しさん
2005/05/22(日) 19:43:23do { } while (0)は#defineと組み合わせて使う。
http://www.kouno.jp/home/c_faq/c10.html#4
0283デフォルトの名無しさん
2005/05/22(日) 20:00:43XORを使うのよりさらにひどいな・・・
0284デフォルトの名無しさん
2005/05/22(日) 20:28:110285デフォルトの名無しさん
2005/05/22(日) 20:29:500286デフォルトの名無しさん
2005/05/22(日) 20:31:50説明読めよ・・・
0287デフォルトの名無しさん
2005/05/22(日) 21:46:10#include <time.h>
#include <stdio.h>
int main(void)
{
clock_t start,end;
long l;
start = clock();
for (l=0; l<100000000;l++);
end = clock();
printf("%f\n",(double)(end-start)/CLOCKS_PER_SEC);
return 0;
}
以上の様に書いたところ、きちんと結果が出ました。(0.9秒程)
そこで、forの部分をソート処理に置き換えたところ、
結果が0.000000と返ってきます。
ソート処理は行われています。(printfして確認済み)
どうしたらよいでしょうか。
0288デフォルトの名無しさん
2005/05/22(日) 21:58:41どうもしなくていい
0289デフォルトの名無しさん
2005/05/22(日) 22:18:53l の、定数との比較や加算が1回当たり何秒かかっているか調べておき、
「ソート処理」ではそれが何回になっているのかから、どのくらいの結果が出れば妥当かを求めてみれ
log なんたらではなく、具体的な入力内容に対する正確な期待値をだぞ
0290デフォルトの名無しさん
2005/05/22(日) 22:19:03#define B 20
#define C A+B
int main()
{
int a[C];
}
みたいにするとエラーが出るのですがどうすればいいのでしょうか?
0291デフォルトの名無しさん
2005/05/22(日) 22:23:23C99対応のコンパイラ使え。
0292デフォルトの名無しさん
2005/05/22(日) 22:24:58ん、問題なさそうに見えるが?
本当に通らないんなら、操作方法か使っているコンパイラが原因じゃないか?
0293デフォルトの名無しさん
2005/05/22(日) 22:25:24C99を使わないとすると動的に確保するしかないですか?
0294デフォルトの名無しさん
2005/05/22(日) 22:25:300295デフォルトの名無しさん
2005/05/22(日) 22:26:05質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
0296デフォルトの名無しさん
2005/05/22(日) 22:26:32291 は煽りか完全ヴァカ
相手にするな
0297291
2005/05/22(日) 22:27:25スレ汚しすいませんでした
0298デフォルトの名無しさん
2005/05/22(日) 22:32:40C99対応でなくともエラーは出ない、と思う。
コンパイル時に配列数は決定できるわけだし。
0299デフォルトの名無しさん
2005/05/22(日) 22:35:26意外と別なところに問題があるかもしれないからよく見直して見ることをオススメする
0300デフォルトの名無しさん
2005/05/22(日) 22:40:210301デフォルトの名無しさん
2005/05/22(日) 22:45:36きっと#include<stdio.h>がないからだよ!!
0302デフォルトの名無しさん
2005/05/22(日) 22:46:59果たしてそうかな?
0303デフォルトの名無しさん
2005/05/22(日) 22:47:26ワロスw
0304デフォルトの名無しさん
2005/05/22(日) 22:47:390305デフォルトの名無しさん
2005/05/23(月) 00:25:15↑のプログラムはFord-Fulkersonのアルゴリズムで、
(http://coconut.sys.eng.shizuoka.ac.jp/gn/resume11.pdf 参照)
幅優先探索を利用して最大フローを求めているものなのですが、
これを深さ優先探索を利用したプログラムに変更するには
どう変更すればいいのでしょうか?
評価する関数を作って最小の増大路を求めるプログラムに
しようとしたんだけど、結果が出てこなくてうまくいかず・・・
http://tool-ya.ddo.jp/2ch/trash-box/file/20050518233531212.txt = Filtering Processing
0306デフォルトの名無しさん
2005/05/23(月) 00:29:130307デフォルトの名無しさん
2005/05/23(月) 00:29:29マルチ氏ね
0308デフォルトの名無しさん
2005/05/23(月) 01:04:40∧∞∧ ┌───────
(*‘ー‘) < シラナイワ
\ < └───/|───
\.\______//
\ /
∪∪ ̄∪∪
0309デフォルトの名無しさん
2005/05/23(月) 01:14:09BOOST_PP_ADD
0310デフォルトの名無しさん
2005/05/23(月) 01:20:26そんなコンパイラ捨ててしまえ
0311デフォルトの名無しさん
2005/05/23(月) 12:16:52ある変数の値が一つだけビットが立ってることを検査したいのですが
どういう方法が考えられますでしょうか?
例えば、00000100 は◯。00011000 は×。1110000 は×。00000001は◯。
といった具合です。
ぐるぐる回しながらひとつづつシフトして、立ってるビットの数を調べ
るしかないでしょうか。
0312デフォルトの名無しさん
2005/05/23(月) 12:23:130313311
2005/05/23(月) 12:31:10ありがとうございます。
具体的には2^nで割算して余りが0になるようにすれば良いでしょうか?
するとやはりこの「n」をぐるぐる回すしか無いでしょうか?
0316デフォルトの名無しさん
2005/05/23(月) 12:39:32そんなにループがいやなのか
0317デフォルトの名無しさん
2005/05/23(月) 12:42:070318デフォルトの名無しさん
2005/05/23(月) 12:43:24あ、ホントだ'`,、('∀`) '`,、
君の言うとおり2^nの剰余を、nをインクリメントさせながら求めていく方法しか思いつかないや
スマン
0319311
2005/05/23(月) 12:43:530320デフォルトの名無しさん
2005/05/23(月) 13:00:06i&&!(i&(i-1))
0321デフォルトの名無しさん
2005/05/23(月) 13:04:570101 とかはどうするんだね。
>>319
log() 使うくらいならループ回した方が速い気もするが…。
0322デフォルトの名無しさん
2005/05/23(月) 13:10:390323デフォルトの名無しさん
2005/05/23(月) 13:11:400324デフォルトの名無しさん
2005/05/23(月) 13:18:410325デフォルトの名無しさん
2005/05/23(月) 13:18:510326デフォルトの名無しさん
2005/05/23(月) 13:21:32シフトしたいとき
0327デフォルトの名無しさん
2005/05/23(月) 13:23:39大文字にするときじゃないの?
0328デフォルトの名無しさん
2005/05/23(月) 13:30:50・2^n倍するときや2^nで割りたいとき
・1つの値から特定の数ビットを切り出したいとき
・複数の値を1つの値にまとめたいとき
0329デフォルトの名無しさん
2005/05/23(月) 13:59:33営業時間が長いとき
0330デフォルトの名無しさん
2005/05/23(月) 14:53:12UNIXではファイル更新日付が現在時刻より半年を経過すると
時刻の値が消えてしまうのですが。
Cの関数にstatというファイル情報取得が行える便利なものがあったと思うのですが
この関数をUNIX内で動かした場合、時刻の消失を回避できる結果がえられますでしょうか?
0331デフォルトの名無しさん
2005/05/23(月) 15:00:19> UNIXではファイル更新日付が現在時刻より半年を経過すると
> 時刻の値が消えてしまうのですが。
え?そうなの?lsコマンドだけの話じゃないの?
ls --full-time で確認するとそんなことなさそうだけど。
0332デフォルトの名無しさん
2005/05/23(月) 15:00:26半年ルールはlsっていうコマンドがそういう挙動なだけです。
stat()ではちゃんとした時刻が取れます。
0333デフォルトの名無しさん
2005/05/23(月) 15:30:050334330
2005/05/23(月) 15:37:26solarisの10以降だったら問題ないのですが
当方環境が古いため、full-timeでは取得できないようです。
>>332
ありがとうございました。半年で時刻が落ちるのは当方環境のlsの
出力仕様のようですね。一度UNIXでstatサンプルをコンパイルしてみます。
0335320
2005/05/23(月) 15:42:55ちゃんと0になるよ。
サンプルコード(1つだけビットの立ってる数値のみ表示する)
#include<stdio.h>
int main(void){
int i;
for(i=0;i<256;++i)
if(i&&!(i&(i-1)))
printf("%3d\n", i);
return 0;
}
0336デフォルトの名無しさん
2005/05/23(月) 16:33:260337デフォルトの名無しさん
2005/05/23(月) 17:07:56ビットシフトの話題だけはもう触れるな
0338デフォルトの名無しさん
2005/05/23(月) 17:24:18/usr/ucb/lsだと、gidが表示されないけど
他はもんだいありません。
/usr/xpg4/bin/lsというのも、あります。
coreutilsの"gls"というのも、たぶん、あります。
$ /usr/bin/ls -ltr /etc | head
total 544
-rw-rw-rw- 1 root sys 1136 2月 13 1998 fddi.cfg
-r-xr-xr-x 1 bin bin 168 12月 8 1999 css.conf*
-rw-r--r-- 1 root sys 1393 1月 6 2000 dacf.conf
-rwxr-xr-x 1 root sys 2623 1月 6 2000 bootrc*
-rw-r--r-- 1 root sys 2303 1月 6 2000 ttydefs
-rw-r--r-- 1 root sys 496 1月 6 2000 rpld.conf
-rw-r--r-- 1 root sys 54 1月 9 2000 motd
-rw-r--r-- 1 root sys 1087 7月 10 2000 inittab
-r--r--r-- 1 root bin 10922 5月 25 2001 magic
0339330
2005/05/23(月) 17:42:07レスありがとうございます。 coreutilsのインストールで
時刻まで取れる オプションがあるようですね。
そちらの線でも調べてみます。
ちなみに以下のサンプルコードを作成しコンパイル&テストしてみました。
結果なのですが、touch コマンドで更新日付を強制的に変更した場合
正常に結果が返るのですが、touchを使わず、本当にその時期に更新されたと
思しき古いファイルを取得すると2005年代のでたらめな値が返りました。
どこかコードで見直す場所がありましたらご指摘お願いします。
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
void main( int argc , char *argv[] )
{
struct stat buf;
int result;
char buffer[] = "A line to output";
result = stat(argv[1], &buf );
if( result != 0 )
perror( "情報取得失敗" );
else
{
printf( "サイズ : %ld\n", buf.st_size );
printf( "更新時刻 : %s", ctime( &buf.st_atime ) );
}
}
0340デフォルトの名無しさん
2005/05/23(月) 17:49:35int(ry
0341デフォルトの名無しさん
2005/05/23(月) 17:49:43st_atime じゃなくて st_mtime でしょ?
続けるようならUNIXプログラミングスレッドかUNIX板へ行きましょう。
0342デフォルトの名無しさん
2005/05/23(月) 17:54:33必ず、128という答えがかえってきます。どうすれば適切な答えが返るようになるのでしょうか。
ちなみに、OSはWin98、コンパイラはBCCです。
#include<stdio.h>
int sankaku(int,int);
int main()
{
int teihen,takasa,menseki;
menseki=sankaku(teihen,takasa);
printf("底辺を入力して下さい。---");
scanf("%d",&teihen);
printf("高さを入力して下さい。---");
scanf("%d",&takasa);
printf("三角形の面積は%dです。",menseki);
return 0;
}
int sankaku(int teihen,int takasa)
{
int menseki;
menseki=teihen*takasa/2;
return menseki;
}
0343デフォルトの名無しさん
2005/05/23(月) 17:55:410344330
2005/05/23(月) 18:01:11ご指摘ありがとうございます。voidは誤りでしたか。すみません。
修正いたします。
>>341
ありがとうございます。というかスレ違いだったのですね。
今後は移動します。すみません。ありがとうございました。
0345デフォルトの名無しさん
2005/05/23(月) 18:34:31bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
return (bits & 0x0000ffff) + (bits >> 16 & 0x0000ffff);
}
0346デフォルトの名無しさん
2005/05/23(月) 18:55:10冗長
int numofbits5(long bits) {
bits -= bits >> 1 & 0x55555555;
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = bits+(bits>>4) &0x0f0f0f0f;
bits += bits >> 8;
return bits + (bits >> 16) & 0xff;
}
0347デフォルトの名無しさん
2005/05/23(月) 18:57:350348デフォルトの名無しさん
2005/05/23(月) 19:05:270349348
2005/05/23(月) 19:15:45この板の人間は酷すぎます。
詐欺です。
私の接続料金を返してください。
返却なき場合は警察と顧問弁護士に相談します。
0350348
2005/05/23(月) 19:22:590351デフォルトの名無しさん
2005/05/23(月) 19:26:31ていうか>>348は他のスレでも見た気がするのだが流れてきたのか?
0352348
2005/05/23(月) 19:30:12すみません、他のスレってどこですか?
0353デフォルトの名無しさん
2005/05/23(月) 19:33:250354348
2005/05/23(月) 19:39:43自分じゃないです。
読んでみましたが結論出てないですよね。
sprintf でできるんですか?
ヘルプ見ても載ってないです。
0355デフォルトの名無しさん
2005/05/23(月) 19:57:03再帰が楽じゃないか?
0356デフォルトの名無しさん
2005/05/23(月) 19:57:400357デフォルトの名無しさん
2005/05/23(月) 20:30:31さらに元の数字を1,000で割ると、1,000〜100,000の桁が下三桁に来るので、同様に切り出せる。
あとはこれを被除数側が1,000を下回るまで繰り返せばいい。
負の数とかの細かい話は適当に。
原始的だが、この辺が定石。
スマートな方法を探すのもいいが、泥臭い方法だって別に良いだろ。
0358デフォルトの名無しさん
2005/05/23(月) 20:31:41CBA FEDと入力されたものが逆に出力されるようなプログラムを組みたいのですがどうすればよいでしょうか?
FED CBAと出力するなら簡単なのですが・・・。
おそらくスペースが入力されると一旦スタックの中をすべて取り出したらいいと思うのですが、
どうプログラムを組めばいいのか分かりません。
宜しくお願いします。
0359デフォルトの名無しさん
2005/05/23(月) 20:32:040360351
2005/05/23(月) 20:35:250361デフォルトの名無しさん
2005/05/23(月) 20:42:03とりあえず内容と長さを普通にスタックに保持して、取り出すときに逆にするというのはどうか
0362デフォルトの名無しさん
2005/05/23(月) 20:43:30ファイルから、fgetcで読み込んだデータを、
条件に応じて、配列に格納、宣言するやり方を教えてください。
例えば、数字だったらこの配列。
英字だったらこの配列にといった事です。
お願いします。
0363デフォルトの名無しさん
2005/05/23(月) 20:46:21うーん、普通に1文字ずつ調べていくしかないのでは
0364358
2005/05/23(月) 20:55:43それだとうまくいかないのですよね・・
0365デフォルトの名無しさん
2005/05/23(月) 21:10:07main() {
register c,fp,dm[4096],am[4096],EOF = (-1);
d = dm;
a = am;
fp = fopen(__FILE__, "r");
while((c = fgetc(fp)) != EOF) f[c](c);
fclose(fp);
while(--d >= dm) putchar(*d);
putchar('\n');
while(--a >= am) putchar(*a);
puts("\a");
exit();
}
df(c) { *d++ = c; }
af(c) { *a++ = c; }
nf(c) { }
(*f[])() = {
#define x nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,nf,
x x x
df,df,df,df,df,df,df,df,df,df,nf,nf,nf,nf,nf,nf,
nf,af,af,af,af,af,af,af,af,af,af,af,af,af,af,af,
af,af,af,af,af,af,af,af,af,af,af,nf,nf,nf,nf,nf,
nf,af,af,af,af,af,af,af,af,af,af,af,af,af,af,af,
af,af,af,af,af,af,af,af,af,af,af,nf,nf,nf,nf,nf,
x x x x x x x x
#undef x
};
0366デフォルトの名無しさん
2005/05/23(月) 21:28:56char * addStringFromIntWithComma(char * buf, int val)
{
char * p;
if (val < 0) {
p = strchr(buf, '\0');
p[0] = '-';
p[1] = '\0';
return addStringFromIntWithComma(buf, -val);
}
if (val >= 1000) {
p = addStringFromIntWithComma(buf, val / 1000);
return p + sprintf(p, ",%03d", val % 1000);
}
p = strchr(buf, '\0');
return p + sprintf(p, "%d", val);
}
void putStringFromIntWithComma(char * buf, int val)
{
buf[0] = '\0';
addStringFromIntWithComma(buf, val);
}
0367360
2005/05/23(月) 21:34:23#include <stdio.h>
#include <string.h>
int main(void)
{
int i,j,k,n = -1111222333;
char str[16];
for(i=0,j=0,k=(n<0)?-n:n;k;i++,k/=10)
j+=sprintf(str+j,(i%3==2)?"%1d,":"%1d",k%10);
if(n<0) sprintf(str+j,"-");
strrev(str);
puts(str);
return 0;
}
しょぼ。strrevは大抵のコンパイラにくっついてるけど非標準だから
無かったら作って。
32bitのintならstrは16あれば足りるはず。
おいちゃんはこんな芋な方法しか思いつかんかったんよ…。
0368デフォルトの名無しさん
2005/05/23(月) 21:38:53しょぼいって言うか、無理しすぎ。肩の力を抜けば>366くらいは簡単でしょうが。
で、>366がstrlen()を使わない件について。
0369デフォルトの名無しさん
2005/05/23(月) 23:16:57http://blog.livedoor.jp/friend_go_777/archives/22746581.html
0370デフォルトの名無しさん
2005/05/23(月) 23:19:290371デフォルトの名無しさん
2005/05/23(月) 23:20:02個人的にprintf()系や除算を使う回数が多いのは嫌いなので適当に…
試してないので、動かなかったらスマソ
void foo ( char *ptr, int n ) {
int flag, len, rem ;
flag = ( n < 0 ) ;
len = sprintf( ptr, "%d", n ) - flag ;
rem = len % 3 ;
len /= 3 ;
ptr[ len * 4 + rem + flag ] = '\0' ;
while ( len -- ) {
ptr[ len * 4 + rem + 3 + flag ] = ptr[ len * 3 + rem + 3 + flag ] ;
ptr[ len * 4 + rem + 2 + flag ] = ptr[ len * 3 + rem + 2 + flag ] ;
ptr[ len * 4 + rem + 1 + flag ] = ptr[ len * 3 + rem + 1 + flag ] ;
ptr[ len * 4 + rem + flag ] = ',' ; }
return ; }
0372デフォルトの名無しさん
2005/05/23(月) 23:20:25CGI 使ってないしスレ違い
0373デフォルトの名無しさん
2005/05/23(月) 23:29:58・・・・・・
コーディングはスマートにって教わらなかったか
0374デフォルトの名無しさん
2005/05/23(月) 23:41:330375デフォルトの名無しさん
2005/05/23(月) 23:46:07>printf()系や除算を使う回数が多いのは嫌いなので
ループの回数が無駄に多い罠。
0376デフォルトの名無しさん
2005/05/23(月) 23:51:450377デフォルトの名無しさん
2005/05/24(火) 00:20:37で、ぐぐる
0378デフォルトの名無しさん
2005/05/24(火) 00:31:02適当。
size_t seps(char *buffer, int n)
{
size_t len;
if (n < 1000) {
sprintf(buffer, "%d", n);
return strlen(buffer);
}
len = seps(buffer, n/1000);
sprintf(buffer + len, ",%03d", n%1000);
return len + 4;
}
0379デフォルトの名無しさん
2005/05/24(火) 00:54:070380デフォルトの名無しさん
2005/05/24(火) 00:58:40そういうサンプルが出ないね。珍しいやり方なんだろうか
0381デフォルトの名無しさん
2005/05/24(火) 01:01:55>>367
まさにそのまんまじゃねーか
0382371
2005/05/24(火) 01:07:59別に、文句言われる程悪いとは思わないけどね…
まぁ、実際にCをコンパイルできる環境が目の前にないので、
個人的に分かりやすいようにコードを書いたのは確かだが…
取り合えず、ある程度、まとめてみた
前回同様、試してないので、動かなかったらスマソ
void foo ( char *p, int n ) {
int i ;
p += i = sprintf( p, "%d", n ) ;
p[i=(i-(n<0)-1)/3] = '\0' ;
while(i--) p -= 3, p[i+3] = p[2], p[i+2] = p[1], p[i+1] = *p, p[i] = ',' ; }
0383デフォルトの名無しさん
2005/05/24(火) 01:12:50/⌒'\
( ,i::::::::::::i ./⌒\
〉ノ:::::::::::| | ○゜ i ) )
/;/:::::::::::」/.〉 /
___.i;;.i::::::::::::i/ ..: .', /
./ ヾ .|;;i:::::::::::/.. ..;;〉.」
.__ .\|;.i:::::::::/ / ...;;/
_ノ\i_) i:::::::/ ...;;/ // 具にするよ〜
 ̄ .|; i:::::/ / ..;;/
__.|;_i::/ ...;;/
___/ .....;;/
.|;; i ...;;イ
ノ;; ,.‐ ;;-.;i
/;;; /' '' ;;;X
|;; ;i;;.. 〜 ;;|
X〜 ;i;;; ;;,. ;;;/
ヽ;;__\_;;/
0384デフォルトの名無しさん
2005/05/24(火) 01:13:34添え字の使い方も相変わらず要領得てないし・・・
0385383
2005/05/24(火) 01:14:110386デフォルトの名無しさん
2005/05/24(火) 01:15:29sprintf()した後にstrlen()を呼ぶ意味を見出せないから
0387未確認
2005/05/24(火) 01:16:33int isminus = 0;
int buf;
int kbuf = 1;
int cnt = 1;
int i;
char* pin = str;
if(dat < 0) {
buf = dat * -1;
isminus = 1;
}else{
buf = dat;
}
if(buf < 1000){
sprintf(str, "%d", dat);
return;
}
while(1) {
if(buf / kbuf < 10) break;
kbuf *= 10;
cnt++;
}
if(isminus) *pin++ = '-'
for(i = cnt; i >= 0; cnt--) {
*pin++ = '0' + (buf / kbuf) % 10;
if(i % 3 == 0) *pin++ = ',';
kbuf /= 10;
}
}
0388デフォルトの名無しさん
2005/05/24(火) 01:17:08p で隠してる邪悪さのことだ
0389デフォルトの名無しさん
2005/05/24(火) 01:17:120391デフォルトの名無しさん
2005/05/24(火) 01:20:47何が邪悪なの?
0392デフォルトの名無しさん
2005/05/24(火) 01:24:53とぼけるんなら話は終わりだ
0393デフォルトの名無しさん
2005/05/24(火) 01:29:55とぼけるも何も特に罠を張ったつもりはないし
>>382で書いてあるように今現在環境がないので
テバッガで追う事も出来ない(コンパイルが通るかすら検証出来ない)
邪悪だと思われる処理があったら教えてくれ
0394デフォルトの名無しさん
2005/05/24(火) 01:31:26バッファ長をどうするかに動作確認は関係ない
0395デフォルトの名無しさん
2005/05/24(火) 01:32:370396デフォルトの名無しさん
2005/05/24(火) 01:35:22ハァ?
何を言いたいの?
0397デフォルトの名無しさん
2005/05/24(火) 01:36:48ここは学校じゃないんで
それは教えてやらない
金払うなら別だが
0398デフォルトの名無しさん
2005/05/24(火) 01:36:50どう考えたって>382が動くわけがないし、汚いロジックだと思わないんだとしたら終わってるよ。
0399デフォルトの名無しさん
2005/05/24(火) 01:44:00>つーか、机上デバッグもできてないコードを書ける神経を疑うね。
別に仕事じゃないからね
>どう考えたって>382が動くわけがないし、汚いロジックだと思わないんだとしたら終わってるよ。
どこら辺で「動くわけがない」と判断してるか良く分からんが
>>382にも「動かなかったらスマソ」って書いてあるじゃん
それに、この問いに対する回答としては別に汚いロジックではないよ
まぁ、俺のコードの書き方が汚いのは認めるが、考え方は別に間違えてないし
0400デフォルトの名無しさん
2005/05/24(火) 01:44:430401デフォルトの名無しさん
2005/05/24(火) 01:49:16たとえば、ファイルの10行目から20行目までを読みこむっていう感じです。
今のところ
FILE *fp
char buf[1024];
以下条件でくり返し
fgets(buf, sizeof(buf), fp)
で行を読みとばしていますが、他にいい方法が在りましたら教えて下さい。
0402デフォルトの名無しさん
2005/05/24(火) 01:50:02バッファいらね
fgetc で充分
0403デフォルトの名無しさん
2005/05/24(火) 01:51:50fgetcは一行読み込みでしたっけ?
0404デフォルトの名無しさん
2005/05/24(火) 01:55:35回答早っ
まぁ、何をもって、綺麗・汚いを判断するかは個人的な趣味なので
その判断基準については、特に俺から何を言うつもりはないが
最低限、皆が納得出来る、この問いに対する綺麗なロジックを書いてみせろ
0405デフォルトの名無しさん
2005/05/24(火) 01:56:550406デフォルトの名無しさん
2005/05/24(火) 02:06:580407デフォルトの名無しさん
2005/05/24(火) 02:09:13書けないなら別に良いけどね
取り合えず、俺はそろそろ寝るが、書けるものなら書いておいてね
(綺麗なコードではなく、綺麗なロジックをね)
>>406
まぁ、売られた喧嘩だし…
0408デフォルトの名無しさん
2005/05/24(火) 02:11:450409デフォルトの名無しさん
2005/05/24(火) 02:16:18試してないので、動かなかったらスマソ
void foo ( char *p, int n ) {
int i ;
p += i = sprintf( p, "%d", n ) ;
p[i=(i-(n<0)-1)/3] = '\0' ;
while(i--) p -= 3, p[i+3] = p[2], p[i+2] = p[1], p[i+1] = *p, p[i] = ',' ; }
綺麗・汚いを判断するかは個人的な趣味なので、とやかく言うんじゃねぇぞ!
0410デフォルトの名無しさん
2005/05/24(火) 02:16:43設計ノウハウの伝授は有料である旨を提示した >それでも書けと要求
どう見るかは聴衆に任せる
0411デフォルトの名無しさん
2005/05/24(火) 02:17:19fgets()だと、バッファサイズまでしか読み込まんので、行が非常に長い場合は
完全な1行を読み込めない
そういう意味では、行読み飛ばすんならgetc()使ったほうがいい
# fgetc()とgetc()は機能が同じだが、getc()はマクロとして実装されており
# より効率的である可能性が高い
while ((c = getc(fp)) != EOF && c != '\n')
;
みたいな感じでいいだろう。
0412デフォルトの名無しさん
2005/05/24(火) 02:17:520413デフォルトの名無しさん
2005/05/24(火) 02:18:57こいつのバランス感覚も凄いことになってるな・・・・
0414デフォルトの名無しさん
2005/05/24(火) 02:21:03なんで?
fgetc()なんて誰も使わんでしょ
K&Rでも全部getc()だよ
0415デフォルトの名無しさん
2005/05/24(火) 02:21:060416デフォルトの名無しさん
2005/05/24(火) 02:22:040417デフォルトの名無しさん
2005/05/24(火) 02:22:39寝る前にgcc落として試してみたら
>>382で思ってた通りに動いてるじゃん
こんな奴を相手にした俺がバカだったよ
0418デフォルトの名無しさん
2005/05/24(火) 02:23:040419デフォルトの名無しさん
2005/05/24(火) 02:23:52なるほど。たしかに行が長ければそうなるね。
ただ、関数マクロは危険なので出来るだけ使わない方がいいとカーニハン先生が言ってた。
特にオーバーヘッドを考慮する必要がなければfgetcでもいいし、
行の長さが決まっているならfgetsでもいいね。
アリガトン
0420デフォルトの名無しさん
2005/05/24(火) 02:25:12今でもgetc()は別にマクロと決まってるわけじゃないんだよね
マルチスレッド対応のランタイムでは排他が必要になるから
結局fgetc()と同じ
マクロである可能性が高い、というだけ
0421デフォルトの名無しさん
2005/05/24(火) 02:31:43コードを綺麗に書く奴が有能な職業プログラマである可能性が高いとは言えそうだけど
0422デフォルトの名無しさん
2005/05/24(火) 02:33:070423デフォルトの名無しさん
2005/05/24(火) 02:33:470424デフォルトの名無しさん
2005/05/24(火) 02:38:320425デフォルトの名無しさん
2005/05/24(火) 02:41:550426デフォルトの名無しさん
2005/05/24(火) 02:46:24いや、それも一緒に載ってた
結局は誰が見ても一意に解釈されるような単純なコードが一番だと言う意味だ。
そういう意味では>>409が良いとはおもえない
自分だけが見る趣味の領域なら難解なコードも一興だけど。
0427デフォルトの名無しさん
2005/05/24(火) 03:37:530428デフォルトの名無しさん
2005/05/24(火) 04:15:470429デフォルトの名無しさん
2005/05/24(火) 04:36:05Cで
0430デフォルトの名無しさん
2005/05/24(火) 05:36:02unsigned int なのでしょうか?
intの場合、 intのサイズは処理系よって変化するそうですが、unsigned のみも
変化すると思って良いんですかね。
0431デフォルトの名無しさん
2005/05/24(火) 07:33:26そうだよ。
unsigned == unsigned int
sizeof (unsigned int) == sizeof (int)
でもC99ではintの省略はだめになったらしいけどね。
0432デフォルトの名無しさん
2005/05/24(火) 07:39:24−−−−−−−−−−
typedef void (*func_ptr)(void);
int g_step;
static void step00(void)
{
(略)
g_step++;
}
static void step01(void)
{(略)
g_step++;
}
static void step02(void)
{
(略)
g_step++;
}
void main(void)
{
const func_ptr fnTbl[] = { step00, step01, step02 };
fnTbl[g_step]();
}
−−−−−−−−−−
いつも↑みたく書いてるけど。
0433デフォルトの名無しさん
2005/05/24(火) 07:43:52関数テーブルってよくstaticで見かける気がスルけど付けなかったらイクナイ事があったりするのかなぁ、と(・ω・`)
0434デフォルトの名無しさん
2005/05/24(火) 08:03:16一応動くけどね。
main(int argc, char *argv)
{
char buf[16];
int s;
for (s=1234567890; s; s/=10) {
seps(buf, s);
printf("%10d ==> \"%s\"\n", s, buf);
}
}
実行結果:
1234567890 ==> "1,234,567,890"
123456789 ==> "123,456,789"
12345678 ==> "12,345,678"
1234567 ==> "1,234,567"
123456 ==> "123,456"
12345 ==> "12,345"
1234 ==> "1,234"
123 ==> "123"
12 ==> "12"
1 ==> "1"
0435デフォルトの名無しさん
2005/05/24(火) 08:59:57そして>417=>382は自分のコードが動くか動かないか、わざわざコンパイルしないと判らないくらい自信がなかったわけだ。
>410は結局無視してるし。まぁ、>398も動かないと思い込む辺りが困ったもんだが。
>378や>366が(効率は兎も角)ロジックを追いやすいのとは対極だな。
#まして>371から>382と、本人はまとめて読みやすくしたつもりらしいけど……
一桁ずつ処理するタイプでは>367がバッファが必要な点とnの仕掛けの辺りがちょっと読みづらいな。
そうなると、一番シンプルなのは>387かな。
0436デフォルトの名無しさん
2005/05/24(火) 10:00:04インデントごときでギャアギャア騒ぐな
0437デフォルトの名無しさん
2005/05/24(火) 10:21:020438デフォルトの名無しさん
2005/05/24(火) 11:25:530439デフォルトの名無しさん
2005/05/24(火) 11:39:412 --> 0 1 ( 0 1 0 でもよい )
3 --> 1 1 ( 1 1 0 でもよい )
4 --> 0 0 1 ( 0 0 1 0 でもよい )
5 --> 1 0 1 ( 1 0 1 0 でもよい )
おねがいします
0440デフォルトの名無しさん
2005/05/24(火) 11:43:07シフト(>>)使って & 1 すればいい
0441デフォルトの名無しさん
2005/05/24(火) 11:43:45入力された文字列を数値に直したあと
int numだと仮定するとまあ32ビットが相場だから
for文で0から31までまわしつつ
1とアンドして真なら1、偽なら0
num/=2してnextだな
0443デフォルトの名無しさん
2005/05/24(火) 11:56:11マルチだったか。
死んで詫びろ。
0444デフォルトの名無しさん
2005/05/24(火) 12:04:26>>439は病気で、もう余命幾ばくも無いんだ
これが最期の宿題かもしれないんだ
0445デフォルトの名無しさん
2005/05/24(火) 12:14:40普通Fortranではg77とかの無料のコンパイラは信用ならず、有料のしっかりしたものを使っていますが、
C言語ではどのコンパイラを使えばいいのでしょうか。ちなみに、Win,MacOSX,Linuxの環境はそろってます。
0446デフォルトの名無しさん
2005/05/24(火) 12:21:44金かけれるなら VisualC++ とか
0447デフォルトの名無しさん
2005/05/24(火) 12:26:350448デフォルトの名無しさん
2005/05/24(火) 12:34:100449デフォルトの名無しさん
2005/05/24(火) 12:49:20Windows → MS VC 買え。しっかりしてるかどうかは別だが。
Mac OS X → 残念だったな。コンパイラは無料だ。
Linux → 無料のOSは信用してるのか?
つか、微妙にスレチ
0450デフォルトの名無しさん
2005/05/24(火) 14:02:050451デフォルトの名無しさん
2005/05/24(火) 14:57:38OSは?
0452デフォルトの名無しさん
2005/05/24(火) 15:22:490453デフォルトの名無しさん
2005/05/24(火) 15:47:24C標準ではできない。よってスレ違い。
0454デフォルトの名無しさん
2005/05/24(火) 15:50:10そういう人達に車輪を再開発できる程の力は無い
次にお前は「する必要がないことのための力は不要」と言う
↓
0455デフォルトの名無しさん
2005/05/24(火) 15:52:43int main()
{
return printf(( "%s, %s.\n", "Hello", "World" ));
}
表示がおかしいのですが、
コンバイラがバグっているのでしょうか?
環境はPCの98seです。
0456デフォルトの名無しさん
2005/05/24(火) 15:54:52フゥーーーーーーーーーーーー!!
0457デフォルトの名無しさん
2005/05/24(火) 15:55:06かっこかっこ こっかこっか
かっこ こっか
0458デフォルトの名無しさん
2005/05/24(火) 15:56:02・コンパイラを疑う前に自分を疑え。
・表示がおかしいのならどうおかしいのか書け。
・コンパイラの警告Lvは上げておけ。
・関数の括弧の中にもう一つ括弧を入れるとカンマ演算子の意味が変わる。
0459デフォルトの名無しさん
2005/05/24(火) 16:11:15つーかスレ違い
0460デフォルトの名無しさん
2005/05/24(火) 16:31:270461デフォルトの名無しさん
2005/05/24(火) 17:56:040462デフォルトの名無しさん
2005/05/24(火) 18:55:250463デフォルトの名無しさん
2005/05/24(火) 18:58:410464デフォルトの名無しさん
2005/05/24(火) 20:32:20関数の前に空行あけたり
seまで書いたりするから
typo がわざとらしくギラつくんだよ
釣り師として三流、修行積んで出直して来い
0465デフォルトの名無しさん
2005/05/24(火) 21:12:10で、16進数を10進数に変換する関数って標準であるんですか?。
自分で変換関数かかないとだめなのかな?。
0466デフォルトの名無しさん
2005/05/24(火) 21:17:07ヒント
#include<stdio.h>
int main()
{
int i;
scanf("%x",&i);
printf("%d",i);
}
0467デフォルトの名無しさん
2005/05/24(火) 21:18:120468デフォルトの名無しさん
2005/05/24(火) 21:19:2310進数というのは数値なのか文字列なのか
0469デフォルトの名無しさん
2005/05/24(火) 21:22:060470デフォルトの名無しさん
2005/05/24(火) 21:23:44お前さんで三匹目だよw
0471デフォルトの名無しさん
2005/05/24(火) 21:30:42プログラムの技術的な話する気ねえ奴は板違いだ帰れ
0472デフォルトの名無しさん
2005/05/24(火) 21:33:13glib.hのなかのgint()関数を使用したいのですが、
includeフォルダーのなかに、glib.hファイルがないのです。
どうすればインストールできるのでしょうか。
0473デフォルトの名無しさん
2005/05/24(火) 21:36:27俺ならとりあえずglibでぐぐってみる。
0474デフォルトの名無しさん
2005/05/24(火) 21:37:33iconv関数で、EUC→ISO-2022-JP
変換はできないのでしょうか?
openでは正常リターンするのですが、
iconv関数を発行するとエラーになります・・・
0475デフォルトの名無しさん
2005/05/24(火) 21:44:58くぐってみたら、これってwindowsでは、無理なんでしょうか。
ダウンロードの解答ファイルの拡張子が、変なんです。
ということは,今日買った本は、無駄ということでしょうか。
泣き。。。
0476デフォルトの名無しさん
2005/05/24(火) 21:45:260477デフォルトの名無しさん
2005/05/24(火) 21:58:00fopenするときの慣例について教えてください。
if(fp = fopen(argv[1], "r") == EOF){
fprintf(stderr, "file open errer!!\n");
exit(1);
}
みたいな感じでツカ?
0478デフォルトの名無しさん
2005/05/24(火) 21:59:18どちらも数値でございます。
なんかググったら変換関数がシェアーウェアーで有料とかあるんですけど・・・。
やはり普通は自作するのか??、な。
0479デフォルトの名無しさん
2005/05/24(火) 21:59:21おまえ向いてない
0480デフォルトの名無しさん
2005/05/24(火) 21:59:490481デフォルトの名無しさん
2005/05/24(火) 22:00:50確かにマシになってきた
だが、連貼りしたら意味ない
今日は寝ろ
0482デフォルトの名無しさん
2005/05/24(火) 22:00:54おい、数値に10進も16進も無いぞ
表示するときに、初めてどっちで表記するか決める
0483デフォルトの名無しさん
2005/05/24(火) 22:22:41とりあえず、16bitの変換関数出来たからもういです。
16進なんて嫌いだー。
0484デフォルトの名無しさん
2005/05/24(火) 22:25:060485デフォルトの名無しさん
2005/05/24(火) 22:33:39UNIX関係スレへ。スレ違い。
0486474
2005/05/24(火) 22:46:470487432
2005/05/24(火) 22:47:32って事はstatic付けようが付けまいが変わらないて事か(・ω・´)
λ....
0488デフォルトの名無しさん
2005/05/24(火) 22:47:550489デフォルトの名無しさん
2005/05/24(火) 23:02:27テキストとプロジェクタがあればきっちり説明できるから、あんた用意したら?
0490デフォルトの名無しさん
2005/05/24(火) 23:05:27staticつけると同一ファイル内でしか直接呼び出すことが出来なくなる
関数ポインタで呼び出した場合はどうなのか知らないけど
0491デフォルトの名無しさん
2005/05/24(火) 23:08:58名前がぶつからないってこと
0492デフォルトの名無しさん
2005/05/24(火) 23:13:19(^^)>ドウモッス
0493デフォルトの名無しさん
2005/05/25(水) 01:28:13>バッファ長をどうするか、と問題点は明らかにした >回答を避けもしくは転嫁する欲求との対立をケンカと言う
これに回答する意味があるの?
この手の問題で、何をどう考えて、バッファ長が問題点になるのか俺には理解出来んよ…
>設計ノウハウの伝授は有料である旨を提示した >それでも書けと要求
結局書かずに>>409みたいな回答を返す奴に反論してもね…
大体、コードとロジックの区別もついてなさそうだったし…
それに、まとめたのは、見易すくする為ではなく、処理を軽くする為
printf()系や除算を無暗に使うのが嫌いと書いた、バランス感覚が悪いって言われたので
その他の処理が重そうに見えたのかなと思った(それでも他のコードよりは軽いはずだが)
前後の流れから、コードの見易さと、効率についてのバランス感覚ともとれるが
(その場合、俺の完全な勘違いであるが)
あの時点では、全体の効率の話だと思ったので、>>382のようになっただけ
まぁ、結局>>417が俺の結論な訳だけど
これ以上、この問題に付き合うつもりはないので、宜しく
>>ALL
板汚しスマソ
0494デフォルトの名無しさん
2005/05/25(水) 01:34:31標準で用意されているものを利用しろ。
それだけだ。
0495デフォルトの名無しさん
2005/05/25(水) 02:06:300496デフォルトの名無しさん
2005/05/25(水) 02:23:040497デフォルトの名無しさん
2005/05/25(水) 02:35:380498デフォルトの名無しさん
2005/05/25(水) 02:38:470499デフォルトの名無しさん
2005/05/25(水) 02:57:22,'ィ'_,,=---‐_,、( ,、i-‐ '''''`ー- 、 ヽ'、
〃``'''フ' ̄,、-‐''´ `ヽ、 } }
. / / ,、-‐'' _,,、、-‐‐‐、 、,_ヽ //
, ' / , //,、-‐'''''' )ノ/ノ〃
/ノ‐/ / ///=-‐'' _,、 ' ,,;;='=、
_,,,'_イ'|/ /, ,'イ/,'\,,、、-‐''"´_,、 , ‐-丶''、`ヾ、
,、- '´ `ヽ /// /i/ー='、‐==''_;、-' // i i ヽ ヾヽ.
/ }/,ヘミ;;、 ー= '=‐''´'´ ノノ / } ヽ ヽ i
. , ' ,} |!! ';;;,ヾ` ー=二-‐''='´/ / i ヽヽ!!
/ ノ| i' , -=;;='´/ / / i l i
/ ,、-',,ノ' :|'i、 、'ヽ, _,、-=;;、`}、-=彳 ノ/ / / !
/ __ /=='' / iヽ、 ´ ’{=-'',〃,/´'" / / / / /
/ '´ ~~"'' ‐'- 、,へ、_ / / i; `;i丶-‐'i´ー=二-‐''´ / /./// ご、ごめん。すぐ出て行くから!
/ / 〃´`"''、 i; / i|イ// //ー=二-‐',、-'´//
'、 i i'〃 \i;、, !ノ||i ||/ ~"二,,、、-‐'' '
'- 、,,__,,,、、--‐‐‐;,,、'! ヽ i、ィ、ソiiソ !
''~丶 ヽ.〉) \!
'i '、. ', \
/ r'⌒'、 i. iヽ '、
i .ノ } } ./ '、_!
'y' 'し‐'
0500デフォルトの名無しさん
2005/05/25(水) 02:58:49{
return 0;
}
0501デフォルトの名無しさん
2005/05/25(水) 07:42:32俺ならとりあえず拡張子でググってみる。
0502デフォルトの名無しさん
2005/05/25(水) 10:54:24このマクロはブロック構造を使い、swap(double,one,two)に対して,
以下のような出力が得られるものとする。
Cのコンパイラgccは-Eオプションを付けてソースファイルをコンパイルするとプリプロセッサの処理までを行い、
結果を標準出力に出力する。
これを利用して正しく展開されることを確かめなさい。
{
double temp;
temp = one;
one = two;
two = temp;
}
0503デフォルトの名無しさん
2005/05/25(水) 10:56:15宿題ならスレ違いだが・・・
0504デフォルトの名無しさん
2005/05/25(水) 11:45:450505デフォルトの名無しさん
2005/05/25(水) 12:19:010506デフォルトの名無しさん
2005/05/25(水) 13:22:15俺に命令するなぁっ!!!
0507デフォルトの名無しさん
2005/05/25(水) 16:37:550508デフォルトの名無しさん
2005/05/25(水) 17:45:160509デフォルトの名無しさん
2005/05/25(水) 17:51:530510デフォルトの名無しさん
2005/05/25(水) 17:55:480511デフォルトの名無しさん
2005/05/25(水) 18:04:330512デフォルトの名無しさん
2005/05/25(水) 18:06:440513デフォルトの名無しさん
2005/05/25(水) 18:12:05ここでも無理なものなの?
cygwin + mingwn + gcc 相談室
http://pc8.2ch.net/test/read.cgi/tech/1058134693/
0514デフォルトの名無しさん
2005/05/25(水) 19:17:13宿題じゃなくて仕事です。お願いします。
0515デフォルトの名無しさん
2005/05/25(水) 19:19:340516デフォルトの名無しさん
2005/05/25(水) 19:22:49「コンピュータ演習」の宿題だろ?
0517デフォルトの名無しさん
2005/05/25(水) 19:27:42>>508を自力で出来ないならマジで辞表を出した方が良いよ。
0518デフォルトの名無しさん
2005/05/25(水) 19:41:230519デフォルトの名無しさん
2005/05/25(水) 20:27:15仕事なら calc か excel 使え
絶対に自分で作るな
0520デフォルトの名無しさん
2005/05/25(水) 20:58:30オブジェクトファイル(*.o)とライブラリファイル(*.lib)の違いって何でしょうか?
0521デフォルトの名無しさん
2005/05/25(水) 21:06:26#include<stdio.h>
#define GET_MAX(Y,X) if(Y<X){Y=X;}
#define GET_MIN(Y,X) if(Y>X){Y=X;}
#define GET_DATA(X) GET_MAX(max,X);GET_MIN(min,X);sum+=X;
int main(int argc,char **argv){
int a[5]={1,2,3,4,5};
int max=0;
int min=0;
int arv=0;
long sum=0;
sum=max=min=a[0];
GET_DATA(a[1]);
GET_DATA(a[2]);
GET_DATA(a[3]);
GET_DATA(a[4]);
printf("最大値=%d\n",max);
printf("最小値=%d\n",min);
printf("平均値=%d\n",sum/5);
return 0;
}
こんなのでどうよ?一応動くぞ
0522デフォルトの名無しさん
2005/05/25(水) 21:57:39ゲームプログラマを目指してるならCを学べと知り合いから聞いたのでこのスレに来たんだけど
VBとの違いはなに?VBからCへ乗り換えるってキツイかな?それとC言語を使うために必要な
ツールみたいなのは>>2にある所から落とせばいいの?
0523デフォルトの名無しさん
2005/05/25(水) 22:04:19真面目に言うけど、それくらい自力で調べられないとプログラマなんてできないぞ
0524デフォルトの名無しさん
2005/05/25(水) 22:06:070525デフォルトの名無しさん
2005/05/25(水) 22:16:43GikoParo はプレーしてみた?
0526デフォルトの名無しさん
2005/05/25(水) 22:18:240527デフォルトの名無しさん
2005/05/25(水) 22:20:010528デフォルトの名無しさん
2005/05/25(水) 22:20:380529デフォルトの名無しさん
2005/05/25(水) 22:21:110530デフォルトの名無しさん
2005/05/25(水) 22:29:35サクラエディタの方がいいて書いてあったんだがどうなんだろうか
BCCってコンパイラだよね
リンクするソフトとかって必要なの?
0531デフォルトの名無しさん
2005/05/25(水) 22:35:040532デフォルトの名無しさん
2005/05/25(水) 22:46:42できなかったら
MinGW DL使用としたらこれ日本語表示にばぐがあるらしい
つーことで
Digital Mars C/C DL中〜
0533522
2005/05/25(水) 22:56:12それで、CってVBとは全くの別物なんだよね?
0534デフォルトの名無しさん
2005/05/25(水) 22:57:27「別物」とはどういうことかわからん
バージョンが違っただけで別物だが・・・
0535デフォルトの名無しさん
2005/05/25(水) 22:58:31言葉足らずでスマソ。同じような感覚でプログラミングが出来るかどうかって事
0536デフォルトの名無しさん
2005/05/25(水) 23:00:16同じような感覚でプログラミングができないのなら諦めた方がいい。
0537デフォルトの名無しさん
2005/05/25(水) 23:01:34VBで作ってもこのくらい
http://www.geocities.co.jp/SiliconValley-Oakland/7907/gikoparo.html
昔は CPU 500 [kHz] とかでシューティング作ってたんだぞ
0538デフォルトの名無しさん
2005/05/25(水) 23:08:484MHz弱もあったし速かったよね
0539@@
2005/05/25(水) 23:12:058ビットCPUでもCPU 500 [kHz]とは聞いたことないが?
500 [MHz]ならつい最近
0540デフォルトの名無しさん
2005/05/25(水) 23:16:190541デフォルトの名無しさん
2005/05/25(水) 23:18:020542デフォルトの名無しさん
2005/05/25(水) 23:20:57シューティングが動くかは知らんが500kHzなら8008だと思われ
8080以前なので(今現在)PC(と呼ばれるようなもの)ではないと思われ
0543デフォルトの名無しさん
2005/05/25(水) 23:29:07あれって直感で使うものだろう?
0544デフォルトの名無しさん
2005/05/25(水) 23:33:18Debuted in: 1980
Cost then: $299
Equivalent price today: $624.13
By 1980, you had to be living on Mars not to understand that there was an enormous
amount of money to be made in electronic and computer games. Famous toy manufacturer
Mattel decided to tap that bonanza with the release of its "Intelligent Television" console,
the Intellivision, in early 1980.
Intellivision represented another technological leap forward for home consoles
(a 16-bit GI microprocessor running at 500KHz - HOT!), and this was made clear by
its graphics. With a high resolution of 192 x 160 pixels, Intellivision was able to display
some fairly realistic graphics, which were evident in its many sports games that blew
away anything the 2600 or other consoles had. Intellivision sacrificed some speed to
get those fancy graphics, however, so for real arcade action, gamers found the 2600
to be the system of choice.
http://www.classicgaming.com/features/articles/ps2/
0545デフォルトの名無しさん
2005/05/25(水) 23:56:27渡された関数側で
*(a+1),*(a+5)
って状態で配列を使うとのかけ算するときに
(*(a+1)*(*(a+5)))
のように括弧だらけになってしまって、なんか見にくい・・・
a[1],a[5]
とかの状態に戻した方がいいのかな?
0546533
2005/05/26(木) 00:00:48質問しにきますね。ノシ
0547デフォルトの名無しさん
2005/05/26(木) 00:01:40>a[1],a[5]
>とかの状態に戻した方がいいのかな?
ポインタのままでもa[1],a[5]って形で使えたはずだが
0548デフォルトの名無しさん
2005/05/26(木) 00:03:06見やすいほうで書け
05501
2005/05/26(木) 02:22:56実行環境はUNIXやLinux、コンパイラはgccです。
実行中に中間ファイルを作るんですが、終わったらいらなくなるので。
0551デフォルトの名無しさん
2005/05/26(木) 02:28:310552デフォルトの名無しさん
2005/05/26(木) 02:30:260553デフォルトの名無しさん
2005/05/26(木) 04:00:43unlinkがシステムコールであるOSが多いのはわかるが
標準に用意されているのに、避ける理由がわからない。
ファイルアクセスだとラッパーによる実行時間の差なんて問題にならないし。
0554デフォルトの名無しさん
2005/05/26(木) 04:31:04勧めても問題ない。
0555デフォルトの名無しさん
2005/05/26(木) 04:35:350556デフォルトの名無しさん
2005/05/26(木) 05:18:14Unixスレでなら、な。
このスレでpthreadとかを扱うのは違う。
WinAPIはスレ違いと言いながら、同じ非標準を問題ないという神経が
腐っていると言われるのだよ。
0557デフォルトの名無しさん
2005/05/26(木) 07:54:120558デフォルトの名無しさん
2005/05/26(木) 09:28:11一回で宣言できませんか?
0559デフォルトの名無しさん
2005/05/26(木) 09:40:38o(obj)を集めたものがa(lib)
0560デフォルトの名無しさん
2005/05/26(木) 09:41:180561デフォルトの名無しさん
2005/05/26(木) 09:45:010562デフォルトの名無しさん
2005/05/26(木) 10:09:50//結果 d に 5.0999999999999996が入る
d には 5.1 が入って欲しいのですが、どうにも困っています。
丸め誤差とかそういう問題でも無さそうですし(分からないですが)。
そもそも今までこんな事は無かった気がします。何かアドバイス頂けると助かります。
0563デフォルトの名無しさん
2005/05/26(木) 10:31:450564デフォルトの名無しさん
2005/05/26(木) 10:32:55小数点以下何桁いるかによるけど
2桁でいいなら
全部100倍しろ
0565デフォルトの名無しさん
2005/05/26(木) 10:35:11あきらめてください。10進法の5.1を2進法で表現すると循環小数になって
しまうので、それを有限の桁数で表そうとすると打ち切りによる誤差が生じ
ます。だから
double d = 5.1;
とやっても同じ結果になりませんか?
0566デフォルトの名無しさん
2005/05/26(木) 10:42:13http://pcweb.mycom.co.jp/news/2004/06/03/008.html
http://ja.wikipedia.org/wiki/POSIX
0567562
2005/05/26(木) 11:02:19レスありがとうございます。
100倍で解決した上、おかげで問題点が良く分かりました。
元が文字列だったので、変な思いこみが有ったみたいです。
0568デフォルトの名無しさん
2005/05/26(木) 11:08:19文字列の段階で小数点をずらす事?
0569デフォルトの名無しさん
2005/05/26(木) 11:31:42と書いたコードに
xxx/yyy(タブ)zzz
を入力したら出力が
xxx = aaa/bbb
yyy = 妃唇(文字化け)
zzz = (無し)
になってしまいます。
スラッシュをエスケープしたらいいのかと思い、
\を直前につけたら
今度はコンパイルでwarningがでました。
一応そのまま実行したら同じ結果でした。
どうしたらいいのでしょうか?
よろしくお願いします。
0570デフォルトの名無しさん
2005/05/26(木) 11:42:17scanfで空白文字以外を区切りにしたい場合は、
%sのかわりに、%[]を使います。
この場合、%[^/] かな
0571デフォルトの名無しさん
2005/05/26(木) 11:44:50その比較回数の理論値を求めよって問題で、色々調べたら、n個の要素だったら、
○×nlognだって書いてあったんだけど、何でそうなるか分からないし、
○の具体的な求め方も分からない。誰か教えてください!!
0572デフォルトの名無しさん
2005/05/26(木) 11:50:26scanf("%s%[^/]%s\t%s\n",&aaa,&bbb,&ccc);
こうしたら
xxx = aaa/bbb
yyy = ccc
zzz =
になりました。。。
さっきよりましだけど(´・ω・`)
むむむ・・・。
0573デフォルトの名無しさん
2005/05/26(木) 11:54:090574デフォルトの名無しさん
2005/05/26(木) 12:00:51scanf("%[^/]%s\t%s\n",&aaa,&bbb,&ccc);
こうだよ。
意味わかってないのか。
どっかで説明読んで理解してくれ
0575デフォルトの名無しさん
2005/05/26(木) 12:07:33回答ありがとうございます。
ぐぐっても簡単なサイトばっかり引っかかってでてきませんでした。
まあ、探し方が悪いのかもしれませんが。
だからこそ最終手段のここに来たわけで。。。
xxx = aaa
yyy = /bbb
zzz = ccc
になりました。まだいろいろ試してみます。。。
0576デフォルトの名無しさん
2005/05/26(木) 12:11:510577デフォルトの名無しさん
2005/05/26(木) 12:13:39意味分かりまた。
んでyyyからスラッシュとるしかないかな・・・。
それともスマートな方法があるのだろうか?
0578デフォルトの名無しさん
2005/05/26(木) 12:13:55配列の値を関数2から関数1へ渡したいんだけど、配列の個数は関数2内で決めたい
関数1へ配列を渡すために関数2の引数を配列にしたんだけど
配列の個数を関数2できめられるんでしょうか?
0579デフォルトの名無しさん
2005/05/26(木) 12:15:34リロードする前に577を書き込んでしまいました。
%[^/]/%s
でやったらスマートにできました!!
ありがとうございます!!
0580デフォルトの名無しさん
2005/05/26(木) 12:23:51ぐぐる前に scanf() のマニュアル読もうよ…
0581デフォルトの名無しさん
2005/05/26(木) 12:38:13どういうことをやりたいのか、コードで書いたほうが早いと思う。
0582デフォルトの名無しさん
2005/05/26(木) 12:44:29mallocしてポインタで返せ。
0583デフォルトの名無しさん
2005/05/26(木) 12:53:48関数1の配列を渡して、関数2で配列の値を設定するんじゃないの?
0584デフォルトの名無しさん
2005/05/26(木) 12:54:43方法1 >>582のように関数2でmallocしてそのポインタを返す
・利点:関数1がサイズを気にする必要がない
・欠点:関数2の内部でmallocするためfreeを呼び出すのを忘れがちになりやすい
方法2 関数1でサイズとともに渡して足りない場合はエラー、もしくは途中まで処理
・利点:関数2がメモリ管理をする必要がない、関数1がスタックで確保した配列も扱える
・欠点:サイズが正しく渡ってないとエラーの原因に、呼び出す側がメモリ管理する必要がある
0585578
2005/05/26(木) 13:07:16switch (b){
case 1:
a[0]=1;
a[1]=2;
break;
case 2:
a[0]=3;
break;
}
}
void main(){
int a[2], b;
damepo(a, b);
}
こんな感じでbの値によって配列の個数が異なるのでmainで配列の個数を決めないで
damepoで配列の個数を決めたいです
配列は戻り値としてmainに戻るようにしたいです
0586578
2005/05/26(木) 13:12:42mallocで定義する方法しかないんでしょうか?
freeを忘れてしまいそうだ・・・
>>585でうかつにも半角スペースを使ってしまったのでcaseより下が左に寄ってしまいますた
0587デフォルトの名無しさん
2005/05/26(木) 16:15:34それでコンパイラってどこで落とせばいいんですか?>>2のサイト行ったけど英語でよく分かりませんでした。
0588デフォルトの名無しさん
2005/05/26(木) 16:24:41諦めろ。さもなくば初心者スレに逝ってこい。
0589デフォルトの名無しさん
2005/05/26(木) 16:49:570590デフォルトの名無しさん
2005/05/26(木) 16:57:21タダで使えるBorland C++ Part4
http://pc8.2ch.net/test/read.cgi/tech/1091066805/
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
0591デフォルトの名無しさん
2005/05/26(木) 17:09:03(関数を作成し、関数gets〔標準入力から文字列を取得する関数〕
を使用する。)
初歩的な質問で悪いですが、どなたかお願いします。
0592デフォルトの名無しさん
2005/05/26(木) 17:12:02それ、宿題じゃないだろうな?
0593デフォルトの名無しさん
2005/05/26(木) 17:14:12宿題じゃなくて仕事です。お願いします。
0594デフォルトの名無しさん
2005/05/26(木) 17:22:340595デフォルトの名無しさん
2005/05/26(木) 17:25:31>>514
0596デフォルトの名無しさん
2005/05/26(木) 17:29:00のp->keyの所がエラーになります。
data[5]のkeyの値を参照したいときはどうすればよいのでしょうか。
data[5]->keyでもうまくいきませんでした。誰か助けてください。
typedef struct profile Profile;
typedef Profile** Data;
typedef Profile Item;
struct profile{
Profile *next;
char* key;
}
int add(Data data, Item item){
Profile* p = data[5];
if(strcmp(p->key,item.key)==0)return0;
|省略}
int main(void){
Profile *list[N]={NULL}, dam;
dam.key="wada";
if(add(list,dam)==0)printf("wow");
|省略}
0598デフォルトの名無しさん
2005/05/26(木) 17:40:16いずれにせよ、丸投げしてやって貰っても身に付くとは思えないが。
0599デフォルトの名無しさん
2005/05/26(木) 17:42:470600デフォルトの名無しさん
2005/05/26(木) 18:25:35初心者スレへどうぞ。
0601デフォルトの名無しさん
2005/05/26(木) 18:26:19どううまくいかなかったかが
書けるくらいにはやってから来てちょうだい
0602デフォルトの名無しさん
2005/05/26(木) 18:28:15エラーメッセージは?
#コンパイルエラーじゃなくてランタイムエラーかな。それなら恐らくメモリ確保ミス。
0603デフォルトの名無しさん
2005/05/26(木) 18:28:570604591
2005/05/26(木) 19:07:01#include <stdio.h>
#include <stdlib.h>
#define MAX_DATA 5
#define MAXLINE 256
void kansu(int data[MAX_DATA]);
int main(void);
void kansu(int data[MAX_DATA){
int i,j,tmp,data[MAX_DATA];
printf("並び替える前\n");
for(i=0;i<MAX_DATA;i++){
printf("data[%d]=%d\n",i,data[i]);}
for(i=0;i<MAX_DATA-1;i++){
for(j=i+1;j<MAX_DATA;j++){
if(data[i]>data[j]){
tmp=data[i];
data[i]=data[j];
data[j]=tmp;}}}
printf("並び替えた後\n");
for(i=0;i<MAX_DATA;i++){
printf("data[%d]=%d\n",i,data[i]);}
int main(void){
char buffer[256];
int data[MAX_DATA];
printf("整数を入力してください\n");
gets(buffer);
data[MAX_DATA]=atoi(buffer);
kansu(MAX_DATA);
return(0);}
こんなかんじになったのですがダメです。。。
入力した整数を配列に入れることがわかりません。
0605デフォルトの名無しさん
2005/05/26(木) 19:11:47んじゃ、入力部だけ。
for (i = 0; i < MAX_DATA; ++i) {
printf("整数を入力してください\n");
gets(buffer);
data[i]=atoi(buffer);
}
つーか、基本が判ってないようだから、続けるなら初心者スレにでも逝ってくれ。
0606デフォルトの名無しさん
2005/05/26(木) 19:12:150607デフォルトの名無しさん
2005/05/26(木) 19:21:08ソースを見るだけでも結構勉強になるぞ
0608デフォルトの名無しさん
2005/05/26(木) 19:31:57y=(int)sqrt(x);yはint型
double型変数zにy番目の素数を代入し、次の計算をします。k=y-(int)sqrt(ゼット);kはint型
int型変数に115番目の素数、int型変数にiに116番目の素数を代入し、次の計算をします。
k/=(i-j);この結果が答えになります。
こんな問題を出されたので、解いたら"3"になったのですが、
答えは2だそうです。なぜですか?
0609608
2005/05/26(木) 19:32:40#include <math.h>
#define NUM 1500
void sosuu(int *);
void main(void)
{
double x,z;
int a[300],y,k,j,i;
sosuu(a);
x=a[237];
y=(int)sqrt(x);
z=y;
k=y-(int)sqrt(z);
j=a[115];
i=a[116];
k/=(i-j);
printf("k=%d\n",k);
}
0610デフォルトの名無しさん
2005/05/26(木) 19:33:39{
int prime[NUM+1],j,k,i;
for(j=2;j<=NUM;j++){
prime[j]=1;
}
for(j=2;j<=NUM;j++){
if(prime[j]==1){
for(k=2*j;k<=NUM;k++){
if(k%j==0){
prime[k]=0;
}
}
}
}
i=1;
for(j=2;j<=NUM;j++){
if(prime[j]==1){
*(a+i)=j;
i++;
}
}
}
上記のプログラムを作って求めました。
どこがおかしいのかわかりません
0611ログの人
2005/05/26(木) 21:48:13削除とかはしませんがよろしく。
0612デフォルトの名無しさん
2005/05/26(木) 22:13:24今まで乙
0613デフォルトの名無しさん
2005/05/26(木) 22:37:05何が間違っているのかわからないので、出題者に模範解答を示してもらってください。
関係ないけど、sosuu() はこう書いたほうが短いし速い。
void sosuu(int *a)
{
size_t i, j, num = 1;
for(i = 2; num < 300; i++)
{
for(j = 0; j < num; j++)
if(i % a[j] == 0)
break;
if(j == num)
a[num++] = i;
}
}
0614デフォルトの名無しさん
2005/05/26(木) 22:39:08for(j = 1; j < num; j++) だったorz
0615デフォルトの名無しさん
2005/05/26(木) 22:48:02本に載ってるエストラテネスのふるい(だっけ?)をそのまま書いて、
プリント部分を配列への代入に書き換えただけなので冗長になってしまいました。
参考になりました。件についてもそうしてみます。
ありがとうございました。
0616デフォルトの名無しさん
2005/05/26(木) 23:07:12日本語を表示するにはどうやったらできますか?
printf("日本語\n");
ではうまく出来ないようです。
日本語を表示できる標準関数を教えてください。
環境は BCC32 5.5.1 です。
0617デフォルトの名無しさん
2005/05/26(木) 23:07:43ノートパソコンがDX3DやDriectX対応してなくても 3D使える?
HSPでは対応してなくても表示できたんだが・・・・
できるんだったら移行しよう。
0618デフォルトの名無しさん
2005/05/26(木) 23:14:12>>616
そのBCCは英語版なの?
実行している環境は日本語のWindowsなの?
printf("日本語\n");
ってやったら、どううまくできないの?
0619デフォルトの名無しさん
2005/05/26(木) 23:18:08使える。
0620596
2005/05/26(木) 23:21:45遅くなってすいません。
エラーメッセージは出ないで,急に強制終了(送信するしないの画面の奴)が
出て終わりです。それがp->を使うところで発生します。
エラーのでないエラーはレベルが高くて分かりません。
ポインタのポインタをポインタに代入しているところがいけないのでしょうか?
わけわかめです,おねがいします。
0621デフォルトの名無しさん
2005/05/26(木) 23:31:08まずは、そのpのアドレスを表示させてみたら。
&data[0-5]とかも
0622デフォルトの名無しさん
2005/05/26(木) 23:35:37そういえば、 Profile *list[N] は Profile list[N]でないの?
0623デフォルトの名無しさん
2005/05/26(木) 23:46:06よく見てないけど、このあたり?
608>double型変数zにy番目の素数を代入し、
609>z=y;
0624デフォルトの名無しさん
2005/05/26(木) 23:51:46おおっ!
z=a[y];にしたらちゃんと2になりました。
ありがとうございます。
問題文ちゃんと読んでませんでした;;
0625デフォルトの名無しさん
2005/05/26(木) 23:53:000626596
2005/05/27(金) 00:27:33その通りやってDataの定義をあわせて買えたら
Profile* p = data[5]; で文句言われました。
'initializing' : 互換性のない型が含まれています
と言われました。*の数を買えると余計エラー出るし
0627デフォルトの名無しさん
2005/05/27(金) 00:31:54ちげーよ
そのポインタのさしてる実体はどこで確保してんのかってことだよ
0628デフォルトの名無しさん
2005/05/27(金) 00:36:400629キムタク
2005/05/27(金) 00:36:450630デフォルトの名無しさん
2005/05/27(金) 00:37:38ちょっ まてよ!
0631デフォルトの名無しさん
2005/05/27(金) 01:00:26それホリだろ
0632596
2005/05/27(金) 01:07:10確保って何?
とっておくの?
0633デフォルトの名無しさん
2005/05/27(金) 04:12:010634デフォルトの名無しさん
2005/05/27(金) 04:18:110635デフォルトの名無しさん
2005/05/27(金) 07:16:240636デフォルトの名無しさん
2005/05/27(金) 07:50:37∧_∧
( ´∀`) おまえ
/, つ おつ
(_(_, )
しし'
0637デフォルトの名無しさん
2005/05/27(金) 09:27:46省略した部分にあるのか知らんが、
Profile *list[N]
これは、N個のProfileへのポインタを確保したわけだろ。
で、それをadd()に渡してるわけだ。
で、add()でいきなりProfile* p = data[5] とやってるが、
このpはProfileへのポインタではあるが、それが指しているはずの
Profile自身はどこにも確保(定義)されてないでしょ
で、0で初期化しているようだからp->keyはNULLだから使ったとたんにエラー
0638デフォルトの名無しさん
2005/05/27(金) 10:16:50紙コップのジュース自販機で 紙コップが出ないのに
ジュースを入れちゃったのか
0639デフォルトの名無しさん
2005/05/27(金) 10:20:51そんであとでむかつく。
0640デフォルトの名無しさん
2005/05/27(金) 10:22:44#どうやら豆を挽くことができなかったらしい。
0641デフォルトの名無しさん
2005/05/27(金) 10:22:550642デフォルトの名無しさん
2005/05/27(金) 11:08:49自分で何やってるか解らないまま
「コンパイルエラーを取るための修正」を繰り返してたって
いつまで経っても解決しない。
ポインタの基本からやり直した方がいいんじゃ…?
0643デフォルトの名無しさん
2005/05/27(金) 11:39:27紙コップは出たがにジュースの原液が出てこなかったというのは体験したことある
中身はただの水・・・orz
0644デフォルトの名無しさん
2005/05/27(金) 14:35:22int a = 0;
void *p = data;
*(int*)p = a;
これでvoidポインタpが差すアドレスを進めたいのですが、
*(int*)p++ = a;
をやると怒られます・・・「'void *' サイズが不明です」
次の行で
p = (int*)p + 1;
をやればいいのですが、もっとスマートな書き方はありますか?
0645デフォルトの名無しさん
2005/05/27(金) 15:22:12pを最初からint*で宣言すればいいじゃないカ。
0646デフォルトの名無しさん
2005/05/27(金) 15:58:240647デフォルトの名無しさん
2005/05/27(金) 16:03:590648デフォルトの名無しさん
2005/05/27(金) 16:05:350649デフォルトの名無しさん
2005/05/27(金) 16:10:370650デフォルトの名無しさん
2005/05/27(金) 16:11:52char配列とかvoidポインタに拘るのはなんか意味あるんかい
0651デフォルトの名無しさん
2005/05/27(金) 16:14:22http://www.kouno.jp/home/c_faq/c14.html#7
0652デフォルトの名無しさん
2005/05/27(金) 16:18:37ありがとうございます。FAQにあったのですね。見落としていました。
いまmanでpowを調べましたが、整数の巾乗関数はないんですね。
自分で作るか…
0653644
2005/05/27(金) 16:42:22どうしてもvoid*がいいんです
(アプリ間で構造体のデータをクリップボード経由で転送したいんです)
>>646
'++'には左辺値が必要ですと言われました・・・(VC++.NET)
0654644
2005/05/27(金) 16:44:11メンバにmallocで確保したアドレスポインタもあるんで、
その実体もろとも転送する必要があり・・・
0655デフォルトの名無しさん
2005/05/27(金) 17:03:55.cppだとエラーでて、.cだと通るな・・・
VC++.net2003
0656デフォルトの名無しさん
2005/05/27(金) 17:07:520657デフォルトの名無しさん
2005/05/27(金) 17:10:26パフォーマンス落ちそうな気もするな。
union {
} p;
0658657
2005/05/27(金) 17:11:000659デフォルトの名無しさん
2005/05/27(金) 17:17:54*reinterpret_cast<int *&>(p)++ = a;
0660デフォルトの名無しさん
2005/05/27(金) 17:20:18int a = 0;
union {
void *void_p;
int *int_p;
char *char_p;
} p;
p.void_p = data;
*p.int_p++ = a;
0661デフォルトの名無しさん
2005/05/27(金) 17:51:48-pedantic付けると怒られる
0662デフォルトの名無しさん
2005/05/27(金) 18:35:59cast-as-lvalue という gcc 拡張で、gcc 4.0 で完全に廃止されました。
0663デフォルトの名無しさん
2005/05/27(金) 18:39:470664デフォルトの名無しさん
2005/05/27(金) 19:12:30struct P {
int a, b;
};
struct P p;
int aa, bb;
てな感じで,
fread(&p, sizeof(p), 1, fp);
と
fread(&a, sizeof(a), 1, fp);
fread(&b, sizeof(b), 1, fp);
では値がずれてしまうんですが,どういうことでしょうか?
たぶん,構造体の方が1バイト余計に読み込んでるような挙動なんですが.
0665デフォルトの名無しさん
2005/05/27(金) 19:19:02あと例は正確かい?
アラインメントだったりしないよね
0666デフォルトの名無しさん
2005/05/27(金) 19:24:50それでしたさんくす!!
0667デフォルトの名無しさん
2005/05/27(金) 19:58:02どうやるの?
0668デフォルトの名無しさん
2005/05/27(金) 20:05:210669デフォルトの名無しさん
2005/05/27(金) 20:19:56線が引けりゃなんとでもなるだろ。
0670デフォルトの名無しさん
2005/05/27(金) 20:46:54キャスト結果は左辺値ではない
よって副作用のある演算子の対象とできない
一部の処理系が非標準拡張として認めている場合がある
スレ違いだが C++ ではこの限りでない場合がある
0671デフォルトの名無しさん
2005/05/27(金) 23:36:49○○+
○++
+++
と表示させたいのですができません。
for文を使用して記述しているのですが、
ヒントとか模範解答とかエロい人教えて!
初歩的な質問で申し訳ない。
0672デフォルトの名無しさん
2005/05/27(金) 23:38:493以外入力したらどうなるのか言えヴォケ。
0673デフォルトの名無しさん
2005/05/27(金) 23:40:32void main()
{
int a;
for(;;){
printf("3を入力してください:");
scanf("%d", &a);
if(a == 3) break;
printf("エラー: 3ではありません\n");
}
printf("○○+\n○++\n+++");
}
0674デフォルトの名無しさん
2005/05/27(金) 23:42:22スマソ
例えば4を入力すれば
○○○+
○○++
○+++
++++
と言う具合に増えていきます。
scanfで値を入力し、for文でこれを表現させたいんです。
0675デフォルトの名無しさん
2005/05/28(土) 00:13:51>>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
0676デフォルトの名無しさん
2005/05/28(土) 00:19:21スマンorz
自力で頑張ってみる
0677デフォルトの名無しさん
2005/05/28(土) 00:24:56void main()
{
int Num;
int idx,jdx;
printf("数字を入力してください");
scanf("%d", &Num);
for(idx = Num;0 < idx; idx--)
{
for(jdx = idx;1 < jdx; jdx--)
{
printf("○");
}
for(jdx = idx;jdx <= Num; jdx++)
{
printf("+");
}
printf("\n");
}
}
0678デフォルトの名無しさん
2005/05/28(土) 00:26:14そして今、このネット時代にPERLを使ってCGI作成しようと思った。
しかし、難しすぎる。
というか、概念は理解できるが、表現がすごくわかりにくい。
Basicなら、
10 input a
20 input b
30 c=a+b
40 print C
…と、素直にスラスラ書けるのだが、
なんでパールとかは文字変数も数値変数も$xで表現されるのだろう?
ループ文にしたって、
10 for i=1 to 20
20 next i
…と簡単に書けるし、見ただけで文章としての意味も伝わる。
なのに、なんでパールはループの最後もif文の最後も}中カッコでしめないといけないの?
などなど、新しい言語を勉強している今、Basicのことと混同しちゃって困っています。
今にして思えば、逆に、Basicなんて覚えなきゃ良かったんだよね。
何がイヤかって、
~とか^とか_とか、Basicには無かった!
しかも、パールでは、;で文の終わりを示さないといけないクセに、
なんでループの中で
for($i=0;$i<=$#lines;$i++)
;が二回も使われるんだぁ?
とにかく、俺が一番好きなのは昔のBasicだ!
VBとかもダメ。なにが『ビジュアル』だよ!
全然意味がわからんし…(x_x)
0679デフォルトの名無しさん
2005/05/28(土) 00:28:360680デフォルトの名無しさん
2005/05/28(土) 00:30:07$は許せるよ(^_-)-☆
0681デフォルトの名無しさん
2005/05/28(土) 00:30:35ってか・・・本当にBasicを操っていたのか疑問だね。
0682デフォルトの名無しさん
2005/05/28(土) 00:30:470684デフォルトの名無しさん
2005/05/28(土) 00:34:26マジすかw
マルチポストして得するような内容でもないのに
0685デフォルトの名無しさん
2005/05/28(土) 00:59:54あんたホントに技術者かい?
0686デフォルトの名無しさん
2005/05/28(土) 01:13:030687デフォルトの名無しさん
2005/05/28(土) 01:14:000688デフォルトの名無しさん
2005/05/28(土) 01:14:570689デフォルトの名無しさん
2005/05/28(土) 01:17:09表示する文字列に'%'が含まれているなどするとばぐるので
puts()つかったほうが、無難
0690デフォルトの名無しさん
2005/05/28(土) 01:17:51printf(str);
とやるからわるいのであって
printf("%s", str);
とかやればいいじゃないか
0691デフォルトの名無しさん
2005/05/28(土) 01:19:20より遅い
puts(str);
の実装ってどんなだよ。
0692デフォルトの名無しさん
2005/05/28(土) 01:23:29未規定
0693デフォルトの名無しさん
2005/05/28(土) 01:27:41printf("%s\n", str);
が
puts(str);
になる実装もあったと過去ログで見た記憶があるが?
0694デフォルトの名無しさん
2005/05/28(土) 01:33:340695デフォルトの名無しさん
2005/05/28(土) 01:37:58してたらどうなる
そういうことができないCはもはやCではないと俺は思う
0696デフォルトの名無しさん
2005/05/28(土) 01:42:170697デフォルトの名無しさん
2005/05/28(土) 01:56:04gccだっけか?
試してみたら、-O1オプション付けてコンパイルしたら
printf("%s\n","giko");
とか
printf("giko\n");
がpus呼ぶようにコンパイルされた。
0698デフォルトの名無しさん
2005/05/28(土) 01:57:15gccがそういう最適化をするよ。
0699デフォルトの名無しさん
2005/05/28(土) 02:02:08いやらCコンパイラだな
0700デフォルトの名無しさん
2005/05/28(土) 02:23:45パラマうんと元気になってね
みたいでなんかむかついた。
0701デフォルトの名無しさん
2005/05/28(土) 03:40:420702デフォルトの名無しさん
2005/05/28(土) 05:12:03半角の '¥' が入力できません!
改行がしたくてエスケープ文字の '¥n' や '¥r' が使いたいのですが
どうやっても入力できないのです。
色々やってみたのですがどうしても '\' みたいになってしまいます。
誰か教えてください!
0703デフォルトの名無しさん
2005/05/28(土) 05:14:060704デフォルトの名無しさん
2005/05/28(土) 05:31:51??/ で代用しとけ。
0705704
2005/05/28(土) 05:37:16そういうアレじゃないか・・・
0706デフォルトの名無しさん
2005/05/28(土) 06:38:45なら気にするな。しばらくCやってれば同じ字に見えるようになる。
まあ活字体と筆記体の違いみたいなもんだ。
0707デフォルトの名無しさん
2005/05/28(土) 07:52:11半角の¥は日本語のフォントだけで、欧米のフォントでは\の半角になる。
それに合わせて一部の日本語フォントでも半角の¥ではなく半角の\を表示するものもある。
0708デフォルトの名無しさん
2005/05/28(土) 07:59:030709デフォルトの名無しさん
2005/05/28(土) 08:15:08なぜ、\ ではいけないと思ったのかをまず説明しろ
話はそれからだ
0710デフォルトの名無しさん
2005/05/28(土) 08:36:170711デフォルトの名無しさん
2005/05/28(土) 08:38:52は翻訳不能
0712デフォルトの名無しさん
2005/05/28(土) 08:59:09>一部の日本語フォントでも半角の¥ではなく半角の\を表示するものもある。
なにその阿呆なフォント…
/* つか、5/12 が¥なのに 7/14 がチルダ、っつーのが蔓延してる状況じゃ
今更どーでもいい事かも知らんが */
0713デフォルトの名無しさん
2005/05/28(土) 09:01:52だから \ がエスケープ文字だって言ってるだろう。
0714デフォルトの名無しさん
2005/05/28(土) 09:05:130715デフォルトの名無しさん
2005/05/28(土) 09:06:54Adobe Reader付属の小塚とか
0716デフォルトの名無しさん
2005/05/28(土) 09:10:33何言ってるの、こいつ?
0717デフォルトの名無しさん
2005/05/28(土) 11:06:58いやお前が何言ってるか解らん。
0718デフォルトの名無しさん
2005/05/28(土) 13:06:45俺も712の言ってる事がわからん。
0719デフォルトの名無しさん
2005/05/28(土) 13:11:28小数点以下が出てきたり「切り捨て」を行ったりはしていない
定数式 5/12 は定数式 0 と完全に等価なだけだ
0720デフォルトの名無しさん
2005/05/28(土) 13:12:58整数除算は概念としてそこに存在するものだろ。
実装なんかどうでもよろしい。
0721デフォルトの名無しさん
2005/05/28(土) 13:13:100722デフォルトの名無しさん
2005/05/28(土) 13:24:16つhttp://pc8.2ch.net/test/read.cgi/tech/1115386557/
0723デフォルトの名無しさん
2005/05/28(土) 13:26:220724デフォルトの名無しさん
2005/05/28(土) 13:34:23C での表記法を知らないのもかなり痛いが、それでもせめて数学の表記で書けや・・・
0725デフォルトの名無しさん
2005/05/28(土) 13:45:24折角頭があるんだから生きてるうちに使おうや。
既に腐り落ちているなら別だが。
0726デフォルトの名無しさん
2005/05/28(土) 14:13:26sizeof('A')=4?
0727デフォルトの名無しさん
2005/05/28(土) 14:15:594バイトという決まりはない
sizeof(int) と等しくなる
LSIC は sizeof(char) を返したりする。論外だな。
0728デフォルトの名無しさん
2005/05/28(土) 14:16:37ファイルから、下記のデータを読み込んで、
A
A
B
B
A
A
B
B
順番を、
A
B
A
B
A
B
A
B
に、するにはどうすればいいのでしょうか?
ソートを使ってやるところまでは分かったんですが、
うまくいきません。
よろしくお願いします。
0729デフォルトの名無しさん
2005/05/28(土) 14:18:30どういう法則なんだよ?
口で説明してみぃ
0730デフォルトの名無しさん
2005/05/28(土) 14:24:50かな?
0731デフォルトの名無しさん
2005/05/28(土) 14:27:090732デフォルトの名無しさん
2005/05/28(土) 15:10:33どんな業界?
0733デフォルトの名無しさん
2005/05/28(土) 15:20:14そういうおまえも 724 を読むまで(ry
0734デフォルトの名無しさん
2005/05/28(土) 15:58:51あげ
0735デフォルトの名無しさん
2005/05/28(土) 16:16:39関数にOutputになる配列の引数を渡す際はその長さも同時に渡すべきですか?
void func( char *Output, int Output_size ){
if( data_len > Output_size )
return;
memcpy( Output, data, data_len );
}
配列を超えて壊す可能性があるからチェックというのはわかるんですが、
渡している長さも配列の本質的な長さではないし、
何か冗長な気がするので・・皆さんの意見をお聞きしたいです。
0736デフォルトの名無しさん
2005/05/28(土) 16:18:08そうするのがCでは一般的なんだからそれに従うべきだろう。
0737デフォルトの名無しさん
2005/05/28(土) 16:21:02はぁ?
0738デフォルトの名無しさん
2005/05/28(土) 16:24:50関数の側では配列のサイズは知りようがない。
呼び出し側では知っている可能性がある。
だからサイズを知りたければ呼び出しがわに教えて貰うしかないんだよ。
0739デフォルトの名無しさん
2005/05/28(土) 16:25:43ウソかもしれないってことだろ?
これはしょうがない。Cの配列はそういう意味で自己記述的じゃないから。
0740デフォルトの名無しさん
2005/05/28(土) 16:29:35なんだそりゃ
0741デフォルトの名無しさん
2005/05/28(土) 16:31:13Javaなどの言語では配列自身が長さを知っている
0742デフォルトの名無しさん
2005/05/28(土) 16:34:53char (*p)[SIZE] なら1つの定義体がサイズ情報まで持っていたりするし
一般には Java だけで Java の処理系が作れるとき、Java は自己記述可能であるという
0743デフォルトの名無しさん
2005/05/28(土) 16:36:02int array[32];
sizeof array / sizeof array[0]
まあ、関数の引数として渡した先まで伝わらないんだがな。
0744デフォルトの名無しさん
2005/05/28(土) 16:38:19> であるという
誰も主語として「Javaが」とか言ってないわけだが。
中途半端な知識を振り回さずに、普通に日本語として解釈してくれや。
0745デフォルトの名無しさん
2005/05/28(土) 16:44:00char (*p)[32]
>>744
C の配列だけで C の配列の処理系が作れるとき、C の配列は自己記述可能であるという
0746デフォルトの名無しさん
2005/05/28(土) 16:45:56んで、それは元の質問のような場面で使えるのか?
0747デフォルトの名無しさん
2005/05/28(土) 16:48:02いやだから、誰も自己記述可能な「言語」の話なんかしてないんだっての。
言語について自己記述可能という用語が使われるのであれば、そういう
意味になるが、今回のはただの比喩として、より広い意味の一般的な
用語として用いてるわけ。
0748デフォルトの名無しさん
2005/05/28(土) 16:51:41Javaの配列は自分についての情報を保有/公開しているだけで、記述しているわけではない。
そういう自分で自分の情報を公開していることを表すもっと別な言葉があったはずだが忘れた。
0749デフォルトの名無しさん
2005/05/28(土) 16:52:580750デフォルトの名無しさん
2005/05/28(土) 16:54:37C スレでは少なくとも C 使いには通じる言い方を工夫したほうがいいんじゃないか?
0751デフォルトの名無しさん
2005/05/28(土) 18:27:00どこか参考になるサイトないですか
0752デフォルトの名無しさん
2005/05/28(土) 18:44:380753デフォルトの名無しさん
2005/05/28(土) 20:54:57コンパイルされたらアセンブリになるんだから同じじゃないの?
とあほな隣の上司が言ってたのですが
0754デフォルトの名無しさん
2005/05/28(土) 20:57:07あほな隣の上司が言った範囲を明確にしろよ。
どこまでがあほな隣の上司の発言で、どこがお前の意見(質問)なんだ?
0755デフォルトの名無しさん
2005/05/28(土) 21:17:39辞めちまえ。
0756デフォルトの名無しさん
2005/05/28(土) 21:19:22技術面での師匠か、事務局か、上司はタイプにより使い分けろ
0757デフォルトの名無しさん
2005/05/28(土) 21:29:020758デフォルトの名無しさん
2005/05/28(土) 21:30:35そーゆー発言に使う用語は「常識」じゃなく「定説」だろ
0759デフォルトの名無しさん
2005/05/28(土) 21:52:20至言ですな、パクります
0760デフォルトの名無しさん
2005/05/28(土) 21:57:33typedef void (FUNC)(TAAA *strp);
struct tagAAA {
FUNC *funcp
TAAA *strp;
};
----
こういう書き方に何か問題はあるでしょうか
0761デフォルトの名無しさん
2005/05/28(土) 22:03:16何か問題があったのですか?
0762デフォルトの名無しさん
2005/05/28(土) 22:06:48>761
問題あるだろ→;
0763デフォルトの名無しさん
2005/05/28(土) 22:10:460764デフォルトの名無しさん
2005/05/28(土) 22:12:47----
typedef struct tagAAA TAAA;
typedef void (FUNC)(TAAA *strp);
struct tagAAA {
FUNC *funcp;
TAAA *strp;
};
----
セミコロン忘れてた。
あるコンパイラでは通らないとか
あまりおすすめできないとか
どんな細かいことでもいいです。
よろしくお願いします。
0765デフォルトの名無しさん
2005/05/28(土) 22:25:16hage hige huge hege hoge foo bar を使え
0766デフォルトの名無しさん
2005/05/28(土) 22:37:41問題ない。
0767デフォルトの名無しさん
2005/05/28(土) 22:51:560769デフォルトの名無しさん
2005/05/28(土) 23:05:30#include <stdio.h>
typedef struct node{
int a;
int b;
}node;
int main(void)
{
node *new_node;
new_node.a = 9;
new_node.b = 8;
printf("%d,%d", new_node.a, new_node.a);
return 0;
}
とすると、
エラー「12,13,14行目:. または .* の左側に構造体が必要(関数 main )」
となってしまいます。どう使い方が間違っているか、教えてください。
0770769
2005/05/28(土) 23:06:44printfの二つ目の%dにはnew_node.bを代入です。間違えました。
0771デフォルトの名無しさん
2005/05/28(土) 23:07:20(*new_node).a か new_node->a が正しい
0772デフォルトの名無しさん
2005/05/28(土) 23:08:00実体に汁
0773デフォルトの名無しさん
2005/05/28(土) 23:09:29実体n(ry
0774デフォルトの名無しさん
2005/05/28(土) 23:10:31まず言葉の使い方を正しく覚えること。
関数に値を渡すことを代入とは呼ばない。
他の人間とコミュニケーションをとるときに言葉の使い方が違ってると思わぬ落とし穴にはまる。
771のように訂正しても、new_node が初期化されていないのでこける。
なぜそこでポインタを使ったのか。
ポインタとは何なのかから勉強する必要があるかもしれない。
0776デフォルトの名無しさん
2005/05/28(土) 23:13:21printf("%d,%d", new_node.a, new_node.b);
0777フィーバー
2005/05/28(土) 23:15:550778769
2005/05/28(土) 23:19:09>>774
実際に作っているプログラムでは、ポインタを使わなければ
ならないんです。だから、敢えて*new_nodeと宣言しました。
node *new_nodeと宣言したときは、node new_nodeと同じようには
いかないんですね。(構造体のポインタをさしているから当たり前ですか…)
あと、new_node->aはポインタを返すと勘違いしていました。
みなさん丁寧にありがとうございます。
0779デフォルトの名無しさん
2005/05/28(土) 23:25:57ポインタ変数はただ宣言すれば使えるものではなく、
malloc()とか&演算子とかでポインタの指す先を用意してやらないと駄目だからね。
0780デフォルトの名無しさん
2005/05/29(日) 01:58:47fgetsで指定した範囲を超える部分が、2回目に呼び出したfgetsに強制的に渡されてしまいます。
文字列str1を調べて、改行コードが削られた場合に、文字が多すぎると判断することにして、
whileループでやり直すようにしてみたのですが、実行したところ、
溢れた文字列を、while文中のfgetsに渡してしまい、一回目の入力をやり直すことが出来ませんでした。
str1[]の要素数を大きくする以外に、何か対策は無いでしょうか。
char str1[8],str2[8];
printf("1回目の入力です。\n半角で7文字以上入力すると、2回目の入力が出来ません。\n");
fgets(str1,8,stdin);
printf("%s",str1);
printf("2回目の入力です。\n");
fgets(str2,8,stdin);
printf("%s",str2);
0781デフォルトの名無しさん
2005/05/29(日) 02:34:09やはり>>2にあるのがいいんでしょうか?
0782デフォルトの名無しさん
2005/05/29(日) 02:35:31フリーと使いやすいは互いに背反。
0783781
2005/05/29(日) 02:39:44確かにそうですね・・・
なら手当たり次第に落として自分にあったのを探してみます
0784デフォルトの名無しさん
2005/05/29(日) 03:05:09要するに、その時点でストリームバッファにたまっている文字列を
捨ててしまいたい訳だな。
実装によっては、読み込みの前にfflush()を呼べば済む場合もある。
ただし、入力系に対するfflush()の機能については、標準では
規定されておらず、実装系依存だったかもしれない。
0785デフォルトの名無しさん
2005/05/29(日) 04:47:410786デフォルトの名無しさん
2005/05/29(日) 05:20:21普通に捨てれば。
> 改行コードが削られた場合に、文字が多すぎると判断する
の意味がわからんが、わざと改行を削ってみた。
int count;
char str1[8], str2[8];
printf("半角で7文字以上入力すると、2回目の入力が出来ません。\n");
count = 0;
printf("1回目> ");
while (fgets(str1, 8, stdin) != NULL) {
int len = strlen(str1);
if (str1[len - 1] == '\n') { // 改行削る
str1[len - 1] = '\0';
len--;
}
if (len < 7) {
if (count == 0) {
break;
}
count = 0;
printf("1回目> ");
} else {
count++;
}
}
0787デフォルトの名無しさん
2005/05/29(日) 08:25:11コンパイラごとに最適化されたコード書くくらいなら、
始めからアセンブラで書いたほうが早かったりするな。
0788780
2005/05/29(日) 14:31:49ありがとうございます、ストリームバッファにデータが残っていたのが原因だったんですね。
それが分からなくて困っていました。
たしかにfflush()の入力系に対する使用は未定義のようです。
http://www.kouno.jp/home/c_faq/c12.html#26
ですが、私の環境、XPhome,bcc5.5では、使用できるようです。
http://www.borland.co.jp/qanda/lang/l0002014.html
>>786
>普通に捨てれば。
「捨てる」という発想がありませんでした。
fgetsで、入力が溢れてしまった場合、7文字+(改行)の場合、
strには最後の改行は保存されず、'\0'が書き込まれていた事と、
8文字以上の入力では最後の1文字の代わりに'\0'が書き込まれていた事と、
通常通り処理された場合である、6文字以下の入力では、strに改行コードが含まれていたので、
改行コードの有無でエラー処理を行えば大丈夫かと思っていました。
入力バッファに残っているデータが原因なので、確かに改行の有無は無意味ですね…。
最初は、fgetsに何かの問題があるのだと、思っていました。
0789デフォルトの名無しさん
2005/05/29(日) 14:46:230790デフォルトの名無しさん
2005/05/29(日) 14:53:21「未定義」の意味を取り違えていると思われ
「できない保証」すらないのが未定義
0791デフォルトの名無しさん
2005/05/29(日) 15:02:16だと、読み込んだ分、現在位置が動かないのは通常の仕様なのかな?
fopen()で開けば想定どおり。
ちなみにWindows XP,Borland コンパイラ5.5
fread(),fseek()でファイルを拾い読みしようとして
はまってしまった。
0792デフォルトの名無しさん
2005/05/29(日) 15:05:580793デフォルトの名無しさん
2005/05/29(日) 15:13:05同じファイルを、
% cmd < input_file
と
fp = fopen("input_file");
とするのは、結局同じかと思ってたんだけど、stdinを経由するから
別物になってまうのね。
0794デフォルトの名無しさん
2005/05/29(日) 15:14:56いや、それはOS次第。OSによっては標準入力が普通にseekできる。
0795デフォルトの名無しさん
2005/05/29(日) 15:18:37cat input_file | cmd
↑
これらが同じってのは横暴だな
FILE のメンバが処理系定義・・・いや未規定では議論のしようがないが
0796デフォルトの名無しさん
2005/05/29(日) 15:19:48だけだと思うよなあ。
なんか、Windowsのパイプだのリダイレクトが変なんだよ。リダイレクトも
パイプで実装してんのかも知れないな。
なんかキャラクタデバイスから読み込んでるような感じになるもん。
0797デフォルトの名無しさん
2005/05/29(日) 15:25:300798デフォルトの名無しさん
2005/05/29(日) 16:00:04実行画面に表示するようなプログラムを作りたいのですが、手も足も出ない
状態です。。
読み込むファイル名を入力する一歩手前でこれを表示させたいのですが…
分かる方よろしくお願いします。
0799デフォルトの名無しさん
2005/05/29(日) 16:44:08time_t present_tm ;
struct tm *my_time ;
time(&present_tm) ;
printf("before:%d\n",present_tm) ;
my_time = localtime(&present_tm) ;
printf("after:%d\n",present_tm) ;
}
present_tm が localtime したあと、値が変わると思ったのに、
変わりません。なのにポインタで渡すのはなぜなのでしょうか?
0800デフォルトの名無しさん
2005/05/29(日) 16:46:23localtimeのパラメータはconstポインタなので、値が変わるわけがありませんね?
ポインタで渡す関数は他にもたくさんあるし、別に珍しくもありませんよね?
0801デフォルトの名無しさん
2005/05/29(日) 16:52:28珍しくないけど、これといった意味はないんですか?
0802デフォルトの名無しさん
2005/05/29(日) 16:52:55popen("ls", "r");
あとスレ違い。
0803デフォルトの名無しさん
2005/05/29(日) 16:53:42MS-DOSは、パイプもリダイレクトもファイルアクセス。
0804デフォルトの名無しさん
2005/05/29(日) 16:57:01俺の環境ではtime_tは64ビットだけど、他の環境ではどんなに巨大かもしれない。
巨大なデータを値渡ししたらオーバーヘッドが馬鹿にならない。
ポインタ渡ししとけばポインタ分のコピーだけで済む。
0805デフォルトの名無しさん
2005/05/29(日) 16:59:28なるほど、そんな理由があったのですか。恥ずかしかったですけど、
質問してよかったです。ありがとうございました。
0806デフォルトの名無しさん
2005/05/29(日) 17:10:21Windows でも標準入力にfseekを呼んでもエラーにならないし、
設定したとおり位置も動くから"seek"できてると思うんだけど、
fread()の後にftell()を呼ぶとずれる、というかちょっと少なめに
不定になるんだよね。
fread()を続けて読めばずれてない。
けどfread(),fseek()を交互に呼ぶと上記の理由でずれてしまう。
Windowsなんか中途半端にseekableなんだろうか。
まあ、ここで訊いたおかげでWindows標準入力要注意ということが
わかりました。皆様多謝
0807デフォルトの名無しさん
2005/05/29(日) 18:21:55したいのですが、どうすればいいのでしょうか?
0808デフォルトの名無しさん
2005/05/29(日) 18:23:09共用体。
0809デフォルトの名無しさん
2005/05/29(日) 18:37:24>>808さん ありがとう!
0810デフォルトの名無しさん
2005/05/29(日) 18:50:25って構文の一番深いwhile文の中にif文があって、そこでif文が真なら
全while文の外に出たいとき、gotoを使うのが一番簡単だと思うのですが、
他にいい方法ってありますでしょうか。
gotoは使うなとよくいわれますので・・・。
while(A) {
while(B) {
while(C) {
if(D) 全てのwhileループの外に出る
else A, B, Cを更新
}
}
}
見たいな場合です。
0811デフォルトの名無しさん
2005/05/29(日) 18:53:46それは数少ないgotoを使うしかない場面。
気にせずgoto使え。
0812デフォルトの名無しさん
2005/05/29(日) 18:55:17ありがとう!
0813デフォルトの名無しさん
2005/05/29(日) 18:59:12fopen("filename","w");
のfilenameの部分に何らかの形で変数の値を入れれないものかと,思っているのですが,
このようなことは可能でしょうか?
fopenで無理なようでしたら,他の関数でも構わないのですが。
0814デフォルトの名無しさん
2005/05/29(日) 18:59:53snprintf()
0815デフォルトの名無しさん
2005/05/29(日) 19:17:54「goto を使わない」が出発点ではいけないが、
悪い設計の兆候ではあるから、上流設計におバカがないか点検は必要
0816デフォルトの名無しさん
2005/05/29(日) 19:18:01return
0817デフォルトの名無しさん
2005/05/29(日) 19:20:55このスレ的にはsprintf()だ。
>>810
或いはループ全体を関数にしてreturnで逃げる手もあるぞ。
#ほかにもいくつかあるが割愛。
>>806
それは寧ろ、テキストモードとバイナリモードのサイズの違いじゃないのかな?
#いずれにしても、詳細はWindowsスレかどこかで。
0818デフォルトの名無しさん
2005/05/29(日) 19:27:52ビット演算なのですが、あるビットに変数を代入する方法を
教えてほしいです。
例えば
char a = '1010';
char b[4] = {0x01,0x00,0x00,0x01};
for(int i = 0;i < 4;i ++){
/*
*/
}
コメントの部分でaの3ビット目にbの配列の値を
iの順番に代入して、
i = 0の時a = '1110'
i = 1の時a = '0110'
i = 2の時a = '0110'
i = 3の時a = '1110'
という結果にしたいのです。
0819デフォルトの名無しさん
2005/05/29(日) 19:37:50a = table[a*2 +b];
0820デフォルトの名無しさん
2005/05/29(日) 20:15:20Cはきちんと設計されたプログラムの作成には向いていない
0821デフォルトの名無しさん
2005/05/29(日) 20:31:03漢字やひらがなといった普通のマルチバイト文字は問題なく変換できています
環境はDebian/sidです
0823デフォルトの名無しさん
2005/05/29(日) 20:42:52a = a | 0x04;//set
0824デフォルトの名無しさん
2005/05/29(日) 20:54:37A,B,C条件を偽にするフラグを使う。
0826デフォルトの名無しさん
2005/05/29(日) 21:45:39「�dとか�_とかの文字」がJIS X 0208に入ってないからじゃないか?
0827初心者のファイル入出力
2005/05/29(日) 21:55:31どなたかご教授していただけませんか?
excelのファイルの保存形式はデータごとにスペースを空ける.prn形式で保存しました。
以下はソースの一部です。visualCで作製しております。よろしくお願いします。
ia=0;
printf("カレントディレクトリーからデータを読み込みます。\n");
printf("ファイル名を入力してください。\n");
scanf("%s", filename); /*ファイル名の入力*/
if ((fp = fopen(filename, "r")) == NULL ) /*ファイルオープン*/
printf("%s can't be opened\n", filename);
else {
while(( c= getc(fp)) != EOF) /*データ読み込み*/
{
if(c !=' ')/*データファイルからスペースを取り除く条件*/
{
if(c !='\n')/*データファイルから改行を取り除く条件*/
{
while (c==' ')
{
c=getc(fp);
ax[ia]=ax[ia]+c;
}
}
}
putchar(ax[ia]);/*データ表示*/
ia=ia++;
}
fclose(fp);/*ファイルクローズ*/
}
0828デフォルトの名無しさん
2005/05/29(日) 21:55:40全角で入力した場合は必ずエンターで確定しなければいけないんでしょうか?
「y」キーを全角、半角どちらでも、押されたらエンターしなくても即反応するようにしたいんです。
0829デフォルトの名無しさん
2005/05/29(日) 21:57:31確定するまではその文字はIMEが握ってて
コンソールには渡らないから、だめだなあ
0830デフォルトの名無しさん
2005/05/29(日) 22:06:03Excelデータって普通M行N列あると思うんだが、それをどう
1次元配列に格納したいんだ?
それと、getc()で読むよりは、
fgets()で行読み→strtok()でカラム分解
のが楽だよ
まあ空のセルが無いと仮定しての話だがね
0831デフォルトの名無しさん
2005/05/29(日) 22:08:36イタタタ
0832デフォルトの名無しさん
2005/05/29(日) 22:09:47なんかまずいのけ?
>>827のやろうとしているような仕事にはまさにその程度の手軽さが
お似合いだと思うのだが
0833デフォルトの名無しさん
2005/05/29(日) 22:23:46> char a = '1010';
何故、誰も突っ込まない…?
0834デフォルトの名無しさん
2005/05/29(日) 22:27:030835デフォルトの名無しさん
2005/05/29(日) 22:27:27馬鹿馬鹿しくて読んでなかったから。
0836デフォルトの名無しさん
2005/05/29(日) 22:38:05なるほどそうでしたか…
即解答ありがとうございました。
0837デフォルトの名無しさん
2005/05/29(日) 22:41:29電車男に続く名スレの予感・・
0839デフォルトの名無しさん
2005/05/29(日) 22:47:16fgets 推奨と strtok 推奨のアンバランス
ポリシーのなさにイタタタ
0840デフォルトの名無しさん
2005/05/29(日) 22:48:170841デフォルトの名無しさん
2005/05/29(日) 23:00:01JIS X 0201な半角カナは変換できてるんですが
�Tとか�@とか�鰍焜_メでした
JIS X 0201とJIS X 0208以外はダメなんですかね
0842デフォルトの名無しさん
2005/05/29(日) 23:15:24ちゃんと説明できないなら
黙ってりゃいいのに…
0843デフォルトの名無しさん
2005/05/29(日) 23:16:52ユニコードとのコンバータの実装ってさまざまだけど、
MS932(WINDOWS-31J)以外のエンコーディングを
変換する場合は、その辺の文字は扱えないのが普通。
0844デフォルトの名無しさん
2005/05/29(日) 23:18:45両方libcのごく標準的な関数なのに
>>839にはなんか違ったもの、アンバランスなものに見えるらしいな
まあフォーマットがちがちならfscanf()が一番楽だけどなー
0846デフォルトの名無しさん
2005/05/29(日) 23:20:29しかも>>832は「手軽さ」とも言ってるのに
「ポリシーのなさ」てwwww池沼かお前は
0847デフォルトの名無しさん
2005/05/29(日) 23:29:120848デフォルトの名無しさん
2005/05/29(日) 23:32:48うーん。手軽さっていうんなら素直にfscanf()使わせろよと
言いたかったのかなあ彼は。まあその方が楽だよね。
あと、俺個人はstrtok()は実は使わない(w
0849デフォルトの名無しさん
2005/05/29(日) 23:32:56ネタ神か…??
0850デフォルトの名無しさん
2005/05/29(日) 23:34:42うげー
0851デフォルトの名無しさん
2005/05/29(日) 23:36:16だって空フィールドに対応できないし
スレッドセーフじゃないからstrtok_rが存在してたりとかその辺が
実装系でまちまちだし
BSDのstrsep()はそういう問題がないから、もっぱらそっちを使うよ。
strsep()が無い環境では、移植して使う。
0852デフォルトの名無しさん
2005/05/29(日) 23:39:51うげー
0853デフォルトの名無しさん
2005/05/29(日) 23:51:08a=a&~8|(b[i]<<3);
0854デフォルトの名無しさん
2005/05/30(月) 00:10:09バグの元だし、マイナーだし、積極的に採用する理由が無い。
0855デフォルトの名無しさん
2005/05/30(月) 00:30:54サーバから受け取ったcp932な文字列をiconvでクライアントのエンコードにしてから
ワイド文字に変換しようとしてたんですけどワイド文字を使うのをあきらめた方が良さそうですね…
0856デフォルトの名無しさん
2005/05/30(月) 00:43:10へえ、これは出来てたんだ。iconvならUCS4を経由するから
その時点でアウトになりそうなもんだがな。
0857デフォルトの名無しさん
2005/05/30(月) 00:59:34Linuxだとiconv -l にEUCJP-MSがあるのでこれを指定してやればiconvで変換できます
ただのEUCJPだと失敗します
BSDとかだとどうなのかはよくわかりません
でもFreeBSDのiconvにはEUC-JISX0213ってのがあったので出来そうかも。
0858デフォルトの名無しさん
2005/05/30(月) 01:34:01スレ違いだが iconv に↓のパッチに相当するものが当たってるかどうかだと思われ。
ttp://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html
FreeBSD の場合は WITH_EXTRA_PATCHES=yes にして ports から converters/libiconv をインストール
すれば OK。
0860デフォルトの名無しさん
2005/05/30(月) 01:57:58インディアンに食べられるぞ!
0861デフォルトの名無しさん
2005/05/30(月) 02:48:32(入門書の進んだページ)
1日目108ページ
2日目2ページ(配列の例題が微妙に難しくて行き詰る)
(使っていた本がマイナーなので、有名な入門書をamazonで2冊購入)
3日目0ページ(2ちゃん見て遊びまくり)
4日目今日新しい入門書が届く予定(新版 明解C言語・解きながら学ぶC言語)
続く
0862861
2005/05/30(月) 03:06:18下記のサンプルプログラムは、配列の初期化と繰り返し処理を利用したものです。
Dataというint型配列に整数のデータがあり、その中に-1が混ざっています。-1を除外
対象として、5番目の値を出力します。
#include <stdio.h>
int Data[] = {-1, 1, 2, 3, 4, -1, 5, -1, -1, 6, 7, 8, 9};
main()
{
int i,pos;
int size;
int s;
s=5;/* 出力位置5をセット */
size=sizeof(Data)/sizeof(Data[0]);
/* sizeof演算子を利用して配列のサイズを調べます */
pos=0;
for (i=0;i<size;i++) {
if(Data[i]!=-1) {/* -1は除外対象 */
if(s==pos){
printf("位置=%d\n",Data[i]);
break;
}
pos++;
}
}
return 0;
}
これの解説、求む。
0863861
2005/05/30(月) 03:15:07終了。
0864デフォルトの名無しさん
2005/05/30(月) 03:58:100865デフォルトの名無しさん
2005/05/30(月) 04:01:040866デフォルトの名無しさん
2005/05/30(月) 09:55:440867初心者のファイル入出力
2005/05/30(月) 14:05:01fgets()で行読み→strtok()でカラム分解のサンプルプログラムを教えてください。
0868デフォルトの名無しさん
2005/05/30(月) 14:31:12stdin、stdoutはランダムアクセスできないシーケンスの場合がほとんどだ。
(実際の仕事はシェルが行う。WindowsならCMD.EXEが行う)
C++で言えばInputIteratorとかOutputIteratorに相当するものだから、
ファイルを巻き戻そうとすると、その結果は処理系依存になるのでは。
0869デフォルトの名無しさん
2005/05/30(月) 14:46:16いや、それでもseekはできるだろ
できないというのなら!エラーを返さなければならない!
0870デフォルトの名無しさん
2005/05/30(月) 15:17:57主プログラム(main)において標準入力(scanf)からデータ1文字を
読み込みアルファベットの小文字(a〜z)だけを(A〜Z)に変換し
標準出力(printf)へ書き出すプログラムを作成せよ。なお、小文字
から大文字への変換は関数で作成し、関数への値の受け渡しと変換
プログラムにおいてはポインタを用いよ。なお、できれば繰り返し
入力できるようにすることが望ましい。なお、関数内ではなるべく
printf()を使用しないようにすべきである。
という問題がありますが、これのプログラムとフローチャートを教えて
ください。お願いします。
0871デフォルトの名無しさん
2005/05/30(月) 15:23:240872デフォルトの名無しさん
2005/05/30(月) 15:24:37「望ましい」=「やる必要は無い」
大人になったらわかることだけど
0873デフォルトの名無しさん
2005/05/30(月) 15:36:570874デフォルトの名無しさん
2005/05/30(月) 16:24:43丸投げは良くない(てか課題は自分でやれや・・・)
0875デフォルトの名無しさん
2005/05/30(月) 16:35:560876デフォルトの名無しさん
2005/05/30(月) 16:40:57スレ違い。
C/C++の宿題を片付けます 44代目
http://pc8.2ch.net/test/read.cgi/tech/1116914132/
http://pc8.2ch.net/test/read.cgi/tech/1115386557/
0877デフォルトの名無しさん
2005/05/30(月) 18:53:51バックスペースで一つ前の文字を消そうとしても1バイトずつしか消えないのはどうにかならないのでしょうか?
fgetwsを使ってみても結果は同じでした
VCだとfgetsでも問題なくマルチバイト文字を扱えていた記憶があるのですが
0878デフォルトの名無しさん
2005/05/30(月) 18:58:12関数の問題ではなく、端末エミュレータの問題。
よって、スレ違い。いや寧ろ、鼬害。
0879デフォルトの名無しさん
2005/05/30(月) 19:17:29配列を初期化するには、配列が静的変数か、外部変数でなくてはいけません。
とあるのですが、こんなルール初めて聞きました。
理由は何なのでしょうか?
猫さんにメールしても、メルボム食らってる所為か、一向に返事が返ってきません。
もし、わかるかたがいらっしゃいましたら、レスお願いします。
0880デフォルトの名無しさん
2005/05/30(月) 19:40:36は駄目・・・って事ですかね? 読解力がなくて、別の意味に捉えちゃってるんでしょうか?
0881デフォルトの名無しさん
2005/05/30(月) 19:47:33ANSI Cではできるでしょ
0882882
2005/05/30(月) 20:31:38どういう風に以下のものをくめばいいのでしょうか?
「以下の手順にしたがって文字列を暗号化/復号化するプログラムを作成し
実行しなさい、ただし使用できるヘッダファイルは、stdio.hのみに制限します
1)2つの文字配列A、Bを用意する
2)文字配列Aに、対象文字を格納する
3)暗号処理か復号処理のどちらかを使用者に選択させる
4)文字配列Bに暗号/復号処理された文字を格納したあと、それを表示させる
<暗号/復号処理>
今回の暗号/復号処理では、対象文字の入力順を逆にし、さらに各文字
をアルファベット順で一文字分ずらす、暗号処理野場合は右に
ずらし、復号処理野場合は左にずらす。」
0883デフォルトの名無しさん
2005/05/30(月) 20:34:46881 が言っているように今は「ルール」ではなくなったが、
そーゆーことに無頓着な奴はやっぱり足手まといになるからしっかり勉強しとけ
肝心の答えは悪いがこのスレで答えるわけにはいかない
おまえさんが使っている処理系のスレか板で聞くといい
0884デフォルトの名無しさん
2005/05/30(月) 20:36:46理由は、静的か外部ならコード要らないからだよ
パラメタ並べてそのアドレスを入れとけばいいからね
autoだとそうはいかない。
0885デフォルトの名無しさん
2005/05/30(月) 21:10:31レスありがとうございました。
自分が未だ勉強不足であることを、ヒシヒシと痛感した次第です。
まだ、C言語をマスターする道のりは遠そう・・・
本当にありがとう、勉強になりました。
0886デフォルトの名無しさん
2005/05/30(月) 21:37:52だからライブラリを全無しでコンパイルするときは
注意が必要。
割り算も地味に鬼門だよな。
0887デフォルトの名無しさん
2005/05/30(月) 21:55:24このたびRedhat9でプログラムをコンパイル・実行をしております、コンパイルはG++とコマンドを打っています。
「000/list_data.dat」という位置にあるファイルを読み書きしようと思っているのですが、
fopenでのファイルオープンが失敗します。第1引数にその相対パス文字列を与えていますが、
試しに実行ファイルと同じディレクトリの「list_data.dat」でテストすると問題なく開くことが出来ます。
この現象が起こる原因と解決方法を教えて下さい。
0888デフォルトの名無しさん
2005/05/30(月) 21:59:080889デフォルトの名無しさん
2005/05/30(月) 22:00:37犬板池
0890unkopopo
2005/05/30(月) 22:04:160891デフォルトの名無しさん
2005/05/30(月) 22:08:13>ANSIのC言語の規格では、自動変数の配列は初期化できることになっていますが、
>以前のコンパイラは、なぜかANSI準拠と堂々と書いて販売されていたにもかかわらず、
>自動変数の配列を初期化するようなコードはエラーになってしまうものがありました
ネタ本が古いだけだろ。
0892デフォルトの名無しさん
2005/05/30(月) 22:15:05strerror(errno)で調べたところ、
No such file or directoryが帰ってきました、
しかしディレクトリ「000」は存在しますし、list_data.datも存在しています。
全く原因がわかりません、もしかするとディレクトリ文字が/じゃないのかと疑ってみましたが
\\にしても結果は同じでした。
0893デフォルトの名無しさん
2005/05/30(月) 22:19:460894デフォルトの名無しさん
2005/05/30(月) 22:39:180895デフォルトの名無しさん
2005/05/30(月) 22:47:290896デフォルトの名無しさん
2005/05/31(火) 01:45:250897デフォルトの名無しさん
2005/05/31(火) 01:50:40Gladiator
Russell Crowe
Gladiator
Julia Roberts
Erin Brockovich
・
・
・
fopenでこのようなファイルのデータを取り込み、
構造体に格納したいのですが
どうすればいいのでしょうか?
お願いします。
struct zip {
char[20];
char[20];
char[20];
char[20];
char[20];
char[20];
}
0898デフォルトの名無しさん
2005/05/31(火) 02:02:470899デフォルトの名無しさん
2005/05/31(火) 02:11:18そんな事はない
0900デフォルトの名無しさん
2005/05/31(火) 02:21:50改行コードを検索してchar配列にコピーすればよろしかろう。
0901898
2005/05/31(火) 02:49:53http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
このあたりを見ながらしてるんですけどいまいちよくわからんのです
"%s %s [残り全部]"みたいな感じで
0902デフォルトの名無しさん
2005/05/31(火) 02:54:36無理
0903デフォルトの名無しさん
2005/05/31(火) 03:41:42/ i アイキャンダンス♪
ノ ___ノ 加速させろ
(____,,--‐‐'''''"''':::::l.川 アイキャンレディゴー
. |(●), 、(●)、.:|川 ゴーウェイ
| ,,ノ(、_, )ヽ、,, .::::|リリ
. | `-=ニ=- ' .:::::::|(((
彡\ `ニニ´ .:::::/ミミ 携帯の映像が、変わるよ。
/`ー‐--‐‐―´\
0904デフォルトの名無しさん
2005/05/31(火) 08:05:410905デフォルトの名無しさん
2005/05/31(火) 11:03:06キーボ ードから実数 x を入力し、ニュートン法と呼ばれる次のような反
復の式を用いて、近似的に x の平方根を求めるプログラムを作成せよ。
--
xの平方根は、次の計算を| s(i+1)-s(i) | < ε, i=1,2,...となるまで繰
り返すことによって求めることができる。εは収束判定数である。
s(i+1) = ( s(i) + x / s(i)) / 2
ただし、s(1) = 1 とする。
なお、ε=0.00001として計算すること。
0906デフォルトの名無しさん
2005/05/31(火) 11:13:36do{o=s;s=(s+x/s)/2;}while((o-s)*(o-s)<e*e);
とかでいいんじゃないの?動かしてないけど
0907デフォルトの名無しさん
2005/05/31(火) 11:18:300908デフォルトの名無しさん
2005/05/31(火) 11:22:47試してみますね。
0909デフォルトの名無しさん
2005/05/31(火) 11:52:38(水平垂直に線を延ばして囲まれた内側のような)
0910デフォルトの名無しさん
2005/05/31(火) 12:01:18画像は展開されてどこかメモリに
(x1,y1)-(x2,y2)の
画像の大きさはX,Yとすると
for(y=y1;y<y2;y++){ for(x=x1;x<x2;x++){
ひとつひとつ丁寧に
配列
ビットマップ
0912デフォルトの名無しさん
2005/05/31(火) 12:31:31"%s %s %[^\n]" でいいんじゃないの?
何もかも全部だと、終わりがわからないわけだが・・
0913デフォルトの名無しさん
2005/05/31(火) 12:38:56試してみます
0914デフォルトの名無しさん
2005/05/31(火) 13:15:38スペースが確保できていれば最後の%[]は%100000cでもいいよね。
0915デフォルトの名無しさん
2005/05/31(火) 15:04:49{
a=a+i
b=b+i
}
と
for (i = 0 ; i < 100000 ; i++)
{
a=a+i
}
for (i = 0 ; i < 100000 ; i++)
{
b=b+i
}
とではどっちの方が実行速度が速いんでしょうか?
0916デフォルトの名無しさん
2005/05/31(火) 15:12:14最適化抜きなら前者
0917デフォルトの名無しさん
2005/05/31(火) 15:12:240918デフォルトの名無しさん
2005/05/31(火) 15:16:19最適化というのはコンパイラーが勝手にやってくれるんでしょうか?
それなら保守しやすい後者で書きたいんですが
>>917
計る技術がありませんw
0919デフォルトの名無しさん
2005/05/31(火) 15:22:44うはwwwおkwww
0920デフォルトの名無しさん
2005/05/31(火) 16:17:42PC に計って貰えよ。
何のためにプログラムやってるんだ?
0921デフォルトの名無しさん
2005/05/31(火) 16:36:32タイマーを自作して詰まったらまた来てくださいね。ハート
ハイハイ次の方どうぞ
0922デフォルトの名無しさん
2005/05/31(火) 16:40:280923デフォルトの名無しさん
2005/05/31(火) 17:00:13ヘルプが見れないし、ホームページで探しても書いてないので教えてください。
0924デフォルトの名無しさん
2005/05/31(火) 17:24:00Ver2.31だが、
実行->実行時パラメーター。
0925861
2005/05/31(火) 17:41:46最新状況
ご住所が不明のため持ち戻りました。
5/31 15:28
死ね
0926デフォルトの名無しさん
2005/05/31(火) 18:30:43ありがとうございます、できました。
でまた質問なんですが、今、ttp://coconut.sys.eng.shizuoka.ac.jp/bmp/
にあるtest0.cを実行しようと思ってbmp.h bmp.c test0.c dog.bmpを保存して
実行しようとしたのですが、コンパイルしようとしても「・・・が未解決」となります。
プログラムが複数に分かれている場合はどうすればいいのですか?
コンパイル時パラメータをどうにかするんですか? 試したのですがうまくいきません
教えてください。
0927デフォルトの名無しさん
2005/05/31(火) 18:56:44コンパイラに依存する。
まずはコンパイル→リンクの2段階で.exeができることを理解しろ。
参考に、
http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide84-1.html
0928927
2005/05/31(火) 19:00:31http://hp.vector.co.jp/authors/VA017148/pages/make.html
に書いてある。
0929デフォルトの名無しさん
2005/05/31(火) 19:31:08ってやっときゃ、大抵はオケ
0930デフォルトの名無しさん
2005/05/31(火) 19:47:02そうやって迂闊に答えるから
図に乗ってスレ違いの質問を続けるんだ。
0931デフォルトの名無しさん
2005/05/31(火) 21:15:220932デフォルトの名無しさん
2005/05/31(火) 22:22:45wavの取り込み方がよくわかりません、
どうやって取り込むのでしょうか。
0933デフォルトの名無しさん
2005/05/31(火) 22:26:580934デフォルトの名無しさん
2005/05/31(火) 22:31:48オススメの本やサイトなどあれば教えて下さい。
0935デフォルトの名無しさん
2005/05/31(火) 22:54:32>>1
0936デフォルトの名無しさん
2005/06/01(水) 04:34:100937デフォルトの名無しさん
2005/06/01(水) 08:08:440938937
2005/06/01(水) 08:38:500939909
2005/06/01(水) 11:21:57もう一度詳しく教えてください
2点を指定、というより1点から右に何ピクセル下に何ピクセル、って考えた方がいいのかな
0940デフォルトの名無しさん
2005/06/01(水) 11:51:44・画像の格納orアクセス方法
・画素の選択の意図するところ
これらが明らかでないからなんとも言えないが、
画素を取り出す関数int get(image1, int x, int y)、
セットする関数void set(image2, int x, int y, int pixel)が存在すると仮定して、
2点の座標がint x1, int y1, int x2, int y2 として与えられるなら
int ix, iy;
for (iy = y1; iy <= y2; ++iy) {
for (ix = x1; ix <= x2; ++ix) {
set(image2, ix - x1, iy - y1, get(image1, ix, iy));
}
}
でimage1から切り出したimage2が得られる。
0941デフォルトの名無しさん
2005/06/01(水) 12:02:54printfのようにformat,...を引数にとる関数を自作してみようとした
参考にしてみようとglibcのソースをちょっと眺めてみたがサッパリわからなかった
チラシの裏おわり
0942デフォルトの名無しさん
2005/06/01(水) 13:27:13チョソバンク嫌い
0943デフォルトの名無しさん
2005/06/01(水) 14:12:090944デフォルトの名無しさん
2005/06/01(水) 14:24:440945909
2005/06/01(水) 16:18:18どうもです
選択された画素には1、そうでないのは0を与えて M(x.y)=0か1 の2進値のマップをつくって
M(x.y)=1の画素の全ビットを0の画素の最上位ビット以上にスケーリングがしたい
というわけなんです
09461091
2005/06/01(水) 16:41:250947デフォルトの名無しさん
2005/06/01(水) 17:02:16そんなものありません
0948デフォルトの名無しさん
2005/06/01(水) 17:06:43コマンドの話ならスレ違い。
関数なら printf でも使っとけ。
0949デフォルトの名無しさん
2005/06/01(水) 17:31:19自分自身の関数へのポインタを返す関数の宣言
で迷うんだけど void* を経由するしか表現方法はないのでしょうか?
|void* foo_1st(void);
|typedef void* (*STATE_FUNC)(void);
|STATE_FUNC next = foo_1st;
|while ((next = (STATE_FUNC)(*next)()) != NULL)
| ;
↑の STATE_FUNC へのキャストをなくす表現ってないものなかな? と。
0950デフォルトの名無しさん
2005/06/01(水) 17:35:2709511091
2005/06/01(水) 17:43:520952949
2005/06/01(水) 18:00:37やはり 関数(*1)へのポインタ を 返す関数(*2) を宣言する場合に
型として *1 != *2 ならば 普通に書けそうですけど
型として *1 == *2 のケースは そもそも無理があるということですかね?
ステートマシン書く時は、整数値なり enum なり返して switch or テーブル参照して
次のステートをディスパッチするほうが一般的なのかな…
0953デフォルトの名無しさん
2005/06/01(水) 19:09:42戻り値の関数ポインタをstructでくるめば何とかできるけど、直接的に
は無理な気がする。
確かに、ステートマシンを書くなら状態番号を整数にしてやるのが一般
的だね。
0955デフォルトの名無しさん
2005/06/01(水) 20:56:18プログラミング初心者でして分からない事があり、教えて頂けると助かります
質問1・次のプログラムは テキストファイルを読み込みA〜Zまでの文字が
それぞれ何回現れたかを数えるプログラムです。
int count[26]; を FILE *fp; の一行上に書くと、結果がめちゃくちゃになります
どうして mainの外で書かなければならないのか、どうしても分かりません
初歩的なことかもしれませんが教えていただけると助かります
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int count[26];
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
int i;
/* ファイル名の指定を調べる */
if(argc!=2) {
printf("ファイル名の指定がありません\n");
exit(1);
}
if((fp = fopen(argv[1], "r"))==NULL) {
printf("ファイルを開くことができません\n");
exit(1);
}
0956デフォルトの名無しさん
2005/06/01(水) 20:57:26ch = toupper(ch);
if(ch>='A' && ch<='Z') count[ch-'A']++;
}
for(i=0; i<26; i++)
printf("%c は %d 回出現\n", i+'A', count[i]);
fclose(fp);
return 0;
}
質問2・Visual c++というソフトが非常に気になっているのですが、これが
どう役に立つのかが分かりません。テキストエディッタ・コンパイラ・デバッガ
が入っている開発環境と書かれていても、テキストエディッタならメモ帳で、
コンパイラ・デバッガならBorlandの無料ので、と思い、良さがピンとこないのです
やはりプログラムしやすいのでしょうか?C言語勉強するなら買っておくか
悩んでおります。
また、同じようなソフトでも購入するのはVisual C++ .NET Standard 2003
でいいのか迷ってます、professional だの2002 だの 2000いくつか無だの
Netだの 色々ありすぎてどれが新しくてどれがいいのかさっぱりです
予算は2万くらいまででお勧めあれば教えてください
質問3・独習Cという初級本を一通り勉強したら、次はAPIというのを
勉強しようと思っておりますが、勉強の順番としてはこれでいいのでしょうか?
「API??C言語ちょっと勉強しただけでAPIは早いよ、その前にこれ
勉強しとけ」みたいなのがありましたら教えて頂けると助かります
また、APIを勉強するにあたって、お勧めの本等ありましたら、教えてください
長々となりましたが、宜しくお願い致します
0957デフォルトの名無しさん
2005/06/01(水) 21:13:45> int count[26]; を FILE *fp; の一行上に書くと、結果がめちゃくちゃに
初期化してないだろう。
自動変数の配列は初期化しないと値が不定だぞ。main()の中に入れたければ
memset(count, 0, sizeof count);
のような初期化コードが必要になる。
0958デフォルトの名無しさん
2005/06/01(水) 21:14:250959デフォルトの名無しさん
2005/06/01(水) 21:17:50それと、fgetc()の返り値をchに入れるんなら、chはintで宣言すべき。
EOFの値はintの-1だ。
VC++が役に立つかどうかは人によるんじゃないの。Windows上の開発では
一応業界のデファクトスタンダードみたいなものにはなってるが。これが、
少なくとも仕事で使う上では超重要。
Windowsの開発で他の開発環境を使うなら、VC++では不要な苦労が待っているが、
まあ学生さんならそういう苦労をするのも勉強になるかも知らんし、好きに
すればよかろ。
0960959
2005/06/01(水) 21:18:110961デフォルトの名無しさん
2005/06/01(水) 21:48:28A2
実用ソフトを作るならpro以上。stanndardは最適化などのコンパイラオプションが使えないから。
デバッガは強力だから重宝している。
A3
APIと平行してc++のclassをそこそこ勉強すればいいんじゃないか。STLもかじって
扱える処理系の裾野を広げるというのもありだろう。
0962デフォルトの名無しさん
2005/06/01(水) 21:50:21俺は最初、BCCを使っていたがVCを使ってよかったと思っている。
デバッグ中はいつでもブレイクポイントでプログラムをとめられて、
そこから一行ずつステップ実行してどうプログラムが流れているかわかる。
さらにウォッチで変数の中身を直接見れる。それどこか自由に書き換えられる。
APIとはたぶんWin32APIのことだろうが、俺はそれよりもむしろC++を推す。
0963デフォルトの名無しさん
2005/06/01(水) 21:59:51とりあえず、これだけはあり得ないと言っておこう。
行数表示、grep、置換、tab文字の表示、対応する括弧の強調表示、自動字下げ機能は最低でも欲しい。
順番は、Cの勉強→C++の勉強→Windowsプログラミングをお勧めする。
WindowsAPIは仕様変更とかで数年後には使えないかも知れんが、恐らくC++の技術はかなり先まで役に立つ。
WindowsAPIはややっこしいしな。
0964デフォルトの名無しさん
2005/06/01(水) 22:01:48就職して講習を受けたのはJavaとC#とCOBOLでした。
COBOLも古いですが、他の言語とは棲み分けができてるのでまだ需要があるそうです。
でもCの仕事はもう全然ないと聞きました。
まだCを業務で使っているところはあるのでしょうか?
0965デフォルトの名無しさん
2005/06/01(水) 22:12:10COBOLよりはずっと多い。
0966デフォルトの名無しさん
2005/06/01(水) 22:14:310967デフォルトの名無しさん
2005/06/01(水) 22:17:560968デフォルトの名無しさん
2005/06/01(水) 22:21:54int main(void) {
char **a;
int i;
a = (char **) mem_allocate(N); //mem_allocateはmallocのラッパ
if (a == NULL) return 1;
for (i = 0; i < N; i++) {
a[i] = mem_allocate(6);
strcpy(a[i], "Help!");
printf("%p %x\n", a[i], a[i][0]);
}
putchar('\n');
for (i = 0; i < N; i++) printf("%p %x\n", a[i], a[i][0]);
return 0;
}
実行結果
0xa050200 48
〜小略〜
0xa0506f8 48
0xa050200 fffffff8
〜小略〜
0xa0506f8 48
a[0]が同じアドレスなのに%xの出力が違うのは何故だかわかりますか?
Nが8以下だと正しく48が出力されます。
0969デフォルトの名無しさん
2005/06/01(水) 22:28:460970デフォルトの名無しさん
2005/06/01(水) 22:49:52>968
まず間違いなくメモり破壊。
char の配列を確保するのと、char * の配列を確保するのに同じ関数を使いつつ、
その引数が要素数っぽいのは明らかにおかしい。
たいていの環境で sizeof(char) と sizeof(char*) は違ってるだろ?
0971デフォルトの名無しさん
2005/06/01(水) 23:28:23cygwinのlessを見ていて思ったのですが
qで抜けたときにlessが表示していたもの(バッファ?)が消えて
less実行前の画面が復活します
moreなんかだと画面に残ったまま次のプロンプトが出てきます
このlessの動きはどう実装すればいいのでしょうか
setbuf()ってこういうことをする関数じゃないんですよね?
0972デフォルトの名無しさん
2005/06/01(水) 23:53:240973デフォルトの名無しさん
2005/06/01(水) 23:54:04termcapを見て、プログラムの開始時に ti、終了時に te を
出力すればいい。
0974デフォルトの名無しさん
2005/06/02(木) 00:26:05コマンドラインでいくつかのファイル名を引数に取り、
プログラム中でそれらのファイルをオープンして処理をする、
というCプログラムを書く場合があるとします。
このとき、コマンドラインで渡される引数が毎回実行ごとに違うとき、
プログラムではどのようにファイルオープンを繰り返せばよいのでしょうか?
単純にやる方法なら思い浮かびますが、何か目が覚めるような手があればぜひ教えてください。
0975デフォルトの名無しさん
2005/06/02(木) 00:27:55引数が違うというのは、引数の数が毎回異なる、ということです。
3個のファイルを引数にとる場合もあれば、1個のときもある、という状況です。
0976デフォルトの名無しさん
2005/06/02(木) 00:28:28単純にやる方法をまず書いてみなさい。
0977デフォルトの名無しさん
2005/06/02(木) 00:31:28変に凝った方法はバグも混入しやすく保守しにくく拡張しづらい。
0978デフォルトの名無しさん
2005/06/02(木) 00:34:45int main(int c, char **v)
{
int i;
for(i=1; i<c; i++)hoge(v[i]);
return 0;
}
0979デフォルトの名無しさん
2005/06/02(木) 00:53:40/* atoi: sを整数に変換する*/
int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] = '0');
return n;
}
n = 10 * n + (s[i] = '0');
ここの意味がわからないです。教えてください。
0980デフォルトの名無しさん
2005/06/02(木) 00:57:14>>972
やっぱりですか…
>>973
>termcapを見て
termcapってのは/usr/include/termcap.hですか?
何か出力してくれそうな関数はtputs()??
ちょっと見てみます
// でも引数が3つもありますね…
// tiもteも宣言無いし…
0981デフォルトの名無しさん
2005/06/02(木) 00:57:22の間違いじゃねえの?
もしそうなってるとしたら誤植だと思うが
0982デフォルトの名無しさん
2005/06/02(木) 00:59:03もとの数を10倍して次の桁の数字を足す
"123"
最初は1
次が12
最後に123
return 123;
0984デフォルトの名無しさん
2005/06/02(木) 07:14:12環境依存。Unixスレにでも行ってくれ。
0985979
2005/06/02(木) 08:07:44間違えです。すいません。
× n = 10 * n + (s[i] = '0');
○ n = 10 * n + (s[i] - '0');
あらためて教えてください。
0987デフォルトの名無しさん
2005/06/02(木) 09:21:44実際にパラメタ入れて動作させてみろよ
0988デフォルトの名無しさん
2005/06/02(木) 09:31:4610*nで10進数として桁をシフトアップ、
+(s[i] - '0')で一桁分の数字を加算(ASCIIコードとしての数字→数に変換)
0989デフォルトの名無しさん
2005/06/02(木) 14:07:09俺が2回連続で立てるか。
まとめサイトは更新中断してるけどとりあえずこのままでいいのかな
0990デフォルトの名無しさん
2005/06/02(木) 14:38:58http://pc8.2ch.net/test/read.cgi/tech/1117690676/
0991デフォルトの名無しさん
2005/06/02(木) 16:11:02Cってなに
0993デフォルトの名無しさん
2005/06/02(木) 18:32:52セクースのこと
0994デフォルトの名無しさん
2005/06/02(木) 18:35:28float型の変数のスワップ方法教えてください。
おながいします。ホント困ったorz。
0995デフォルトの名無しさん
2005/06/02(木) 18:37:30float t = a;\
b = a;\
a = t;\
}while(0)
では何か不満?
0996デフォルトの名無しさん
2005/06/02(木) 19:17:12それではtの定義が関数の先頭に来ない。C89には則っていない。
C99やC++のコンパイラでは通るが、純粋なC89コンパイラでは通らない。
ということで>>994は関数で実装した方がよい。
0997デフォルトの名無しさん
2005/06/02(木) 19:28:27アルファベット
0998デフォルトの名無しさん
2005/06/02(木) 19:29:13関数の先頭じゃなくてもブロックの先頭ならいいんじゃないか?
0999デフォルトの名無しさん
2005/06/02(木) 19:30:241000デフォルトの名無しさん
2005/06/02(木) 19:30:54↑
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。