C言語なら俺に聞け(入門篇) Part 15
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/06/25(月) 06:14:52・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 14
http://pc11.2ch.net/test/read.cgi/tech/1181735298/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/
0002デフォルトの名無しさん
2007/06/25(月) 06:32:36Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
Part 13 ttp://pc11.2ch.net/test/read.cgi/tech/1179301993/
0003デフォルトの名無しさん
2007/06/25(月) 06:55:44そういわれたら、なんかメガネじゃなくて後姿にしか見えなくなってきた。これが脳を刺激する
アハッ体験なんだね、良い勉強になった。
0004デフォルトの名無しさん
2007/06/25(月) 07:03:170005デフォルトの名無しさん
2007/06/25(月) 07:06:55http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%82%AF%E3%83%90%E3%82%A4%E3%83%91%E3%83%BC
さすが、メガネデヴピッツァヲタは詳しいぜ、参ったぜベイベー。
0006デフォルトの名無しさん
2007/06/25(月) 09:48:17文字列の中の文字数を調べるstrlen()のように
ファイルの中の文字数を調べる関数ってありますか?
0007デフォルトの名無しさん
2007/06/25(月) 10:00:22http://pc11.2ch.net/test/read.cgi/tech/1170338926/585-
0008デフォルトの名無しさん
2007/06/25(月) 10:44:15OS:Linux
言語:c言語(posix準拠のC言語)
socketについて質問です。
socketを生成して、
bindせずにrecvfrom(ブロッキング)した場合、
終了方法(recvfromのブロックを解除する方法)はどのような方法がありますか?
0009デフォルトの名無しさん
2007/06/25(月) 14:10:34http://coconut.sys.eng.shizuoka.ac.jp/bmp/
ここのプログラムでは、なぜか画像が真ん中で切れて左右で入れ替わってしまいました。
AB→ABになってほしいところを、
AB→BAになってしまいました。
0010デフォルトの名無しさん
2007/06/25(月) 14:23:280011デフォルトの名無しさん
2007/06/25(月) 16:21:55こんな感じかな
unsigned NumLen()
{
unsigned c = 0,num=0;
FILE *fp = fopen("text.txt","r");
while( (c = fgetc(fp)) != EOF)
num++;
return num;
}
0012デフォルトの名無しさん
2007/06/25(月) 17:36:250013デフォルトの名無しさん
2007/06/25(月) 20:30:33debian:~$ gcc ch05-04.c
ch05-04.c:2:19: error: conio.h: そのようなファイルやディレクトリはありません
はじめてconio.hというのを見ました。ちなみにconio.h というのは必要ですか?
独習cに下みたいなのがあったのですけど、これってgetchar でできますよね?
#include <stdio.h>
#include <conio.h>
int main(void)
{
char mess[80];
int i;
printf("input message (less than 80 letters)\n");
for(i=0; i<80; i++){
mess [i] = getche();
if(mess[i] == '\r')break;
}
printf("\n");
for(i=0;mess[i] != '\r' ;i++) printf("%c",mess[i] + 1);
return 0;
}
0014デフォルトの名無しさん
2007/06/25(月) 20:35:41conio.hの存在意義を教えてください。
0015デフォルトの名無しさん
2007/06/25(月) 20:41:000016デフォルトの名無しさん
2007/06/25(月) 21:28:002chと併用して使える、良質な即日系サイトのみを薦めております。
↓↓↓
【ブログ】http://deaiload.blog109.fc2.com/
0017デフォルトの名無しさん
2007/06/25(月) 22:07:12文字色変えたりとかもconio.hで出来るよ。8色しかなかったっけ?
別にconio.hでなくてもできるのあるだろうけど。標準ではもちろん無理。
0018デフォルトの名無しさん
2007/06/26(火) 00:34:43上のプログラムは、オセロを作ってるんですが
関数test2でswichの中のcase5がうまく実行されません
そこで、どこまで実行できてるのか確かめるため
printfを途中に入れてみたところ、何故かうまく実行できるようになってしまいましたw
もちろん、printfをのけると、うまく実行してくれません。。。
一応動くので問題ないんですが、何故なんでしょうか?
0019デフォルトの名無しさん
2007/06/26(火) 00:46:410020デフォルトの名無しさん
2007/06/26(火) 01:30:28test()で、x, yに対してノーチェックでx - 1などとしているので配列外を参照してしまっている。
ところで、いつからオセロは10x10になったんだ?
0021デフォルトの名無しさん
2007/06/26(火) 01:47:56スタックの意味が分からないので調べ中。。
thx!
>>20
thx
関数testを次のように改変しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4397.txt
が、やっぱり実行してくれません><
作ってる時に確か10×10ぐらいかな〜と思ったのでw
002218
2007/06/26(火) 02:03:26(違ったらスマソ)
確かに多次元配列を全ての関数に渡したりしてるけど
printfを入れると解消する問題なので、原因は別かなと思います
0023デフォルトの名無しさん
2007/06/26(火) 02:09:03スタックという変数を格納する場所の破壊
0025デフォルトの名無しさん
2007/06/26(火) 03:38:40とりあえず落ちるときの入力パターンぷりーず。
0026デフォルトの名無しさん
2007/06/26(火) 04:38:17取り敢えずロジックをとばし読みして疑問に思ったところ
関数testの中で
> if(array[x-1][y]==2){ //上
ってやってるところがあるけど、xは0になる可能性があるよね。
てことは配列の領域外を参照していることになるけど、これは大丈夫?
配列の添え字にy-1を与えているところも同様。
次に関数test2の中で
> for(;y<=9;n++){
ってやってるところがある。でもyの初期値が設定されていないような気がする。
これだと(yに割り当てられた)スタックにたまたま積まれていた値の違いで動作が変わる可能性がある。
この辺の初期化してない変数なんかは言ってる問題が起きる典型的なパターンなんだけど。
0027デフォルトの名無しさん
2007/06/26(火) 04:39:54void ai (int array[][10])
{
srand(time(NULL));
array[rand() % 10][rand() % 10] = 2;
}
srandはここでやるべきではないと思う。mainの先頭で一度やれば十分というか、そうすべき。
0028デフォルトの名無しさん
2007/06/26(火) 05:21:22オレも今度投げてみよう。
0029デフォルトの名無しさん
2007/06/26(火) 05:29:130030デフォルトの名無しさん
2007/06/26(火) 06:27:16例えばn=3,l=2のときは{0,1}{0,2}{0,3}{1,2}{1,3}{2,3}{1}{2}{3}となるようなものです
お願いします
0031デフォルトの名無しさん
2007/06/26(火) 06:27:180032デフォルトの名無しさん
2007/06/26(火) 06:35:12課題は自分でやれ。な?
0033デフォルトの名無しさん
2007/06/26(火) 06:44:06暇つぶししたいくらい暇なときには突っ込んであげるよ。
0034デフォルトの名無しさん
2007/06/26(火) 06:47:01やっぱり関数ai内に入れておくべき
0035デフォルトの名無しさん
2007/06/26(火) 06:47:27妄言はそこまでにしとけ。
0036デフォルトの名無しさん
2007/06/26(火) 06:50:50time(NULL) が返す値が、前回呼び出されたときと同じになるような、1秒以内に
連続して呼び出されるときは rand()が返すパターンが同じになるぞ。
0037デフォルトの名無しさん
2007/06/26(火) 06:52:38フラグを入れるんだよ
static int flag;
if(flag==0){
srand(time(NULL));
flag = 1;
}
これでおk
0038デフォルトの名無しさん
2007/06/26(火) 06:53:25先に言え、後だしで自分の落ち度を補って逃げるのは卑怯だぞ
0039デフォルトの名無しさん
2007/06/26(火) 06:56:310040デフォルトの名無しさん
2007/06/26(火) 06:58:58flagの最初の値は?呼び出されるたびに if(flag==0) を評価するの?無駄が多い。
mainで一度やっとけ。
0041デフォルトの名無しさん
2007/06/26(火) 06:59:26関数呼び出すたびに無駄なチェック入れんの?
0042デフォルトの名無しさん
2007/06/26(火) 07:03:35他の関数でも同じことやるの?
有り得ないよね。
0043デフォルトの名無しさん
2007/06/26(火) 07:06:31初期化は一度のみ。
それを保証するには main で初期化するのが一番。
004418
2007/06/26(火) 08:44:31答えてくれた方、申し訳ない&thx!
そ し て
問題点分かりました!
>>26の言うとおり、配列の要素が-になるのを回避、x,yを0で初期化したら
直りました!初期化しておかないと駄目なんだな!
あと、srandはとりあえずmainでやっておきます!
0045デフォルトの名無しさん
2007/06/26(火) 08:54:360047デフォルトの名無しさん
2007/06/26(火) 09:56:00#include <stdio.h>
main()
{
printf("私の名前は、山本一郎です\n");
}
(名前はrei1_2)というプログラムをビルドすると、
------ ビルド開始: プロジェクト: START_C, 構成: Debug Win32 ------
コンパイルしています...
rei1_2.c
リンクしています...
rei1_2.obj : error LNK2005: _main は既に rei1_1.obj で定義されています。
C:\Users\tokimaru\Documents\Visual Studio 2005\Projects\C\START_C\Debug\START_C.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ビルドログは "file://c:\Users\tokimaru\Documents\Visual Studio 2005\Projects\C\START_C\START_C\Debug\BuildLog.htm" に保存されました。
START_C - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
というエラーが出てしまいます。
何所がおかしいのかよくわかりません。
教えてください。お願いします。
0048デフォルトの名無しさん
2007/06/26(火) 10:01:52> _main は既に rei1_1.obj で定義されています
そりゃだめだ。リンクさせないで別物のソースとしてコンパイルせい
0049デフォルトの名無しさん
2007/06/26(火) 10:05:32新しくプロジェクトを作るか。
0050デフォルトの名無しさん
2007/06/26(火) 10:15:37005147
2007/06/26(火) 10:17:04って貼っちゃいましたけど、この情報から個人情報が割れたり、PCに侵入されたりしませんよね?
0052デフォルトの名無しさん
2007/06/26(火) 10:28:020053デフォルトの名無しさん
2007/06/26(火) 10:34:14ところで、48さん、49さん、50さんの言うようなやり方以外の方法ありますかね?
僕は初心者なのでよくわかりません。
0054デフォルトの名無しさん
2007/06/26(火) 10:39:48だから他と被らない関数名にすりゃええやろ。
0055デフォルトの名無しさん
2007/06/26(火) 10:45:34じゃあいったんプロジェクトから1を外せ
選択してDELキーで消える
ファイルそのものは残るから、あとで既存の追加で戻せる
0056デフォルトの名無しさん
2007/06/26(火) 10:49:360057デフォルトの名無しさん
2007/06/26(火) 11:18:18struct node { int item; link next; };
typedef link Node;
link deleteNext(link x){
link t = x->next; x->next = t->next;
return t; }
link t=x->next;
新たなlink tを作り、tにxの指し示すリンクと同じitem,リンク先を持たせている
x->next = t->next;
xのリンク先はtが指し示すリンク先にする
で合ってますか?
だとしたらreturnでtだけ返すのだからx->nextを指定しても何の意味もないと思うのですが、何か記号の意味を履き違えている気がします
0058デフォルトの名無しさん
2007/06/26(火) 11:36:45恐ろしいコードに見える。
0059デフォルトの名無しさん
2007/06/26(火) 11:46:36関数の動きはこんな感じ。
・xの指す先をtにコピー。xの指す先をtの指す先に変更。tを戻す。
つまり、リンクリストからxの指す先を外し、それを返している。
>>58
削除関数だからmalloc()は要らないわけだし、tを返すのは呼び出し元でfree()するためだろ。
0060デフォルトの名無しさん
2007/06/26(火) 11:48:24link はポインタだから作るわけじゃないよ、アドレスを保存してるだけ。
A→B→C
の状態を
A→C
に変えてる
Bは宙に浮いてる状態で返してる。消すためだろう。
0061デフォルトの名無しさん
2007/06/26(火) 11:49:27--
link t = x->next; // 削除対象(へのポインタ)を一旦保存
x->next = x->next->next; // 削除対象を迂回するように接続しなおし
return t; // 削除対象を返却
0062デフォルトの名無しさん
2007/06/26(火) 13:03:00例、ファイルの中身が
This is a pen
の場合は、nに達した時点で0を返すのか、EOFで0を返すのか
0063デフォルトの名無しさん
2007/06/26(火) 13:05:150064デフォルトの名無しさん
2007/06/26(火) 13:10:090065デフォルトの名無しさん
2007/06/26(火) 13:17:26while(!feof(fp)){
ch = fgetc(fp);
printf("%c : %d \n",ch,ch);
if(ferror(fp)){
printf("ファイルの読み込みエラー\n");
exit(1);
}
l++;
}
を実行してみたら-1も出力したのでEOFの次でループ終了ですかね
0066デフォルトの名無しさん
2007/06/26(火) 13:27:090067デフォルトの名無しさん
2007/06/26(火) 13:28:430068デフォルトの名無しさん
2007/06/26(火) 13:29:310069デフォルトの名無しさん
2007/06/26(火) 13:30:580070デフォルトの名無しさん
2007/06/26(火) 13:32:01ならいいんだけど。
0071デフォルトの名無しさん
2007/06/26(火) 13:32:230072デフォルトの名無しさん
2007/06/26(火) 13:34:280073デフォルトの名無しさん
2007/06/26(火) 13:45:050074デフォルトの名無しさん
2007/06/26(火) 13:46:160075デフォルトの名無しさん
2007/06/26(火) 13:46:580076デフォルトの名無しさん
2007/06/26(火) 13:47:06読み込んでるってことじゃないの?
0077デフォルトの名無しさん
2007/06/26(火) 13:48:29#include <stdio.h>
#include <ctype.h>
int main() {
int ch, b;
FILE *fp = fopen("hoge.txt", "r");
if(fp == NULL) {
return 1;
}
do {
ch = fgetc(fp);
b = feof(fp);
printf("%c : %02X / %d\n", ch, ch, b);
} while(!b);
}
T : 54 / 0
h : 68 / 0
i : 69 / 0
s : 73 / 0
: 20 / 0
i : 69 / 0
s : 73 / 0
: 20 / 0
a : 61 / 0
: 20 / 0
p : 70 / 0
e : 65 / 0
n : 6E / 0 ← n が読み込まれて、ファイルポインタは EOF に達しはしているが、まだ読み込んでないためそこが EOF かどうか分からないでいる
? : FFFFFFFF / 1 ← EOF が読み込まれたため、EOF に達した事が判明し、feof が真を返すようになる
0078デフォルトの名無しさん
2007/06/26(火) 13:50:58-1 が返って来るのは、当然読み込んでるということ。
でも、その後にそれを表示してから、
その後にようやく feof をチェックしてるでしょ。
そっちのプログラムは。
で、そこでループが終了してる。
つまり、-1 が読み込まれた後に feof を実行すると
真を返すようになっている、ということだ。
0079デフォルトの名無しさん
2007/06/26(火) 14:01:32「EOFを読み込んでいる」のではない。
0080デフォルトの名無しさん
2007/06/26(火) 14:03:010081デフォルトの名無しさん
2007/06/26(火) 14:10:27fgetcは読んだ文字がないので-1を返しました
feofは真を返しました
って話?
0082デフォルトの名無しさん
2007/06/26(火) 14:14:36feofは偽を返しました
fgetcはもう読み込める文字がないので-1を返しました
feofは真を返しました
こうだな。
0083デフォルトの名無しさん
2007/06/26(火) 14:15:49ファイルポインタはファイルの末端に移動してきました
feofは偽を返しました
fgetcはもう読み込める文字がないので -1 を返しました
feofは真を返しました
こうか?
0084デフォルトの名無しさん
2007/06/26(火) 14:20:15の方がいいんじゃないの?
0085デフォルトの名無しさん
2007/06/26(火) 14:26:530086デフォルトの名無しさん
2007/06/26(火) 14:27:590087デフォルトの名無しさん
2007/06/26(火) 14:30:54それは趣旨が違うと思った
>feof()はファイルの終わりをどこで判定してるんでしょうか?
0088デフォルトの名無しさん
2007/06/26(火) 15:04:57仮想メモリが増えてしまいます。
#include <pthread.h>
#define THREAD_COUNT 50
void *thread_func(void *arg);
int main()
{
char command[128];
int i;
pthread_t thread[THREAD_COUNT];
sprintf(command, "grep VmSize /proc/%d/status", getpid());
for (i = 0; i < 3; i++) {
sleep(1);
system(command);
}
for (i = 0; i < THREAD_COUNT; i++) {
pthread_create(&thread[i], NULL, thread_func, &i);
pthread_detach(thread[i]);
}
for (i = 0; i < 10; i++) {
sleep(1);
system(command);
}
return 0;
}
008988続き
2007/06/26(火) 15:06:07{
sleep(3);
}
が動かしたソースで、実行結果が↓こんな感じです。
VmSize: 1392 kB
VmSize: 1392 kB
VmSize: 1392 kB
VmSize: 410996 kB
VmSize: 410996 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
VmSize: 42356 kB
009088続き
2007/06/26(火) 15:10:54410996kBは大体1392+8192kB×50(スレッド数)
42356kBは大体1392+8192kB×5
ぐらいになっているようでした。
8192kBはスタックサイズから来ているようで、スタックサイズを
変更してみたら仮想メモリサイズは変わりましたが、数式的には
上記と同じでした。
また、スレッド数を変えると410996kBのところがスレッド数に
応じた数に変わるのですが、最終的に落ち着く42356kBは
変わりませんでした。
増え続けることはないのでメモリリークとは違うと思うのですが
気にすることはないでしょうか。×5がどこから来ているのかとか
どうも気になってしまって・・・
何か分かりましたら教えてください。
009188続き
2007/06/26(火) 15:11:470092デフォルトの名無しさん
2007/06/26(火) 15:36:1542356kB で止まるのだとしたら、
内部でいくつかの領域を確保したままにしてるのかも?
次にまた使うときのためにとか。
MacOSX 10.4.10 gcc 4.0.1 だと、
スレッド1つ分のサイズが残るみたいだ。
0093デフォルトの名無しさん
2007/06/26(火) 15:36:17仮想メモリサイズの制限を越えたための拡張とかは?
009488続き
2007/06/26(火) 15:49:52色々観察してみると、同時に実行されるスレッド数が1つの場合、
1392kB+8192kB×1くらいになって、スレッドが終了しても
減りませんが、何度スレッドを起動してもこれ以上増えることは
ありません。
同時に実行されるスレッド数が5までの場合もこの傾向は同じ。
6を超えるとスレッド実行中の仮想メモリは増えるけど、スレッドが
終了すると5スレッド分の仮想メモリ量までは戻る、という
感じです。
5スレッド分は次回使いまわすために確保するようになってる
んでしょうかね。
>>93
ulimit -a で見たら、仮想メモリはunlimitedに設定されて
いました。
0095デフォルトの名無しさん
2007/06/27(水) 00:41:18http://headlines.yahoo.co.jp/hl?a=20070626-00000024-inet-inet
0096デフォルトの名無しさん
2007/06/27(水) 00:50:55あらら。
0097デフォルトの名無しさん
2007/06/27(水) 01:29:450098デフォルトの名無しさん
2007/06/27(水) 01:32:39さも知っていたかのようなことをいうやつに限って、そいつ自身が
ありきたりのタブーをやらかしていることがある。
0099デフォルトの名無しさん
2007/06/27(水) 01:34:17昔から問題は指摘されてたんだしさ
0100デフォルトの名無しさん
2007/06/27(水) 01:39:420101デフォルトの名無しさん
2007/06/27(水) 02:10:140102デフォルトの名無しさん
2007/06/27(水) 02:57:330103デフォルトの名無しさん
2007/06/27(水) 03:11:340104デフォルトの名無しさん
2007/06/27(水) 03:12:03数え始めた瞬間に桁上がりの無限ループ
0105デフォルトの名無しさん
2007/06/27(水) 04:07:08ここであらぬ妄想をぶっこく香具師らに推論させたいのよ ♠
0106デフォルトの名無しさん
2007/06/27(水) 04:14:33>>102見てぱっと思ったから書いただけじゃ
0107デフォルトの名無しさん
2007/06/27(水) 04:15:34http://pc11.2ch.net/test/read.cgi/tech/1181735298/966
0108デフォルトの名無しさん
2007/06/27(水) 08:26:210109デフォルトの名無しさん
2007/06/27(水) 08:29:360110デフォルトの名無しさん
2007/06/27(水) 09:41:24自分で作って自分で使うバッファは好きなの使えばいいと思う
0111デフォルトの名無しさん
2007/06/27(水) 10:00:38>さも知っていたかのようなことをいう
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
>>110
勿論。
0112デフォルトの名無しさん
2007/06/27(水) 10:12:48> 君が無知だっただけ。
???>>98のどこをどう読んだら無知になるんだろうか?
0113デフォルトの名無しさん
2007/06/27(水) 10:22:34http://ja.wikipedia.org/wiki/%E4%B8%80%E9%80%B2%E8%A8%98%E6%95%B0%E6%B3%95
0114デフォルトの名無しさん
2007/06/27(水) 10:52:540115デフォルトの名無しさん
2007/06/27(水) 11:00:28111 名前:デフォルトの名無しさん 投稿日:2007/06/27(水) 10:00:38
>>98
>さも知っていたかのようなことをいう
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
知っててもおかしくはない…というより寧ろ、技術者としては知ってて当然。
君が無知だっただけ。
0116デフォルトの名無しさん
2007/06/27(水) 11:02:10技術者としては知ってて当然。 技術者としては知ってて当然。 技術者としては知ってて当然。
技術者としては知ってて当然。 技術者としては知ってて当然。 技術者としては知ってて当然。
strcpyの問題点を知っているだけで技術者気取りになれる新米プログラマに失笑です ><;
ちなみに、そんなこと俺も当然知ってたけど、なんで俺が無知になるわけ?w
Lhacaにそれが使われていたなんて、俺は知らなかったけど、strcpyくらい当然知ってましたよ ( ^ー^)b
0117デフォルトの名無しさん
2007/06/27(水) 11:03:560118デフォルトの名無しさん
2007/06/27(水) 11:04:24>>110
勿論。
↑おいおい、すでに問題としてあげられたのに、何知ったかぶっこいて同意してんの?(苦笑)
>>111 ←こいつ最高に知ったかのアホだな。恥ずかしい。プログラマなんてやめた方が良いぞ?
人生の大半を無駄にして終わるぞ?
0119デフォルトの名無しさん
2007/06/27(水) 11:17:59>>97 = >>99 = >>111 < こういう奴が三流プログラマになって世にあらぬ
欠陥品を流通させちゃうんだよね。で、後でアップデートパッチでサポート。
サポートしてんだからちゃんと仕事してますよって間違ったアピールをして
ユーザが離れていって廃れるソフトウェア会社勤務乙。
0120デフォルトの名無しさん
2007/06/27(水) 11:35:03>痛すぎ、必死すぎ
0121デフォルトの名無しさん
2007/06/27(水) 11:50:470122デフォルトの名無しさん
2007/06/27(水) 12:10:24CとC++とC#ってどんな違いがあるんでしょうか?
0123デフォルトの名無しさん
2007/06/27(水) 12:28:230124デフォルトの名無しさん
2007/06/27(水) 12:29:22仕様を聞いてるのかコーディングを聞いてるのか
0125デフォルトの名無しさん
2007/06/27(水) 13:37:210126デフォルトの名無しさん
2007/06/27(水) 13:41:57必要ならエンコードすればいい。
0127デフォルトの名無しさん
2007/06/27(水) 13:47:55まずUTF-8に変換して、1バイトずつ見て非ASCIIを変換。
0128デフォルトの名無しさん
2007/06/27(水) 13:59:30数値を16進文字列にするやりかたがわからないとかじゃないの?
0129デフォルトの名無しさん
2007/06/27(水) 14:13:40sprintf を使う場合はバッファオーバーフローに注意だな。
別にこの程度なら自前で変換してもいいんだけどね。
0130デフォルトの名無しさん
2007/06/27(水) 14:32:11ありがとうございます、>>128さんの言うとおりでした
>>129さんを参考にしてやってみます
0131デフォルトの名無しさん
2007/06/27(水) 14:47:25C言語って色々命令作れる前に、最初からhファイルを読み込んで使える、
いわばインストール時に標準搭載されている命令ってあるじゃないですか。studio.hのprintfやmath.hのsqrtとか
ああいう命令を分かりやすくどんな用法で使えばいいのかが全て網羅してある
本またはサイトはありますか?
0132デフォルトの名無しさん
2007/06/27(水) 14:49:28標準ライブラリ関数でぐぐれ
0133デフォルトの名無しさん
2007/06/27(水) 14:53:42JIS
0134デフォルトの名無しさん
2007/06/27(水) 15:15:53命令て。
まず入門書くらい買え。
0135デフォルトの名無しさん
2007/06/27(水) 15:16:24じゃ、「作ってわか(ry
0136デフォルトの名無しさん
2007/06/27(水) 17:01:07ありがとうございます。参考になりました
0137デフォルトの名無しさん
2007/06/27(水) 20:05:46下のソースではうまく消えません。もしよければどのようにすればいいか指導お願いします。
#include <stdio.h>
void kesi(char *str){
char c;
while(*str!='\0') {
c=*str;
if(c<'0'||c>'9'){ //数字でないならば
*str=c;
}
str++;
}
}
int main(void){
char str[100];
scanf("%s",str);
kesi(str);
printf("%s",str);
return 0;
}
0138デフォルトの名無しさん
2007/06/27(水) 20:12:34void kesi(char *str) {
char *to = str;
while (*str != '\0') {
char c =*str;
if (!isdigit(c)) {
*to = c;
to++;
}
str++;
}
*to = '\0';
}
0139デフォルトの名無しさん
2007/06/27(水) 20:23:48またポインタ宣言しなければ、ダメなんでしょうか??
あと初心者なのでisdigitとかまだよくわからないです…。もしよければアドバイスおねがいします
0140デフォルトの名無しさん
2007/06/27(水) 20:27:420141デフォルトの名無しさん
2007/06/27(水) 20:30:57コンパイルは通ったんですけど…なぜポインタを使うのかよくわからなくて…。
0142デフォルトの名無しさん
2007/06/27(水) 20:32:55詰めた後の文字を指すのにtoを使っている。
0143デフォルトの名無しさん
2007/06/27(水) 20:39:590144デフォルトの名無しさん
2007/06/27(水) 20:42:040145デフォルトの名無しさん
2007/06/27(水) 21:15:37でも有名な話ですよね。
0146デフォルトの名無しさん
2007/06/28(木) 00:02:40#define QUEUE 5
static int i = 0;
i = (i+1)%QUEUE;
で次の添字が得られる
とか書いてあるんですが、よくわかりません。
常にiは0である気がするんですが、どこが間違っています?
0147デフォルトの名無しさん
2007/06/28(木) 00:13:33(1+1) % 5 == 2
(2+1) % 5 == 3
(3+1) % 5 == 4
(4+1) % 5 == 0
(0+1) % 5 == 1
0148デフォルトの名無しさん
2007/06/28(木) 00:16:590149デフォルトの名無しさん
2007/06/28(木) 00:21:510150デフォルトの名無しさん
2007/06/28(木) 00:22:37ありがとうございます。
ですがもう少し。
a%bってあったら「aをbで割った余り」ですよね?
だとすると、
(0+1)%5 = 1%5 = 0?
ではないのですか?
0151デフォルトの名無しさん
2007/06/28(木) 00:23:13何がありますか?
教えてください
0152デフォルトの名無しさん
2007/06/28(木) 00:23:30スレ汚しごめんなさい。
0153デフォルトの名無しさん
2007/06/28(木) 00:23:511は5で割り切れないので終了。余り 1
0154デフォルトの名無しさん
2007/06/28(木) 00:24:310155デフォルトの名無しさん
2007/06/28(木) 00:27:32strncat,strcpy,ctrncpy,sprintf,sscanf
ざっと思いつくのでこの程度。
あと、可変個引数使うときにある、printfのやつ。
あんま使ったこと無いから忘れたけど、vsprintfだっけ?
0156デフォルトの名無しさん
2007/06/28(木) 00:28:03どちらさまですか?
0157デフォルトの名無しさん
2007/06/28(木) 00:28:28おぬしは間違いなくstaticについて理解していない。
なぜstaticが付いているのかを考えるのじゃ
0158デフォルトの名無しさん
2007/06/28(木) 01:02:20BASICのgotoみたいな命令はないのでしょうか?
0159デフォルトの名無しさん
2007/06/28(木) 01:02:33というかできなかったのです。一瞬だけ実行されてすぐ消えてしまいます。
どうすればいいかわかりますか?
0160デフォルトの名無しさん
2007/06/28(木) 01:05:29gotoというそのまんまの命令がある
loop:
printf("test");
goto loop;
みたいに使う
>>159
コマンドプロンプト経由で使えばおk
0161デフォルトの名無しさん
2007/06/28(木) 01:06:300162デフォルトの名無しさん
2007/06/28(木) 01:10:52そのファイル名のみを相手のコマンドプロントでコマンドさせるってことですか?
0163デフォルトの名無しさん
2007/06/28(木) 01:12:280164デフォルトの名無しさん
2007/06/28(木) 01:13:18int main(void){
start:
〜いろいろな処理〜
if(条件を満たしていない) goto start;
多分普通の人であれば
int main(void){
do{
〜いろいろな処理〜
}while(条件を満たしていない);
0165デフォルトの名無しさん
2007/06/28(木) 01:13:310166デフォルトの名無しさん
2007/06/28(木) 01:14:04渡したファイルはexe?
コマンドプロントで、exeのあるディレクトリに移動して実行すればオケ。
0167デフォルトの名無しさん
2007/06/28(木) 01:15:06一般的にはポインタが難しいと言われる。
0168デフォルトの名無しさん
2007/06/28(木) 01:16:061.コマンドプロンプトを起動してもらう
2.コマンドプロンプトにexeファイルをドラッグアンドドロップしてもらう
3.Enterキーを押してもらう
これが一番手軽だと思う
0169デフォルトの名無しさん
2007/06/28(木) 01:17:32ポインタって何に便利なの?
0170デフォルトの名無しさん
2007/06/28(木) 01:18:240172デフォルトの名無しさん
2007/06/28(木) 01:20:43必要にならないと分かりにくいと思う
0173デフォルトの名無しさん
2007/06/28(木) 01:24:36Nバイトの構造体配列をソートして並び替えることを考える。
このとき、Nバイトのコピーが頻繁に発生することになる。
構造体に対するポインタの配列として保存していた場合、ポインタのソートで済むことになる。
例えばポインタが4バイト、構造体が100バイト超とかで配列が1000超とかだとすれば
どちらが効率的かはわかるよね?
0174デフォルトの名無しさん
2007/06/28(木) 01:24:45どうすればいいですか?
171と同一人物です
0175デフォルトの名無しさん
2007/06/28(木) 01:29:33お前がその便利さを知らない、説明できないだけだろ?えせプログラマは
こんなところで質問者をたぶらかしてないで、へちょいプログラマで満足してろよ?
0176デフォルトの名無しさん
2007/06/28(木) 01:29:34ファイルを保存している場所と同じ場所にexeファイルがあると思われ
0177デフォルトの名無しさん
2007/06/28(木) 01:30:55へちょくないあなたがへちょい>>170の代わりに答えてあげてください
0178デフォルトの名無しさん
2007/06/28(木) 01:34:22あるにはあるのですが、ドラッグアンドドロップはできませんし、
そのディレクトリに移動して 〜.exe と打っても実行されません
0179デフォルトの名無しさん
2007/06/28(木) 01:40:02コマンドプロンプトって何かわかってるか?
0180デフォルトの名無しさん
2007/06/28(木) 01:42:45わかってるつもりです
0181デフォルトの名無しさん
2007/06/28(木) 01:43:020182デフォルトの名無しさん
2007/06/28(木) 01:45:17「notepad」って打ってメモ帳が起動するか?
ドラッグアンドドロップでフルパスが表示されて、エンター押して実行できると思ったんだけどなぁ
0183デフォルトの名無しさん
2007/06/28(木) 01:48:14メモ帳はでてきます。
でもファイルをドロップしようとすると○の中に×が入ってるようなのが出てきて
できません
0184デフォルトの名無しさん
2007/06/28(木) 01:49:570185デフォルトの名無しさん
2007/06/28(木) 01:50:51ティ○ポの中にオ×コが入ってるようなので とか妄想しちゃうぞwwwww
0186デフォルトの名無しさん
2007/06/28(木) 01:51:04xpとかだとドラッグアンドドロップできないようになってるのかな?
じゃぁあきらめてフルパス(c:\cpad\test.exeみたいなやつ)を打って実行するべし
入力面倒だけど。
0187デフォルトの名無しさん
2007/06/28(木) 01:54:18Vistaですよ。
かなりめんどいってことですね〜〜…
ありがとうございました
0188デフォルトの名無しさん
2007/06/28(木) 01:55:230189デフォルトの名無しさん
2007/06/28(木) 01:56:120190デフォルトの名無しさん
2007/06/28(木) 01:57:04あっ武勇伝、武勇伝、武勇でんでんででんでんっ♪
0191デフォルトの名無しさん
2007/06/28(木) 02:41:460192デフォルトの名無しさん
2007/06/28(木) 02:43:500193デフォルトの名無しさん
2007/06/28(木) 03:03:13http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
0194デフォルトの名無しさん
2007/06/28(木) 07:10:08下のソースコードだと2つの文字列が改行にいくまで繰り返すって言う意味ですかね?
while((*s1 != '\n') || (*s2 != '\n'))
{〜〜
s1++;
s2++}
0195デフォルトの名無しさん
2007/06/28(木) 07:12:030196デフォルトの名無しさん
2007/06/28(木) 07:18:58ホワイルの中身の意味が知りたくて。
0197デフォルトの名無しさん
2007/06/28(木) 07:21:18そのロジックだと、s1、s2の改行文字の位置が揃っていないと誤動作しそうだが。
#つーか、>194自身が挙げたサンプルで死亡確定だな。
0198デフォルトの名無しさん
2007/06/28(木) 07:57:55s1にもs2にも改行コードないからプログラム起動して即吹っ飛ぶ。
s1がABC\n、s2がAB\nだったとしても一致しないのでやっぱり吹っ飛ぶ。
そのコードはs1とs2の改行コード位置が一致した場合にループ抜ける。
0199デフォルトの名無しさん
2007/06/28(木) 08:00:030200デフォルトの名無しさん
2007/06/28(木) 08:45:230201デフォルトの名無しさん
2007/06/28(木) 08:49:39これの IEEE 方式。
ttp://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
0202デフォルトの名無しさん
2007/06/28(木) 08:50:57IEEE 方式のマシンが多い、と。
別にエクセス 64 のマシンでも C は使える。
C かどうかで決まるものではなく、
CPU が何かによって決まるもの。
0203デフォルトの名無しさん
2007/06/28(木) 10:07:580204デフォルトの名無しさん
2007/06/28(木) 11:11:40>>201に書いてあるだろ
0205デフォルトの名無しさん
2007/06/28(木) 11:14:24だから小数点以下いくつという形の精度じゃないと。
「浮動」小数点ってのは、そういう事だ。
0206デフォルトの名無しさん
2007/06/28(木) 12:07:340207デフォルトの名無しさん
2007/06/28(木) 14:02:25但しそれに掛ける10のn乗という指数が付くわけだが。
0208デフォルトの名無しさん
2007/06/28(木) 14:16:16本当は2進数で考えないといけないんだけど。
0209207
2007/06/28(木) 14:21:03#include <values.h>
int main(void)
{
printf("%d, %Lg, %Lg\n", sizeof(long double), LDBL_MAX, LDBL_MIN);
printf("%d, %g, %g\n", sizeof(double), DBL_MAX, DBL_MIN);
printf("%d, %g, %g\n", sizeof(float), FLT_MAX, FLT_MIN);
return 0;
}
gcc 4.1.1 (i386-redhat-linux) で上記のソースをコンパイルして
動かすと結果はこう出る。
12, 1.18973e+4932, 3.3621e-4932
8, 1.79769e+308, 2.22507e-308
4, 3.40282e+38, 1.17549e-38
e から後ろの部分が指数で「掛ける10のn乗」を表す。
3.3621e-4932 は 3.3621 掛ける10の -4932 乗だ。
但し上記の結果は環境依存で、同じ gcc でもコンパイルオプションに
よっては変わってしまう。だから全てについてこうであるという保証は
できない。(values.h も gcc 独自のヘッダかも知れない)。ただ大雑把に
言えることは float よりは double、また double よりは long double
の方が多くの範囲をカバーできるかも知れないというだけだ。
(コンパイラによっては long double はないかも知れないが)。
0210デフォルトの名無しさん
2007/06/28(木) 17:00:08209が使っている定数は<float.h>で提供されている。
0211デフォルトの名無しさん
2007/06/28(木) 17:01:51しかし、double と同じサイズのこともある。
0212デフォルトの名無しさん
2007/06/28(木) 17:10:52質問が抽象的すぎてごめんなさい
0213デフォルトの名無しさん
2007/06/28(木) 17:12:060214デフォルトの名無しさん
2007/06/28(木) 17:42:10putchar('\n')
ってのはどういうことですか?
0215デフォルトの名無しさん
2007/06/28(木) 17:48:00通常は画面だと思っていい。
\n はわかるか?
改行コードをあらわすエスケープシーケンスだ
つまり、画面上で改行する、ということ
0216デフォルトの名無しさん
2007/06/28(木) 17:50:19printf("\n")
とは違うんですか?
0217デフォルトの名無しさん
2007/06/28(木) 18:07:45たまたまprintfで1文字出力するなら、putchar と同じ様になるな。
でも、printf の第一引数の文字列は % とか入ると違ってくるけどな。
0218デフォルトの名無しさん
2007/06/28(木) 18:08:09'\n' は文字
0219デフォルトの名無しさん
2007/06/28(木) 18:31:55というか、putcharでできることはprintfでもできるんですか?
0220デフォルトの名無しさん
2007/06/28(木) 18:32:550221デフォルトの名無しさん
2007/06/28(木) 18:35:29プログラムの内容には関係ないですよね?
0222デフォルトの名無しさん
2007/06/28(木) 18:36:120223デフォルトの名無しさん
2007/06/28(木) 18:40:48% が出てきたらどうするかとかいう処理を行ってる。
ま、出力自体のコストに比べりゃ微々たる差だがね。
0224デフォルトの名無しさん
2007/06/28(木) 18:41:45printfで全部まかなうのもいいし、使い分けるのもいい。
同じことができるなら、片方はまったく無駄だと思ってるなら
それはキミが初心者だから。
0225デフォルトの名無しさん
2007/06/28(木) 18:42:180226デフォルトの名無しさん
2007/06/28(木) 18:43:47意外とされてるんだなあ。
0227デフォルトの名無しさん
2007/06/28(木) 18:48:020228デフォルトの名無しさん
2007/06/28(木) 18:52:36こういうのってどうやって知るんですか?
○は□に最適化されるとか
0229デフォルトの名無しさん
2007/06/28(木) 18:55:28両方のパターンを書いてコンパイルして
バイナリ比較して等しくなるかどうか確認したのでも。
0230デフォルトの名無しさん
2007/06/28(木) 18:57:450231デフォルトの名無しさん
2007/06/28(木) 19:08:410232デフォルトの名無しさん
2007/06/28(木) 19:31:120233デフォルトの名無しさん
2007/06/28(木) 20:31:57一般人は掲示板で知る。
0234デフォルトの名無しさん
2007/06/28(木) 21:16:58普通のハッカーなら掲示板でヒントを読んで自分で試して知るだろうな。
0235ぴっころ
2007/06/28(木) 21:32:592進数で表した時、2の倍数は最下位ビットが0になる事が分かりました。
では3の倍数は何かこのような決まりはあるのでしょうか?
0236デフォルトの名無しさん
2007/06/28(木) 21:33:540237ぴっころ
2007/06/28(木) 21:36:372進法で表した時です。
0238デフォルトの名無しさん
2007/06/28(木) 21:37:000239デフォルトの名無しさん
2007/06/28(木) 21:38:42ヒント1 : 2の倍数とは偶数のこと
ヒント2 : 3の倍数を並べてみよう
0240デフォルトの名無しさん
2007/06/28(木) 21:45:183 (11) で割ったら余りが 0 になるということくらいだな。
0241デフォルトの名無しさん
2007/06/28(木) 21:45:44数学の問題だなあ。
3で割ると余り0
なんてのはあまり意味ないか・・・。
10進数で表した時に各桁を足して3の倍数ならそれは3の倍数
(123は1+2+3=6なので3の倍数)なんてのもあるが、関係ないね。
0242デフォルトの名無しさん
2007/06/28(木) 21:51:230243ぴっころ
2007/06/28(木) 21:51:33>>239
11
110
1101
1100
1111
10101
11000
11011
繰り返しもあるような無いような・・・。
ちょっと僕のキャパでは厳しいです・・・。
0244デフォルトの名無しさん
2007/06/28(木) 21:53:5918はどこへ消えた
0245デフォルトの名無しさん
2007/06/28(木) 21:54:19発想はいいがちょっと惜しいな。
1000000001の間に11を入れて1011000001も3の倍数だ。
0246デフォルトの名無しさん
2007/06/28(木) 21:55:49うそだ!
NHKのじゃじゃまる、ぴっころ、ぽろりのぴっころだろ?
0247デフォルトの名無しさん
2007/06/28(木) 22:06:53vista出使える環境設定ソフトかPATHの設定方法を教えてください。
0248ぴっころ
2007/06/28(木) 22:08:04110
1101
1100
1111
10010
10101
11000
11011
11110
11→10→01→00
・・・。
ちょっときついです。
教えてもらえると助かります。
0249デフォルトの名無しさん
2007/06/28(木) 22:09:420250デフォルトの名無しさん
2007/06/28(木) 22:11:401100
数が減ってるな
まぁ1001の書き間違いだろうからそれくらい勘弁してやれ
0251デフォルトの名無しさん
2007/06/28(木) 22:12:59マイコンピュータのプロパティの中にない?
XP/2003まではそこにあるんだけど。
0252デフォルトの名無しさん
2007/06/28(木) 22:23:370253デフォルトの名無しさん
2007/06/28(木) 22:30:16システムのプロパティの中に環境変数でpathってのは見つけましたが違います?
マイコンピュータでプロパティやるとシステムのプロパティかCドライブのプロパティあたりしか出てきません。
0254デフォルトの名無しさん
2007/06/28(木) 22:31:306 000000110
12 000001100
18 000010010
24 000011000
30 000011110
36 000100100
42 000101010
48 000110000
54 000110110
60 000111100
66 001000010
72 001001000
78 001001110
84 001010100
90 001011010
96 001100000
0255デフォルトの名無しさん
2007/06/28(木) 22:32:08たぶんそれでおk。
0256デフォルトの名無しさん
2007/06/28(木) 22:35:43それをどうすればいいかわかります?
0257デフォルトの名無しさん
2007/06/28(木) 22:39:43char *get_int(char *b, char *i)
{
int sign, num = 0;
if(*b == '-')
{
sign = -1;
b++;
}
else sign = 1;
/*初期値*/
*i = 0;
/*スペーススキップ*/
SKIP(b);
/*十進数文字である間繰り返し*/
while (isdigit(*b)) {
num++;
/*これまでに得た整数の位取りアップ*/
*i *= 10;
*i += (*b - '0');
b++;
}
/*十進数文字がなければエラーリターン*/
if (num == 0) b = NULL;
return b;
}
上記は自分がわかる範囲でマイナス演算子を付け加えたのですが、
これからどうしていいのかわからないので、
どなたか教えてください。よろしくお願いします。
0258デフォルトの名無しさん
2007/06/28(木) 22:42:35だったら、それはお前のわかる範囲ではない。
0259デフォルトの名無しさん
2007/06/28(木) 22:43:02その一部じゃさっぱり。うpロダ使って全体をうpせい。それから実行結果の例も書いてくださいな
0260デフォルトの名無しさん
2007/06/28(木) 22:44:16かわいい
∧∧
〜(*b == '-') <ニャー
>> >>
0261デフォルトの名無しさん
2007/06/28(木) 22:46:19全ての3の倍数は、その数を3で割っても最下位ビットは変わらない。
0262デフォルトの名無しさん
2007/06/28(木) 22:46:260263ぴっころ
2007/06/28(木) 22:47:09なるほど。
6 00 00001 10
12 00 00011 00
18 00 00100 10
24 00 00110 00
30 00 00111 10
36 00 01001 00
42 00 01010 10
48 00 01100 00
54 00 01101 10
60 00 01111 00
66 00 10000 10
72 00 10010 00
78 00 10011 10
84 00 10101 00
90 00 10110 10
96 00 11000 00
下二桁 00→10の繰り返し、
下二桁より上 1ずつ増えているのは分かりました。
ですが、これで1000000001の間に11を入れて1011000001も3の倍数だ。
が何故言えるのでしょう?あと、3の倍数に偶数が入ってくる理由も・・・。
0264デフォルトの名無しさん
2007/06/28(木) 22:47:210265デフォルトの名無しさん
2007/06/28(木) 22:48:53それは3の倍数じゃなくて6の倍数でわ?
3の倍数 かつ 偶数 = 6の倍数ですよ
0266デフォルトの名無しさん
2007/06/28(木) 22:49:050267デフォルトの名無しさん
2007/06/28(木) 22:49:48BCCをインストールしたディレクトリのBinディレクトリとかのフルパスをPATHとかに追記する(セミコロンでつなげる)
0268デフォルトの名無しさん
2007/06/28(木) 22:51:18それ6の倍数並べてるだけじゃん
0269デフォルトの名無しさん
2007/06/28(木) 22:53:36単にそれは、例えば10進法で、15の倍数を並べたら一の位に0と5が交互に現れる、
ってことを言ってるのと同じだよ
0270デフォルトの名無しさん
2007/06/28(木) 22:54:11どもです。
やってみます。
0271デフォルトの名無しさん
2007/06/28(木) 22:57:073 000011
9 001001
15 001111
21 010101
27 011011
33 100001
39 100111
0272デフォルトの名無しさん
2007/06/28(木) 22:59:310273デフォルトの名無しさん
2007/06/28(木) 23:13:283の倍数は、奇数ビット目の1の数と、偶数ビット目の1の数の差が、3の倍数になる。
ただし、差が3の倍数といっても数が小さいうちはずっと0。
例:39
100111、奇数ビット目=2、偶数ビット目=2、差=0
0274デフォルトの名無しさん
2007/06/28(木) 23:25:4510進数だと、10の倍数は1の位が0だということが分かりました。
では11の倍数は、何か特徴があるのですか?
11
22
33
…
1の位が1ずつ増えていくことが分かりました!
…この結果で何か得られることはあると思うか?
0275デフォルトの名無しさん
2007/06/28(木) 23:49:23これをソートするんですが、
ソートする関数の引数のところを
void quicksort(char *array,int lower, int upper)
とするとソートが正しくないことがあります。
void quicksort(unsigned char *array,int lower, int upper)にするとうまくいくようなきがするんですが、
あってますか?
0276デフォルトの名無しさん
2007/06/28(木) 23:51:590277デフォルトの名無しさん
2007/06/28(木) 23:54:41学校の課題なんですが、unsigned char型は問題ですでにつくられていて、
それを改造してるんです
0278デフォルトの名無しさん
2007/06/28(木) 23:59:430279デフォルトの名無しさん
2007/06/29(金) 00:03:08void quicksort(unsigned char *array,int lower, int upper)にすれば
ソートはちゃんとうごいてますか?
一応実際の画像のソート状況を確認したら平気っぽかったですが
0280ぴっころ
2007/06/29(金) 00:40:39失礼します。
0281デフォルトの名無しさん
2007/06/29(金) 00:44:190282デフォルトの名無しさん
2007/06/29(金) 01:02:450283デフォルトの名無しさん
2007/06/29(金) 01:08:230284デフォルトの名無しさん
2007/06/29(金) 01:09:180285デフォルトの名無しさん
2007/06/29(金) 01:12:540286デフォルトの名無しさん
2007/06/29(金) 01:23:21cccchaa
というのがかいてあったら下のような感じで画面に表示したいんですけど
どんなソースコードですかね?アルゴリズムがピンとこないのでお願いします。
c→4 h→1 a→2
#include <stdio.h>
int main(void){
FILE *fp,*fut;
char sfn[80];
char yomi[256],mawasi[256];
int i;
scanf("%s",sfn);
if((fin=fopen(sfn,"r"))==NULL)return -1;
fout=fopen("comp","w");
i=0;
while((yomi[i]=fgetc(sfn))!='\0'){
i++;
}
fclose(fp);
fclose(fut);
return 0;
}
0287デフォルトの名無しさん
2007/06/29(金) 01:29:15・読んだ文字が前回と異なっていたら
カウンタをリセット(0にする)。読んだ文字を覚えておき、カウンタをインクリメント
・読んだ文字が前回と同じならそのままカウンタをインクリメント
0288デフォルトの名無しさん
2007/06/29(金) 02:33:5010101 (10進数で21)の時点で既に違うんだが。
一般的には、>>273が正解
もうこの話題終わってるけどね
0289デフォルトの名無しさん
2007/06/29(金) 03:16:46int型の要素をどうchar型に変換するのかわかりません。
何か良い方法はありますか?変換は逆でも構いません。
0290デフォルトの名無しさん
2007/06/29(金) 03:18:170291デフォルトの名無しさん
2007/06/29(金) 03:24:59なんで、プログラムを実行して、この結果が出てくるのか全く
わかりません。プログラムの結果がなぜそうなるのか内容を出
来るだけ詳しく教えてください。初心者なのでなるべく丁寧に
お願いします。もし、プログラムのタイプミスがあったらすい
ません。
#include<stdio.h>
#include<string.h>
main(){
char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100];
s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){
printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin);
strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0)
{
printf("s1==s2\n");}
else{prinf("s1!=s2\n");}
}
0292デフォルトの名無しさん
2007/06/29(金) 03:48:270293デフォルトの名無しさん
2007/06/29(金) 05:51:180294デフォルトの名無しさん
2007/06/29(金) 06:07:230295デフォルトの名無しさん
2007/06/29(金) 07:43:16年に二回くらいのクソレスならキャッチするよ〜
0296デフォルトの名無しさん
2007/06/29(金) 09:46:492倍するとは、2進数だと左に1ビットシフトしたもの
ゆえに、一番下のビットは必ず0になる。
3の倍数もこれに習ってやってみ。
0297デフォルトの名無しさん
2007/06/29(金) 10:40:10なんでENTERを押すと次の実行結果が表示されるのな何でですか?
↑のも質問ですがこのような感じの内容を教えてください
0298デフォルトの名無しさん
2007/06/29(金) 10:56:41s1 inital value:"abcdefghijklmnopqrstuvwxyz"
s2 inital value:""
s!=s2
Push ENTER to proceed.
s1 current value:"abcdefghijklmnopqrstuvwxyz"
s2 current value:"abcdefghijklmnopqrstuvwxyz"
s1==s2
これのどこがわからないの
0299デフォルトの名無しさん
2007/06/29(金) 11:56:31stdio.h には、C標準ライブラリのコンソール出力関数のプロトタイプ宣言があり、
そこで宣言されているprintfを使っているから、結果が出力されるんです。
0300デフォルトの名無しさん
2007/06/29(金) 12:32:32学生?俺もだけど
何の関数を使うためにstring.hをインクルードしているか?
strcmp(),strcpy関数はどういう関数か?
fgetsはどういう関数か?
を調べればたぶんわかると思うよ。
if構文とか'\0'とかprintf()とかエスケープ文字とか
文の終わりに;をつけるとか(付け忘れが多すぎたからあえて指摘)
くらいは知っているだろうし、人にきくほど難しいものではないとおもう。
0301デフォルトの名無しさん
2007/06/29(金) 12:43:42>char c[3];
>fgets(c,2,stdin);
こんな阿呆なコード、誰が書いたんだ?
0302デフォルトの名無しさん
2007/06/29(金) 12:46:170303デフォルトの名無しさん
2007/06/29(金) 13:11:380304デフォルトの名無しさん
2007/06/29(金) 14:09:380305デフォルトの名無しさん
2007/06/29(金) 14:21:40ヌルターミネータ込みのバッファサイズを指定することくらいは
ちゃんと知っておいた方がいいとは思う。
0306デフォルトの名無しさん
2007/06/29(金) 14:32:100307デフォルトの名無しさん
2007/06/29(金) 17:55:27int main(void)
{
int x,y,z,s;
printf("何cmから:"); scanf("%d",&x);
printf("何cmまで:"); scanf("%d",&y);
printf("何cmごと:"); scanf("%d",&z);
s = (x - 100)*0.9;
x = x + z;
for (; x <= y; s)
printf("%dcm %.2fkg\n",x ,(double)s);
return 0;
}
これだと x+5 についての場合のみ永久にブァーッと出てきます。
x〜yの範囲内にするにはどうしたらいいですか?
0308デフォルトの名無しさん
2007/06/29(金) 18:02:10double s = (x - 100) * 0.9;
printf("%d cm %.2f kg\n", x, s);
}
0309デフォルトの名無しさん
2007/06/29(金) 18:12:13ありがとうございました。
この場合繰り返しが行われてる式は
x += z と double s =(x - 100)*0.9 と printf("%dcm %.2fkg\n",x,s)
の3つですよね?繰り返したい式が2つ以上あるときは
forの()の中に1つ書いて、()を閉じてから残りの繰り返したい式を書くということでいいんですか?
0310デフォルトの名無しさん
2007/06/29(金) 18:14:42var
int C;
beigin
a := 0;
end;
がうまくイカなんだがなんだろ
0311デフォルトの名無しさん
2007/06/29(金) 18:22:01つーかこれPASCAL・・・
0312デフォルトの名無しさん
2007/06/29(金) 18:44:380313デフォルトの名無しさん
2007/06/29(金) 18:47:070314デフォルトの名無しさん
2007/06/29(金) 18:52:22int a = b/*p; /*b÷(pの先のデータ)→a*/;
割り算ができね
0315デフォルトの名無しさん
2007/06/29(金) 18:53:220316デフォルトの名無しさん
2007/06/29(金) 18:53:390317デフォルトの名無しさん
2007/06/29(金) 18:55:180318デフォルトの名無しさん
2007/06/29(金) 19:24:53perlとrubyとMLとエクセルで使うVBAくらい。
C++とかJavaは嫌な思いしかさせてくれない。
0319デフォルトの名無しさん
2007/06/29(金) 19:32:410320デフォルトの名無しさん
2007/06/29(金) 19:34:110321デフォルトの名無しさん
2007/06/29(金) 19:38:48良いも悪いもない
0322デフォルトの名無しさん
2007/06/29(金) 20:28:23フィルタをかけたい画素を中心に3×3のマスクをつくるとします。
http://teo.sourceforge.jp/doc/TeoProgrammingGuide/img/gaussian_kernel2.png
みたいなガウシアンフィルタを作って、この行列の各要素の数値を
マスクの行列の同じ場所の画素値にかけて、
その合計で中心画素の値を割ればいいんですか?
マスクがとしたら
1 3 3
4 6 2
1 2 3
1×0.07 + 3×0.12+・・・+3×0.07=SUM
6/SUMがフィルタをかけた後の値ですか?
0323デフォルトの名無しさん
2007/06/29(金) 20:32:30アセンブラに昔も今もあるのかよ
0324デフォルトの名無しさん
2007/06/29(金) 20:38:06Cの話でしょ?w
0325デフォルトの名無しさん
2007/06/29(金) 21:52:45そうだと思うけど、まずはやってみればいいんでね?
0326デフォルトの名無しさん
2007/06/29(金) 22:33:26そのコーディング方法が分からないんで無ければ
画像処理スレかどっかで聞いた方がいいんでね?
0327デフォルトの名無しさん
2007/06/30(土) 00:14:23memcpyのように引数にvoid*をとるとき、どうやってvoid*の中の物を
取り出すんですか?普通に配列のように[0]とかってやってもエラーになるし…
0328デフォルトの名無しさん
2007/06/30(土) 00:14:470329デフォルトの名無しさん
2007/06/30(土) 00:48:34その場合、中身が構造体などの場合にはどうしたらいいんでしょうか?
char*などにキャストした後から戻せるのでしょうか?
0330デフォルトの名無しさん
2007/06/30(土) 00:54:000331デフォルトの名無しさん
2007/06/30(土) 00:57:58該当する構造体でキャストすればいいのはわかるのですが、
memcpyのようになんでもコピーできるようにするにはどうしたら
いいのかなと思ったのですが、これはあまりmemcpyを
使わない方がいいと言われるのと何か関係があるのでしょうか?
0332デフォルトの名無しさん
2007/06/30(土) 01:01:30実際には高速化するため複数バイトずつ読み書きするなど工夫しているいるけど。
0333デフォルトの名無しさん
2007/06/30(土) 01:51:53参考になりました!
ありがとうございます。
0334デフォルトの名無しさん
2007/06/30(土) 02:08:510335デフォルトの名無しさん
2007/06/30(土) 02:09:150336デフォルトの名無しさん
2007/06/30(土) 02:11:560337デフォルトの名無しさん
2007/06/30(土) 02:15:50それってBASICじゃないですかw
0338デフォルトの名無しさん
2007/06/30(土) 02:18:010339デフォルトの名無しさん
2007/06/30(土) 02:20:430340デフォルトの名無しさん
2007/06/30(土) 02:21:15真っ白な画像を用意して、消したい画像の代わりに表示してはいかがでしょう。
0341デフォルトの名無しさん
2007/06/30(土) 02:35:450342デフォルトの名無しさん
2007/06/30(土) 03:05:440343デフォルトの名無しさん
2007/06/30(土) 03:36:590344デフォルトの名無しさん
2007/06/30(土) 07:38:21main関数から、ある関数に引数を渡す場合は、次のような
感じで渡してもOKですか?ダメみたいなんすが、その理由が
わからないです。
もちろん、実行する場合は引数を指定します。 a.out A.txt のように。
extern int p(char *filename)
int main(int argc, char*argv[])
{
p(argv[1]);
}
0345デフォルトの名無しさん
2007/06/30(土) 07:41:09argv
0346デフォルトの名無しさん
2007/06/30(土) 07:51:38どうダメなの? それでいけると思うのだけど。
>>345
プロトタイプ宣言と型が合いません。
0347デフォルトの名無しさん
2007/06/30(土) 07:52:440348デフォルトの名無しさん
2007/06/30(土) 07:58:130349デフォルトの名無しさん
2007/06/30(土) 08:04:09セグメンテンションフォルトです。
0350デフォルトの名無しさん
2007/06/30(土) 08:09:500351デフォルトの名無しさん
2007/06/30(土) 08:13:32なるほど、呼び出す先のp関数がわるのかなぁ。
引数でわたってきたファイル名をfopen()を呼んでいるだけなんですが。
0352デフォルトの名無しさん
2007/06/30(土) 08:19:350353デフォルトの名無しさん
2007/06/30(土) 08:21:27呼び出す先のp関数が悪いみたいです。
if (f=fopen(filename,"f"))
"f" -> "r" ですね。すいませんでした。
このようなif文で代入はOKなのかなぁ?
0354デフォルトの名無しさん
2007/06/30(土) 09:05:16間違ってはいないがお勧めしない。
Cのエキスパートを自称するロートルは、しばしば「代入と比較を一行で書けるのがCらしさだ」とのたまうが、
バグの混入の原因になりかねないし、第一必ずしも読み易くない。
0355デフォルトの名無しさん
2007/06/30(土) 10:55:48if ((f = fopen()) != NULL)とするやつもいるが俺は好きになれない。
0356デフォルトの名無しさん
2007/06/30(土) 11:02:07f=NULL;
f=fopen("ようじょ", "w");
if(f==NULL){
puts("ひゃぅん?");
}
ここまでするとクドイ感じもするが・・・
0357デフォルトの名無しさん
2007/06/30(土) 11:03:310358デフォルトの名無しさん
2007/06/30(土) 11:14:05基本的に使う前と使った後はクドクドと初期化
0359デフォルトの名無しさん
2007/06/30(土) 11:17:27FILE* fp = fopen();
if (f)
0360デフォルトの名無しさん
2007/06/30(土) 11:20:07FILE *fp;
この二つの違いって何かあるの?
単なるコーディング流儀の違い?
0361デフォルトの名無しさん
2007/06/30(土) 11:22:460362デフォルトの名無しさん
2007/06/30(土) 11:22:50構文上は、FILE*fp;もFILE * fp;も可能。
0363デフォルトの名無しさん
2007/06/30(土) 11:23:41*
fp
;
だっていいZE
0364デフォルトの名無しさん
2007/06/30(土) 11:23:58前者はC++使いに多く、後者はC使いに多い。
両方使う私は、だからと言うわけではないがFILE * fp = fopen(...);と書く。
0365デフォルトの名無しさん
2007/06/30(土) 11:33:59たとえばfor文ではできるけどwhile文ではできないこととか・・・。
0366デフォルトの名無しさん
2007/06/30(土) 11:38:13while だと実現が面倒。
0367デフォルトの名無しさん
2007/06/30(土) 11:41:46その都度malloc、もしくはreallocしてはいけないのですか?
または、そのバッファの割当の数はどうやって決まるのですか?
どうもCを書いていると全部mallocしたくなるのですが、C言語のハッカーさん教えてください。
0368デフォルトの名無しさん
2007/06/30(土) 11:41:58while文の括弧内の式は省略不可能。
0369デフォルトの名無しさん
2007/06/30(土) 11:42:12なので、無限ループはwhile (1) {...;}ではなくfor (;;) {...;}を使う。
0370デフォルトの名無しさん
2007/06/30(土) 11:47:09だめ:×
if (f=fopen(filename,"r"))
よい:○
f=fopen(filename,"r");
if(f!=NULL)
0371デフォルトの名無しさん
2007/06/30(土) 11:47:14malloc したら free しないとダメじゃん。
管理の手間が増えるからなるべくやりたくない。
必要な時はするがね。
ガベコレのある言語と一緒に考えない方がいいよ。
0372デフォルトの名無しさん
2007/06/30(土) 11:48:39「だめ」ではなくて、「好ましくない」程度で。
他人が書いたものを読むときに、「だめ」と思わずに許容してあげましょう。
0373デフォルトの名無しさん
2007/06/30(土) 11:48:56文法上の問題はないが推奨されない:△
if (f=fopen(filename,"r"))
よい:○
f=fopen(filename,"r");
if(f!=NULL)
0374デフォルトの名無しさん
2007/06/30(土) 11:50:260375367
2007/06/30(土) 11:54:14どもです。なるほど。確かにガベコレある言語でしかマジメに開発したことがないので、納得できていませんでした。
別物ですね。別物。
でも、その際に使用するMAX_BUF_NUMとかは一般的に1024とか使用されているのですが、何ゆえその数字が決まるのですか?
質問ばかりですいません。
0376デフォルトの名無しさん
2007/06/30(土) 12:07:150377367
2007/06/30(土) 12:15:56サンクス
しかし、1KBにするか4KBにするかといったことに悩むんですよね。
作りたいアプリの仕様が1KB程度だから、ここは1KBにするか、と考えるのは普通のような気もするのですが、
アプリを作りたいのではなくて、自分用の便利ライブラリを作成する際にどの数字を採用するか、
と考えるのが非常につらい。
つか、こんな考え方の俺ってガベコレ言語を使いすぎですか。
0378デフォルトの名無しさん
2007/06/30(土) 12:20:370379デフォルトの名無しさん
2007/06/30(土) 12:23:070380デフォルトの名無しさん
2007/06/30(土) 12:23:59for(;;) は可読性が乏しいから while(1) の方が好きだな。
0381デフォルトの名無しさん
2007/06/30(土) 12:25:18ありがとうございました。
0382デフォルトの名無しさん
2007/06/30(土) 12:33:22Cでライブラリ作るときは内部でバッファを抱えない。
(char *buf, size_t bufsize)
で受けるのがお約束。
高級にやりたいならmalloc, freeでやってバッファがあふれたらreallocで拡張。
手を抜きたいなら#defineで固定バッファであふれたらASSERTでとめるか放置してバッファオーバーフロー。
大体この三種類だな。重要度とパフォーマンスを秤にかけて好きにしとけ。
1kbと4kbのどっちが妥当かなんて答えようがない。
0383367
2007/06/30(土) 12:45:56どうもありがとうございました。
後は、自分で考えることができそうです。
ついでにもう一つ聞いてもいいですか?
文字列の配列を作るときに、
ダブルポインタを採用するのがいいか、リンクリストを採用するのがいいか迷っています。
どちらがお勧めですか?
0384デフォルトの名無しさん
2007/06/30(土) 12:48:350385デフォルトの名無しさん
2007/06/30(土) 12:50:49使い方によるだろ
よくわからないならダブルポインタの方が扱いやすいかな?
0386デフォルトの名無しさん
2007/06/30(土) 12:55:200387367
2007/06/30(土) 13:02:55ありがとうございます。
構造体でどちらで定義しようかな、と考えていました。
typedef struct {
char *dstr;
int dlen;
} DATUM;
typedef struct {
DATUM *ptr;
int size;
} DATUMLIST;
とするか、
typedef struct _DATUMLIST {
char *dstr;
char dlen;
struct _DATUMLIST *next;
} DATUMLIST;
とするか迷っていたのです。まぁ、迷わずに実装してしまえば、どちらでもいいような気がしますが。
0389デフォルトの名無しさん
2007/06/30(土) 14:08:33一次元ポインタ配列 int** p;
二次元ポインタ配列 int*** p;
三次元ポインタ配列 int**** p;
って風にスターを増やしていってもいいの?
0390デフォルトの名無しさん
2007/06/30(土) 14:09:42int multiple(int, int);
main()
{
}
int multiple(int x, int y)
{
if(y%x == 0)
return 1;
else
return 0;
}
multiple関数を使って二つの整数を比較し
二つ目の整数が一つ目の整数なら1(真)、
それ以外なら2(偽)を返すというプログラムを作りたいのですが
main関数をどうすればいいのかわかりません
0391デフォルトの名無しさん
2007/06/30(土) 14:11:44int** p; は int* 型を指すポインタだ。
それが必要になれば使う。普通に使う。
0392デフォルトの名無しさん
2007/06/30(土) 14:12:34main 関数で何がしたいのか分からないので
こちらにもどうすればいいのか分かりません。
0393デフォルトの名無しさん
2007/06/30(土) 14:14:28スターじゃなくてアスタリスクじゃね?
0394デフォルトの名無しさん
2007/06/30(土) 14:16:08フォントによっては実際に星型なってることもあるし。
0395デフォルトの名無しさん
2007/06/30(土) 14:16:22ありがとう
>>390
if(y%x == 0)
ってyに0が入ってきたらy%xは必ず0になって比較にならないんじゃね?
0396デフォルトの名無しさん
2007/06/30(土) 14:20:450 はあらゆる数の倍数(0 倍)だから動作的に問題ない。
0397デフォルトの名無しさん
2007/06/30(土) 14:23:120398デフォルトの名無しさん
2007/06/30(土) 14:30:47assert するだけにしておくか、
それともエラー時に何か特別な処理をしてエラー復帰するか。
0399390
2007/06/30(土) 15:24:33それをmultiple関数に渡し、multipleでの結果を
main関数に返してプリント
というふうにしたいです
0400デフォルトの名無しさん
2007/06/30(土) 15:27:560401390
2007/06/30(土) 16:26:430402デフォルトの名無しさん
2007/06/30(土) 16:30:210403デフォルトの名無しさん
2007/06/30(土) 16:30:50それでも分からなければ、
自分でどうやってみたかをここにコピペしてみれ。
0404390
2007/06/30(土) 17:12:58もったいぶらないで今すぐに教えてください。
0405デフォルトの名無しさん
2007/06/30(土) 17:20:13int multiple(int, int);
int main(void)
{
int x, y;
scanf("%d %d",&x,&y);
if(x == 0) return 1;
printf("%d\n",multiple(x,y));
return 0;
}
int multiple(int x, int y)
{
return (y%x!=0)+1;
}
二つ目の整数が一つ目の倍数なら1 と解釈してやってみた
つかここ宿題スレだっけ?
0406デフォルトの名無しさん
2007/06/30(土) 17:20:220407390
2007/06/30(土) 17:21:03int multiple(int, int);
main()
{
int a,b;
scanf("%d%d\n", &a, &b);
printf("%d\n", multiple(a,b));
return 0;
}
int multiple(int x, int y)
{
if(y%x == 0)
return 1;
else
return 0;
}
このプログラムだと一応実行できるのですが
整数を二つ入力しても動かず、もう一つてきとうに整数を入れると
最初の二つの整数について判断します。
例えば
2
4←ここで4は2の倍数なので1が返ってくる
はずなのですがそこでは処理がされず
5←さらに適当に整数を入力する
1←すると結果が返ってくる
と、こんな感じです
整数を二つ入力した時点で処理結果を返したいのですが
いいでしょうか?
0408デフォルトの名無しさん
2007/06/30(土) 17:22:14>main関数をどうすればいいのかわかりません
>というふうにしたいです
>その書き方がわからなくて困ってます
一度もお願いなんかされてないんだが。
0409デフォルトの名無しさん
2007/06/30(土) 17:25:25行間も読めないんですか? とか言われそうだなw
>>407
scanf()とprintf()のフォーマット文字列は互換性がないと思ったほうがいい。
あんたのコードは明らかにscanf()のフォーマット文字列が間違っているぞ。
0410デフォルトの名無しさん
2007/06/30(土) 17:26:28お前こそ行間が読めてないなw
0412デフォルトの名無しさん
2007/06/30(土) 17:37:360414390
2007/06/30(土) 17:57:37{
int a,b;
printf("整数1:"); scanf("%d", &a);
printf("整数2:"); scanf("%d", &b);
printf("%d\n", multiple(a,b));
return 0;
}
407のmain部分を上のようにしたら理想通りに実行されたのですが
なぜ上手くいったのかがよくわかりません。
誰かその理由を説明してください。
0415デフォルトの名無しさん
2007/06/30(土) 17:59:15>>409の最後の行
0416390
2007/06/30(土) 18:02:29407のscanf()はどういけないんですか?
0417デフォルトの名無しさん
2007/06/30(土) 18:02:510418デフォルトの名無しさん
2007/06/30(土) 18:03:23\n
0419デフォルトの名無しさん
2007/06/30(土) 21:07:21それ以外なら。。。と出力
とするにはどうやればいいですかね?
0420デフォルトの名無しさん
2007/06/30(土) 21:20:020421デフォルトの名無しさん
2007/06/30(土) 23:23:30#include<string.h>
main(){
char c[3];
char s1[]="abcdefghijklmnopqrstuvwxyz"
char s2 [100];
s2[0]='\0';
printf("s1 inital value:\"%s\"\n",s1)
printf("s2 inital value:\"%s\"\n",s2)
if cstrcmp(s1,s2)==0){
printf("s1==s2\n");}
else{printf("s!=s2\n");}
printf("Push ENTER to proceed.");
fgets(c,2,stdin);
strcpy(s2,s1);
printf("s1 current value:\"%s\"\n",s1);
printf("s2 current value:\"%s\"\n",s2);
if(strcmp(s1,s2)==0)
{
printf("s1==s2\n");}
else{prinf("s1!=s2\n");}
}
のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか?
0422デフォルトの名無しさん
2007/06/30(土) 23:29:26どうでもいいけどそれ、そろそろtypo直そうな
× if cstrcmp(s1,s2)==0){
○ if (strcmp(s1,s2)==0){
0423デフォルトの名無しさん
2007/06/30(土) 23:29:57解決したんじゃなかったのか
0424デフォルトの名無しさん
2007/06/30(土) 23:34:01タイプミスはすいません
0425デフォルトの名無しさん
2007/06/30(土) 23:37:27stdinからcに1文字読み込む。
0426デフォルトの名無しさん
2007/06/30(土) 23:38:03>>421
>のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか?
入力処理。改行を入力させるために使っているわけだ。
0427デフォルトの名無しさん
2007/06/30(土) 23:41:15Push ENTER to proceed を表示したところで止まるだろう
エンターキーを押すと次に進む
ようはポーズさせているんだろう
0428デフォルトの名無しさん
2007/06/30(土) 23:42:16なんでENTERを押すと次が表示されるんでしょうか?
0429デフォルトの名無しさん
2007/06/30(土) 23:44:23自己レスかよ
fgets(c,2,stdin);
で標準入力からの入力待ちで止まっている
エンターキーで入力されたので次に進むだけ
cのデータ自体はいらないもの
0430デフォルトの名無しさん
2007/06/30(土) 23:51:300431デフォルトの名無しさん
2007/07/01(日) 00:54:39ここのサイトをまず読めとか入門にいい本とかってありませんかね?
仕事では2D/3Dのデザイン系やってるんですけど、プログラムにもちょっと興味があるんで、
まずはCから勉強していこうと思っているんですが。
0432デフォルトの名無しさん
2007/07/01(日) 00:55:430433デフォルトの名無しさん
2007/07/01(日) 00:57:21何を用意すればいいかを自力で探せる能力だな
とマジレス
いや、マジでプログラマにとって最重要な能力は、情報収集力だよ
0434デフォルトの名無しさん
2007/07/01(日) 01:00:070435デフォルトの名無しさん
2007/07/01(日) 01:02:580436デフォルトの名無しさん
2007/07/01(日) 01:10:50>>433-434に全て持っていかれた
0437デフォルトの名無しさん
2007/07/01(日) 01:11:170438デフォルトの名無しさん
2007/07/01(日) 01:12:200439デフォルトの名無しさん
2007/07/01(日) 01:13:120440デフォルトの名無しさん
2007/07/01(日) 01:15:150441431
2007/07/01(日) 01:16:58入門出来たらまた相手にしてください。
0442デフォルトの名無しさん
2007/07/01(日) 01:56:16int main(void)
{
int min,max,x,y,i,j;
puts("長方形を作りましょう");
printf("一辺(その1)"); scanf("%d",x);
printf("一辺(その2)"); scanf("%d",y);
min = x;
if (y < x)
min = y;
max = y;
if (y < x)
max = x;
for (i=1; i<=max; i++) {
for (j=1; j<=min; j++)
putchar('*');
putchar('\n');
}
return 0;
}
何がおかしいスかねぇ
*が表示されないんですよねぇ
0443デフォルトの名無しさん
2007/07/01(日) 01:59:59printf("一辺(その1)"); scanf("%d",&x); < & が抜けてるよ
printf("一辺(その2)"); scanf("%d",&y);
0444デフォルトの名無しさん
2007/07/01(日) 02:04:09なんということ…ありがとうございます
0445デフォルトの名無しさん
2007/07/01(日) 02:08:54for (i=1; i<=min; i++)→for (j=1; j<=max; j++)→putchar('*')
→for (j=1; j<=max; j++)→putchar('*')→for (j=1; j<=max; j++)→putchar('*')
…→putchar('\n')→for (i=1; i<=min; i++)→…
みたいな感じで実行されてるのですか?
0446デフォルトの名無しさん
2007/07/01(日) 02:20:10それであってるよ。実行して確認してみればいい。
0447デフォルトの名無しさん
2007/07/01(日) 13:00:50ありがとうございました
0448デフォルトの名無しさん
2007/07/01(日) 14:37:350449デフォルトの名無しさん
2007/07/01(日) 14:45:080450449
2007/07/01(日) 14:45:40すみません
0451デフォルトの名無しさん
2007/07/01(日) 14:51:42popen()関数を使って自分で作る事は出来るのですが
もし優れたライブラリがあるならそっちを使いたいです
C++では駄目でCでおながいします
0452デフォルトの名無しさん
2007/07/01(日) 19:06:59foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}
var()
{
char *ptr;
foo(ptr);
}
こうすると、落ちるんだけど、どうして?
0453デフォルトの名無しさん
2007/07/01(日) 19:09:22にしないと
0454デフォルトの名無しさん
2007/07/01(日) 19:15:070455デフォルトの名無しさん
2007/07/01(日) 19:21:540456デフォルトの名無しさん
2007/07/01(日) 19:23:24>>で1つずつやっていくしかないですかね?
0457デフォルトの名無しさん
2007/07/01(日) 19:25:03foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}
var()
{
char ptr[8];
foo(ptr);
}
こうしてみたんだけど、やっぱりダメだった。
どうして?
0458デフォルトの名無しさん
2007/07/01(日) 19:25:290459デフォルトの名無しさん
2007/07/01(日) 19:28:38そういうケアレスミスは置いといて^^
0460デフォルトの名無しさん
2007/07/01(日) 19:30:00MyGet(ryの戻り値がおかしいんじゃないのか。
戻り値になるバッファをスタックに取ってるとか。
0461デフォルトの名無しさん
2007/07/01(日) 19:31:060462デフォルトの名無しさん
2007/07/01(日) 19:37:260463デフォルトの名無しさん
2007/07/01(日) 19:41:43最初に用意する容量を問い合わせてから領域を確保して初めて呼び出せるんだろうに。
領域サイズの確認関数が無いなら、十分なサイズを用意してあげないとダメ。
そして、サイズに満たない領域にコピーしちゃダメ。
0464デフォルトの名無しさん
2007/07/01(日) 21:38:520465デフォルトの名無しさん
2007/07/01(日) 22:45:560466デフォルトの名無しさん
2007/07/01(日) 22:46:46free()かrealloc()で解放しない限り、されません。
0467デフォルトの名無しさん
2007/07/01(日) 22:50:23解放されると困らないかい?
malloc() 〜 free() の作法としては、使う人が確保と解放の責任を持つって暗黙のルールなんだけど、サービス関数の中には、確保だけして解放は使う側でやってね。なんてローカルルールもあるしな。
解放されると思い込むくらいなら、仕様確認をした方がいいよ。
0468デフォルトの名無しさん
2007/07/01(日) 22:56:05自動変数とごっちゃになってない?
0469デフォルトの名無しさん
2007/07/01(日) 23:14:22環境依存だが。
0470465
2007/07/01(日) 23:22:000471デフォルトの名無しさん
2007/07/01(日) 23:25:21たいした手間じゃないから自分で書いたらいいよ
0472デフォルトの名無しさん
2007/07/01(日) 23:37:38ルートの下にノードがあるとします。
その2つのノードからそれぞれ2本ずつ枝がでていて、
1本は別々のノードにつながっている。もう一本は同じノードにつながっている。
これをあらわすには数字の割り当て方はどうすべきですかね?
0
1 2
3 4 5 6
とあれば、2のleftが4をさすようにする。
5は捨てるって感じですかね?
0473デフォルトの名無しさん
2007/07/01(日) 23:43:040474デフォルトの名無しさん
2007/07/01(日) 23:47:29それと木構造と組み合わせて計算とか地獄だな。。。
0475デフォルトの名無しさん
2007/07/01(日) 23:58:36/\
1 2
/\ /\
3 4 5
みたいな感じにしたいのか?
0476デフォルトの名無しさん
2007/07/02(月) 00:09:47はい、そうです。
各枝に確率をつけて、0のところを1.0と設定して
0から1、2への枝の確率をかけて1と2のノードにおいての確率をだす。
その次に1と2の下の3、4、5への枝に確率をつけて
3、4、5のノードにおいての確率を出す感じにしたいんですけど。
1つのノードに3つの確率がはいるようにしないといけないなーとは思ってます。
この計算を木でやるか配列でやるか迷ってます。
0477デフォルトの名無しさん
2007/07/02(月) 00:58:38/\
1 2
/\ /\
3 4 5
/\ /\ /\
6 7 8 9
となっていくんだったら、別に配列でもいい気がするな。
配列というか、三角行列?
0478デフォルトの名無しさん
2007/07/02(月) 01:14:04int main(void)
{ /*左上*/
int a,b,c;
printf("何段ですか:");
scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c >= 1; c--)
putchar('*');
putchar('\n');
}
return 0;
}
左上が直角になる三角形を作りたいのですが・・・何か四角形になります
0479デフォルトの名無しさん
2007/07/02(月) 01:18:38for (c = a; c >= 1; c--)
↓
for (c = a; c >= b; c--)
0480デフォルトの名無しさん
2007/07/02(月) 01:25:48できました!ありがとうございました!
0481デフォルトの名無しさん
2007/07/02(月) 03:05:478つのchar*が指し示している内容が分からないと何とも。
0482デフォルトの名無しさん
2007/07/02(月) 11:56:07ソースコード中の各関数の前に、
// 関数名:
// 作者:
// 機能:
//
みたいな説明を付けたいのだけれど、どこかにカッチョいいサンプルないですか?
0483デフォルトの名無しさん
2007/07/02(月) 12:07:11つ[doxygen]
0484デフォルトの名無しさん
2007/07/02(月) 12:53:35ありがとうございます。でも、
そういう高度なのは使いこなせそいうにないので、
具体的なサンプルを探しています。よろしく。
0485デフォルトの名無しさん
2007/07/02(月) 12:58:04int main(void)
{
int a,b,c;
printf("ピラミッドを作りましょう");
printf("何段ですか:"); scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c > 1; c--)
putchar(' ');
for (c = 1; c < 2b; c++)
putchar('*');
putchar('\n');
}
return 0;
}
何が変なんですかね
0486デフォルトの名無しさん
2007/07/02(月) 12:59:39もし>484がロートル、コボラの気に入りそうな「枠に填まった」コメントが好きならサンプル出してもいいけど。
#コメントを書くのに手間が掛かるのなんて論外だと思うんだがね。
0487デフォルトの名無しさん
2007/07/02(月) 13:00:23エラーメッセージくらい読め
0489デフォルトの名無しさん
2007/07/02(月) 13:01:360490デフォルトの名無しさん
2007/07/02(月) 13:03:19これは間違いなくツンデレ
0491デフォルトの名無しさん
2007/07/02(月) 13:04:290492デフォルトの名無しさん
2007/07/02(月) 13:06:36エラー E2379 4-18.cpp 10: ステートメントにセミコロン(;)がない(関数 main() )
0493デフォルトの名無しさん
2007/07/02(月) 13:11:00できました。
ありがとうございました
0494デフォルトの名無しさん
2007/07/02(月) 13:22:530495488
2007/07/02(月) 13:34:56「意味のないレスするな」って言われないための予防策なんだから。
0496デフォルトの名無しさん
2007/07/02(月) 17:03:310497デフォルトの名無しさん
2007/07/02(月) 17:13:500498デフォルトの名無しさん
2007/07/02(月) 19:37:410499デフォルトの名無しさん
2007/07/02(月) 19:39:440500デフォルトの名無しさん
2007/07/02(月) 19:40:370501デフォルトの名無しさん
2007/07/02(月) 19:42:14switch(n)
{
case 2:
case 3:
case 4:
case 5:
printf("2..5");
}
if(2 <= n && n <= 5) printf("2..5");
0502デフォルトの名無しさん
2007/07/02(月) 19:42:33if(???)
の中身はどう書けばよいですか?
0503デフォルトの名無しさん
2007/07/02(月) 19:43:470504デフォルトの名無しさん
2007/07/02(月) 19:56:35こういうのってめっちゃ素人くさいな。
0505デフォルトの名無しさん
2007/07/02(月) 19:58:120506デフォルトの名無しさん
2007/07/02(月) 20:00:14どうせ引数説明とか入れるんだし。
もちろブロックコメントでな。ラインコメントをいくつも並べるのはカッコワル。
0507デフォルトの名無しさん
2007/07/02(月) 20:01:54おまえ、それ何の意味があるんだと。
0508デフォルトの名無しさん
2007/07/02(月) 20:23:01どうして、128バイトは1,024ビットになるのかわかりません
どういう計算をすれば、そうなるのでしょうか?
0509デフォルトの名無しさん
2007/07/02(月) 20:31:06ほとんどの環境で1バイト=8ビット
0510デフォルトの名無しさん
2007/07/02(月) 20:36:25そういうのがある時点でかっこ悪いよ…
0511デフォルトの名無しさん
2007/07/02(月) 20:46:27ん〜考えても、どうして128バイトは1,024ビットになるのかわかりません
何の何階乗をすれbいいのでしょうか?
0512デフォルトの名無しさん
2007/07/02(月) 20:47:490513デフォルトの名無しさん
2007/07/02(月) 20:47:550514デフォルトの名無しさん
2007/07/02(月) 20:56:34みなさんからいっぱいのレスだけども
も〜ちょっと分かりやすく書くと
128バイト×8ビット/バイト=1024ビット
0515デフォルトの名無しさん
2007/07/02(月) 20:59:17ってのを知らないだけなんじゃね
0516デフォルトの名無しさん
2007/07/02(月) 21:00:230517デフォルトの名無しさん
2007/07/02(月) 21:07:170518デフォルトの名無しさん
2007/07/02(月) 21:08:260519デフォルトの名無しさん
2007/07/02(月) 21:09:32そんな時期が私にもありました(AA略
0520デフォルトの名無しさん
2007/07/02(月) 21:16:43厳密に8ビットというなら1オクテットと表現すべき。
0521デフォルトの名無しさん
2007/07/02(月) 21:20:50と思っていた時期が私にもありました
本当にあったんだね
0522511
2007/07/02(月) 21:21:02ですが、どうして128 * 8 して出すのかが
納得できません。。。
0523511
2007/07/02(月) 21:21:52サンクスでした
0524デフォルトの名無しさん
2007/07/02(月) 22:30:20じゃあ君が大好きなタコを例にして分かりやすく解説しよう。
「タコには足が8本あります。ここにタコが128匹います。全部で足は何本でしょう?」
タコ→バイト、足→ビット、に置き換えるとあら不思議。
0525デフォルトの名無しさん
2007/07/02(月) 22:34:050526390
2007/07/02(月) 22:45:49main()
{
int a;
float b;
for(a=0; a<=100; a++)
printf("セ氏温度:%d カ氏温度:%.2f\n",a ,fahrenheit(a,b));
}
int fahrenheit(int x,int y)
{
y = (float)(9/5)*x+32;
return y;
}
セ氏温度0〜100℃に対してカ氏温度を出したいのですが
出力の際、カ氏温度が0.00になってしまします。
間違っているところの指摘をお願いします。
0527デフォルトの名無しさん
2007/07/02(月) 22:46:430528デフォルトの名無しさん
2007/07/02(月) 22:50:20fahrenheit()の第2引数はint型なのにfloat型のbを渡している
fahrenheit()の戻り値の型はint型なのに%.2fを指定している
0529デフォルトの名無しさん
2007/07/02(月) 22:53:38y = (float)(9/5)*x+32;
は意図したのと違くなっていると思う
0530526
2007/07/02(月) 23:04:50この部分はどう直せばいいのですか?
0531デフォルトの名無しさん
2007/07/02(月) 23:08:520532デフォルトの名無しさん
2007/07/02(月) 23:19:45char a;
}
main()
{
char b, c;
c = ((struct abc)b).a;
c = ((struct abc *)b)->a;
}
c = ((struct abc)b).a;がダメで
c = ((struct abc *)b)->a;が良い理屈を教えて下さい。
0533デフォルトの名無しさん
2007/07/02(月) 23:22:10それって良いのか?
コンパイルは通るだろうが、実行したら間違いなくSegmentFaultだぞ
0534デフォルトの名無しさん
2007/07/02(月) 23:22:17は偶然うまく動くかもしれないが、よくない。
0535526
2007/07/02(月) 23:23:06と出るのですがこれが原因ですか?
0536デフォルトの名無しさん
2007/07/02(月) 23:24:31aのoffsetが0ならうまく動くだろ。
0537デフォルトの名無しさん
2007/07/02(月) 23:25:19(struct abc *)b はbで示される何らかの値をstruct abc のポインタに変換している
で b の値はポインタか?
どっちもよろしくない
0538536
2007/07/02(月) 23:29:110539デフォルトの名無しさん
2007/07/02(月) 23:34:58a はfor文で値が入るが b には初期かも代入もされていない
b に値を入れろ
0540デフォルトの名無しさん
2007/07/02(月) 23:38:15c = ((struct abc *)&b)->a;
なら、aのoffsetが0ならうまく動くかも知れん。
が、>>532はそうはなっていないので間違いなく保護違反
0541532
2007/07/02(月) 23:58:38c = ((struct abc *)&b)->a;
でした。
0543532
2007/07/03(火) 00:04:41問題ないように思えるのですが、
なにがダメなのでしょうか。
0544デフォルトの名無しさん
2007/07/03(火) 00:09:440545デフォルトの名無しさん
2007/07/03(火) 00:52:500546デフォルトの名無しさん
2007/07/03(火) 00:55:00何でって言われても、言語仕様でそのようなキャストは認められていないから、としか。
0547511
2007/07/03(火) 00:56:088~128でしょうか?
0548デフォルトの名無しさん
2007/07/03(火) 00:57:130549デフォルトの名無しさん
2007/07/03(火) 00:57:380550デフォルトの名無しさん
2007/07/03(火) 00:59:480551デフォルトの名無しさん
2007/07/03(火) 01:03:410552デフォルトの名無しさん
2007/07/03(火) 01:05:0801 2ビット
010 3ビット
0101 4ビット
01010 5ビット
010101 6ビット
0101010 7ビット
01010101 1バイト
0553デフォルトの名無しさん
2007/07/03(火) 01:08:27例題がタコだからといって、演算子までタコにするのはやめような。
0554デフォルトの名無しさん
2007/07/03(火) 01:10:350555デフォルトの名無しさん
2007/07/03(火) 01:11:49ノ川ル
0556デフォルトの名無しさん
2007/07/03(火) 01:12:401byte == 1octet の時代なんて一度も来た事がないんだが。
0557デフォルトの名無しさん
2007/07/03(火) 01:21:37懐かしいなー
0558デフォルトの名無しさん
2007/07/03(火) 02:01:19UTF−9とかもあるし
0559デフォルトの名無しさん
2007/07/03(火) 02:04:280560デフォルトの名無しさん
2007/07/03(火) 07:16:54文字列を比較する場合、どうすればいいんでしょうか?
char* str;
fgets(str,100,stdin);
if(str=="start"){
なんとかかんとか;
}
これ、うまく動かないんですが
0561デフォルトの名無しさん
2007/07/03(火) 07:18:200562デフォルトの名無しさん
2007/07/03(火) 07:33:181. str の指す領域を確保する
2. 文字列の比較には strcmp を使う
3. 比較する文字列を "start\n" にする
0563526
2007/07/03(火) 08:27:43main()
{
int a;
int b=0;
for(a=0; a<=100; a++)
printf("セ氏温度:%d カ氏温度:%d\n",a ,fahrenheit(a,b));
}
int fahrenheit(int x, int y)
{
y = (9/5)*x+32;
return y;
}
誰かこのプログラムをカ氏温度が小数点まで
出力されるように改ざんしてください;
0564デフォルトの名無しさん
2007/07/03(火) 08:29:25double型の変数でも使えばええやん・・・
0565デフォルトの名無しさん
2007/07/03(火) 08:48:21#include <stdlib.h>
#include <string.h>
struct list{
char *name;
struct list* next;
};
int main(void){
struct list *head,*ume;
char *str;
head=NULL;
str=(char*)malloc(100*sizeof(char));
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
while(strcmp(str,"end\n")!=0){
ume=(struct list*)malloc(sizeof(struct list));
ume->name=str;
ume->next=head;
head=ume;
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
}
printf("%s%p\n",head->name,head);
return 0;
}
リスト構造体のテストやってみたんですが
これ実行して、taro、hanako、endと入力したら
endが表示されるんだけどどこがおかしいんですかね?
endと入力した時点でwhileから抜け出し、head->nameがendになると思えないんですが・・・
0566デフォルトの名無しさん
2007/07/03(火) 08:54:24> head->nameがend
ume->next=head;
head=ume;
↑そりゃなるだろw
0567デフォルトの名無しさん
2007/07/03(火) 09:05:44おかしいっていうのは、期待した動作と違うって事だろうけど
何をしたいのか分からんのに、答えられるわけ無いだろ
0568デフォルトの名無しさん
2007/07/03(火) 09:16:49エスパー回答
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list{
char *name;
struct list *next;
};
int main(void){
struct list *head, *ume;
char *str;
head = NULL;
str = (char *) malloc(100 * sizeof(char));
for(;;){
printf("名前を入力(endで終了)>");
fgets(str, 100, stdin);
if(strcmp(str, "end\n") == 0) break;
ume = (struct list *) malloc(sizeof(struct list));
ume->name = strdup(str);
ume->next = head;
head = ume;
}
ume=head;
while(ume!=NULL){
printf("%s", ume->name);
ume=ume->next;
}
return 0;
}
0569デフォルトの名無しさん
2007/07/03(火) 09:21:00ume->nameは常にstrを指していて、最後にendになってんだから当たり前だろ。
0570デフォルトの名無しさん
2007/07/03(火) 09:45:41まあ大体察しはつくが・・・
「おかしい」って言う以前に、どういう動作を期待しているのかちゃんと書こうな
0571デフォルトの名無しさん
2007/07/03(火) 09:54:45とりあえず多めに変数宣言用意しておいてもいい?
int i,j,k,l;
double a,b,c,d,e;
char f[1000],g[1000],e[1000];
とか・・・
変数○○は使われていませんって警告がでるけど
多くしたら実行速度下がるとかエラーでるとかこまったことがおきるとかありますか?
0572デフォルトの名無しさん
2007/07/03(火) 09:54:56char *name; < いっ、いいんかい?
struct list *next;
};
0573デフォルトの名無しさん
2007/07/03(火) 09:59:25困ったことが起こるよ
new だといい
0574デフォルトの名無しさん
2007/07/03(火) 10:02:14使ったことないけど
std::vector, std::string
がいいみたいだよ
0575デフォルトの名無しさん
2007/07/03(火) 10:08:310576デフォルトの名無しさん
2007/07/03(火) 10:14:18・C++言語はスレ違いです。
0577デフォルトの名無しさん
2007/07/03(火) 10:16:25C言語専用の環境使っているやつがいるか?
0578デフォルトの名無しさん
2007/07/03(火) 10:21:310579デフォルトの名無しさん
2007/07/03(火) 10:25:00一応ありはありだが
・万一配列のサイズを超えたときにそれをはじくようなチェックを入れておく。
・スタックにあまり大きな配列を取らない(char *f, *g, *eにして領域をmallocする)。
あたりは注意しておいたほうがいい。
速度はメモリ浪費でスワップしない限りさほど落ちない。
0580デフォルトの名無しさん
2007/07/03(火) 10:30:04初心者こそ使うべきだな
コーディングが楽になるな
0581デフォルトの名無しさん
2007/07/03(火) 11:45:36これを一つのintの変数に入れたいのですが、どうやればいいですか?
0582デフォルトの名無しさん
2007/07/03(火) 11:48:29過去ログを読む気がないのなら、やりたいことを具体的に書け。
どんなデータをどう入れたいのか判らんことには答えようがない。
0583デフォルトの名無しさん
2007/07/03(火) 11:48:390584デフォルトの名無しさん
2007/07/03(火) 11:49:50バスエラーの可能性ががが
0585デフォルトの名無しさん
2007/07/03(火) 11:55:180586デフォルトの名無しさん
2007/07/03(火) 11:56:390587デフォルトの名無しさん
2007/07/03(火) 11:57:53配列の0から3でもバスエラーって発生するもんなの?
0588デフォルトの名無しさん
2007/07/03(火) 12:00:28char配列がint安全な場所に作られる保証はない。
その点ではunionの方がまし。
しかし、unionには言語仕様的に実装依存の罠が。
そういう意味では>585でいいのだがエンディアンの問題が残る。
まぁ、最近のコンパイラならどれで書いても同じようなコードを吐くしね。
0589デフォルトの名無しさん
2007/07/03(火) 12:11:23そういやこういう場合かもしれんしな。
#include <stdio.h>
#include <stddef.h>
int main() {
struct A {
char a;
char b[4];
};
printf("%ld\n", offsetof(struct A, b));
}
0590581
2007/07/03(火) 12:30:43一番簡潔なのですがかなり難解です。これから考えます。
>>585
一番分かり易いです。
unionの使い方に悩みましたがcharの配列と一つのintのメンバ変数を用意して
charの配列にデータを入れてintのメンバ変数でアクセスすればいいのですね。面白い。
0591デフォルトの名無しさん
2007/07/03(火) 12:36:02-O (最適化レベル1か、それ以上)
-funroll-loops (ループ展開最適化)
フラグを立てると >>585 みたいなコードを吐いてくれるみたいだ。
int toInt(const char* ch) {
union {
char ch[sizeof (int)];
int i;
} endian;
int i;
int shift, dshift;
int n = 0;
endian.i = 0;
shift = *endian.ch ? 0 : (sizeof (int) - 1) * CHAR_BIT;
dshift = *endian.ch ? CHAR_BIT : -CHAR_BIT;
for(i = 0; i < sizeof (int); i++) {
n |= ch[i] << shift;
shift += dshift;
}
return n;
}
0592デフォルトの名無しさん
2007/07/03(火) 14:59:59これを利用してデリゲートまがいなことってできませんかね?
0593デフォルトの名無しさん
2007/07/03(火) 15:00:370594デフォルトの名無しさん
2007/07/03(火) 15:41:43があって両者の絶対値の大きさを比較したいとき
自乗した値を比較するのとabs()を使うのではどちらが速いのでしょう?
自乗してもintの範囲を超えないことは保証されているという前提で。
またこういったベンチマークテストはどうやって行うのでしょう?
0595デフォルトの名無しさん
2007/07/03(火) 16:02:530596デフォルトの名無しさん
2007/07/03(火) 16:15:19こんなコードを書いてみる。
#include <stdio.h>
#include <stdlib.h>
int main()
{
volatile int a;
volatile int b;
for (int ic = 0; ic < 100 * 1000 * 1000; ++ic) {
#if 1
volatile int c = abs(a) > abs(b);
#else
volatile int c = a * a > b * b;
#endif
}
return 0;
}
こいつをこんな感じで実行してみる。
$ gcc foo.c -std=c99 -O3 ; time ./a
foo.c: In function `main':
foo.c:11: warning: unused variable `c'
real 0m0.734s
user 0m0.687s
sys 0m0.047s
意外にも、abs()の方が遅かった。
0597デフォルトの名無しさん
2007/07/03(火) 16:18:210598デフォルトの名無しさん
2007/07/03(火) 16:34:10よって一部訂正。
#if 0
int aa = a; int bb = b;
volatile int c = abs(aa) > abs(bb);
#else
int aa = a; int bb = b;
volatile int c = aa * aa > bb * bb;
#endif
今回は大勢に影響はなかったけど。
で、ついでに-Sでアセンブリ出力を眺める。二乗版はこんだけ。
movl -4(%ebp), %eax
movl -8(%ebp), %edx
imull %eax, %eax
imull %edx, %edx
cmpl %edx, %eax
setg %dl
movb %dl, -9(%ebp)
abs()版はどうしても条件分岐しないためにビット操作であれこれ捻り過ぎ。
movl -8(%ebp), %edx
movl -12(%ebp), %eax
movl %edx, %ecx
sarl $31, %ecx
xorl %ecx, %edx
subl %ecx, %edx
movl %eax, %ecx
sarl $31, %ecx
xorl %ecx, %eax
subl %ecx, %eax
cmpl %eax, %edx
setg %dl
movb %dl, -13(%ebp)
0599デフォルトの名無しさん
2007/07/03(火) 16:50:59データが小さい順もしくは大きい順に並んでなかったらできない?
つまりめちゃくちゃなデーターがあったら一旦それをバブルソートなどで整列させないとダメってことですか?
0600デフォルトの名無しさん
2007/07/03(火) 16:51:520601デフォルトの名無しさん
2007/07/03(火) 16:52:210602デフォルトの名無しさん
2007/07/03(火) 16:52:46その通りです
バブルソートである必要はありませんが…
0603デフォルトの名無しさん
2007/07/03(火) 17:00:040604デフォルトの名無しさん
2007/07/03(火) 17:19:51揃っているからこそのバイナリサーチじゃないか。
って、仕組み見たら一目瞭然だと思うが・・・・・
で、バブルソートである意味はない。
でも、ふと思ったのは、必要なものをすべて見つける必要はなくて
一つ見つければいいというのであれば、動的に必要な部分だけ
ソートしながら利用するっていう使い方もあるのかな、と思った。
レイトバインディングのように、対象要素が大きくて
ソートの初期化コストが大きかったり頻繁に要素が追加されるという状況で使えないかな?
それともそういう場合はB-Treeとかを使っておくべき?(追加のコストによるのかな?)
0605デフォルトの名無しさん
2007/07/03(火) 19:08:21struct list{
int data;
struct list *next;
};
void showlist();
int main(void){
int indata,i,j;
struct list *head,*test;
head=NULL;
while(1){
printf("数を入力(終了は0)>");scanf("%d",&indata);
if(indata==0)
break;
test=(struct list*)malloc(sizeof(struct list));
test->data=indata;
test->next=head;
head=test;
}
showlist();
return 0;
}
void showlist(){
struct list *now;
while (now!=NULL){
printf("%d ",now->data);
now=now->next;
}
};
構造ポインタで次々入力しshowlistで表示するというのを作ったんだけど
これ実行したら、mainのreturn 0の上のshowlistがプロトタイプ宣言が無いと警告でるんですがどうしたらいいですか?
0606デフォルトの名無しさん
2007/07/03(火) 19:25:05↑型を入れる
0607デフォルトの名無しさん
2007/07/03(火) 20:14:24void inputdata(int data[],int n);
int main(void){
int x[10];
inputdata(x,10);
return 0;
}
void inputdata(int data[],int n){//inputdata関数
int i;
for(i=0;i<n;i++){
printf("Input data>");
scanf("%d",&data[i]);
}
for(i=0;i<n;i++){
printf("data[%d]=%d",i,*data[i]);
}
}
C言語について質問です
配列x[0]〜x[9]のそれぞれに値を入れて表示するというinputdata関数を作ってみたいんですが
これ動きません。どのように関数を直せばよいのでしょうか?
0608デフォルトの名無しさん
2007/07/03(火) 20:19:420609デフォルトの名無しさん
2007/07/03(火) 20:34:33↓
printf("data[%d]=%d",i,data[i]);
0610デフォルトの名無しさん
2007/07/03(火) 20:55:020611デフォルトの名無しさん
2007/07/03(火) 20:58:26http://www.google.co.jp/search?q=2%5E8
0612デフォルトの名無しさん
2007/07/03(火) 21:09:460613デフォルトの名無しさん
2007/07/03(火) 21:15:150614デフォルトの名無しさん
2007/07/03(火) 21:19:110615デフォルトの名無しさん
2007/07/03(火) 21:47:580616デフォルトの名無しさん
2007/07/03(火) 21:52:29その中身の計算に
違う二次元配列の中身を用いないといけないんだけど
すげーキレそう
0617デフォルトの名無しさん
2007/07/03(火) 21:57:590618デフォルトの名無しさん
2007/07/03(火) 22:03:500619デフォルトの名無しさん
2007/07/03(火) 22:04:52今日あの日だろ
0620デフォルトの名無しさん
2007/07/03(火) 22:14:14肛門様を大事に
0621デフォルトの名無しさん
2007/07/03(火) 23:25:36&cd[0]
と
cd
は全く同じ意味ですか?
0622デフォルトの名無しさん
2007/07/03(火) 23:27:050623デフォルトの名無しさん
2007/07/03(火) 23:27:28「2*2」と「1*4」は同じですか?
という質問と同じです。
値も型も同じですが、意図が違います
0624デフォルトの名無しさん
2007/07/03(火) 23:27:320625デフォルトの名無しさん
2007/07/03(火) 23:28:250626デフォルトの名無しさん
2007/07/03(火) 23:47:34int型とかなら
if(x==1)
return 0;
とかやれば関数から抜け出せるけど
void型はどうやるんですか?
0627デフォルトの名無しさん
2007/07/03(火) 23:48:330628デフォルトの名無しさん
2007/07/04(水) 00:02:090629デフォルトの名無しさん
2007/07/04(水) 00:05:510630デフォルトの名無しさん
2007/07/04(水) 00:12:350631デフォルトの名無しさん
2007/07/04(水) 01:03:33書き換えたいんだけどどうやればできますか。
普通にやると,また10GB書き出さないと出来ないような。
0632デフォルトの名無しさん
2007/07/04(水) 01:10:57双方向リストに関する質問です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4492.txt
双方向リストの先頭と末尾へ要素を追加する関数と、
先頭と末尾の要素を削除する関数を書いてみたのですが、
末尾要素を削除する関数 DelTail() が思うように動いてくれません。
free()する対象が悪いのではないかと推測していますが、
検討もつかないというのが実際のところです。
他の関数についてもツッコミいただければと思います。
0633デフォルトの名無しさん
2007/07/04(水) 01:11:06int cd[10]; として、
&cd[0] の型は int* で、
cd の型は int [10] だな。
全く同じではない。
0634デフォルトの名無しさん
2007/07/04(水) 01:18:05http://www.geocities.jp/ky_webid/cpp/library/003.html
●C++編(標準ライブラリ) 第3章 list
listは双方向リストを構築したテンプレートクラスです。
0635デフォルトの名無しさん
2007/07/04(水) 01:18:07ファイルでもメモリーでもどっちでもいいが、書き換えサイズが同じなら、読んで書いて閉じればそれで終わり。
挿入や削除ならそこでちょん切ってリスト構造で繋ぎ直す。
0636デフォルトの名無しさん
2007/07/04(水) 01:43:20そのページのC編のほうのも参考にしてみたのですが、
できればグローバル変数を使わずに、
かつ、リスト操作関数の引数も、リストへのポインタだけにしたいのです。
逆に、関数内で作業用の変数が増えるのはあまりこだわりません。
もちろん、良識のある範囲で少ないほうがいいのですが。
0637デフォルトの名無しさん
2007/07/04(水) 01:44:58増やす方は2コ(リストと要素)、減らす方は1コ、というのが正しいですね。
0638デフォルトの名無しさん
2007/07/04(水) 01:45:03ファイルをリスト構造にする。
ところどころにダミーデータをいれておいて、そこをバッファに使う。
書き換えたい所を含んだクラスタを別のクラスタに繋ぎなおす。
別のファイルにパッチ情報として〜行目はこの内容に置き換わりました、のような情報を入れてセットで扱う。
直した所から後ろをそっくり書き直す
0639デフォルトの名無しさん
2007/07/04(水) 02:11:46みたいにしたとき、入力が64文字以上あるとどうなりますか?
63文字目までがhogeに入って後は無視されるんでしょうか?
0640デフォルトの名無しさん
2007/07/04(水) 02:14:48後は次の読み込みがあれば、その時に読み込まれる。
0641639
2007/07/04(水) 03:07:44fflush(stdin);
してしまうと、リダイレクトされてきた時に
改行以降も全て捨てられてしまうのでは?
0642デフォルトの名無しさん
2007/07/04(水) 03:16:35hoge[63] = 1;
fgets(hoge, 64, stdin);
if(hoge[63] == 0 && hoge[62] != '\n') {
scanf("%*[^\n]s");
getchar();
}
0643デフォルトの名無しさん
2007/07/04(水) 08:40:22p=&a;
ってやったら
*pはaと同じ(*p=a)になるんでしょ
でも@=&aとやらず*p=aはなんでダメなの?
0644デフォルトの名無しさん
2007/07/04(水) 08:43:50p==&a
0645デフォルトの名無しさん
2007/07/04(水) 08:48:28p=&a;
*p = 10;
printf("%d\n",a);
a = 20;
printf("%d\n",*p);
0646デフォルトの名無しさん
2007/07/04(水) 08:50:31その先に値を書き込もうとするか
0647デフォルトの名無しさん
2007/07/04(水) 12:10:01vector<string>とかできるの?
0648デフォルトの名無しさん
2007/07/04(水) 12:10:520649デフォルトの名無しさん
2007/07/04(水) 12:42:43スレタイを正しく読むのは難しいだろ
0650デフォルトの名無しさん
2007/07/04(水) 13:05:10少しは予測しろよw
0651デフォルトの名無しさん
2007/07/04(水) 13:16:200652デフォルトの名無しさん
2007/07/04(水) 13:20:44vector<vector>とかできるの?
vector<vector<int>>とか
vector<vector<vector>>
とかできるの?
0653デフォルトの名無しさん
2007/07/04(水) 13:25:340654デフォルトの名無しさん
2007/07/04(水) 13:31:330655デフォルトの名無しさん
2007/07/04(水) 13:58:39vector<vector<int> >
vector<vector<vector<int> > >
で試せ
0656デフォルトの名無しさん
2007/07/04(水) 14:34:52まあスレタイも読めないおばかさんは一生悩んでろ。
0657デフォルトの名無しさん
2007/07/04(水) 17:09:49case WM_CREATE:
test1=1;
test2=2;
break;
case WM_CREATE:
{
test1=1;
test2=2;
}
break;
case WM_CREATE:
{
test1=1;
test2=2;
}
return;
case WM_CREATE:
{
test1=1;
test2=2;
return;
}
どれ使ってもOK?
0658デフォルトの名無しさん
2007/07/04(水) 17:11:060659デフォルトの名無しさん
2007/07/04(水) 17:11:26breakとreturnは意味が違う。
0660デフォルトの名無しさん
2007/07/04(水) 17:16:090661デフォルトの名無しさん
2007/07/04(水) 18:09:430662デフォルトの名無しさん
2007/07/04(水) 18:14:360663デフォルトの名無しさん
2007/07/04(水) 18:16:27fflushは入力バッファに対してどう作用するか定められていない
(出力バッファを吐き出すことだけが規定されている)ので、
このスレとしては知らないという答えになる。
0664デフォルトの名無しさん
2007/07/04(水) 18:50:24breakとreturnはよく考えるとぜんぜん意味が違う事に気づいた
なぜreturnが入ってたんだろうw
0665デフォルトの名無しさん
2007/07/04(水) 19:07:30プロトタイプ宣言って必要なんですか?
なくても動くと思うのですが・・・
0666デフォルトの名無しさん
2007/07/04(水) 19:13:08あなたがいらないと思うなら必要ではないでしょう・
0667デフォルトの名無しさん
2007/07/04(水) 19:16:400668デフォルトの名無しさん
2007/07/04(水) 19:20:450669デフォルトの名無しさん
2007/07/04(水) 19:35:19printf関数やらfopen関数やらのプロトタイプ宣言がずらずらと並んでる
stdio.hにはプロトタイプ宣言だけが書かれてて,printf関数やfopen関数の実装はstdio.cに記述されている
ライブラリってのはヘッダファイルとソースファイルが対になっていて
ヘッダファイルに「このライブラリはこんな機能を提供しますよ〜」っと目次みたいなもんを書いてるわけだ
それがプロトタイプ宣言
なんでこんなことを分けるするかってのはソースを分割して機能別にライブラリ化するため
1個だけのソースファイルでプログラミングしてる時は必要無いけど普通はプロトタイプ宣言も書いておく
main関数の前にずらずら別の関数の実装が並んでいると,どこがmainの始まりか探すのが大変なのもある
0670デフォルトの名無しさん
2007/07/04(水) 20:18:022007 7
sun mon tue wed thu fri sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
みたいな万年カレンダーを作りたいんですけど、アルゴリズムを詳しく教えてほしいです。
よろしくおねがいします。
0671デフォルトの名無しさん
2007/07/04(水) 20:19:53sunのnの下に1がきてmonのnのしたに2がくる感じです
0672デフォルトの名無しさん
2007/07/04(水) 20:38:15上のプログラムは、入力した文字を逆向きにプリントしちゃうはずの
自分でゆうのもなんですが、優れものなんです。が
実行すると、何故か変な文字列が入っちゃいます><
こんな感じ↓(testと入力した場合)
http://www.uploda.org/uporg888409.jpg.html
どなたか、原因を教えてくださいな
教えてくれた方に、僕のケツ穴差し上げます><
0673デフォルトの名無しさん
2007/07/04(水) 20:42:440674デフォルトの名無しさん
2007/07/04(水) 20:49:51文字列の終端は'\n'じゃない
てめえの汚えケツ穴なんぞ誰がいるかってんだ
0675デフォルトの名無しさん
2007/07/04(水) 21:05:09朦朧としてると、こっちから押し倒しちゃうze(はぁと
>>674
ありがちんこ☆
\0か!
0676デフォルトの名無しさん
2007/07/04(水) 21:09:59>>674は絶好のチャンスを失った、と。
0677デフォルトの名無しさん
2007/07/04(水) 21:12:21#include <unistd.h>
int main(int argc, char *argv[]){return execlp("cal", "cal", argv[2], argv[1], NULL);}
0678デフォルトの名無しさん
2007/07/04(水) 21:14:37次のような処理:
(1)1番目の要素が同一の場合、後から出現したものを採用する
(2)3番目の要素でソートする
を行いたいのですが、どのようなアルゴリズムになりますか?
例)
0010 ABC 60 70
0022 BCD 56 76
0010 EFG 85 34
0003 HIJ 70 98
↓
0010 EFG 85 34
0003 HIJ 70 98
0022 BCD 56 76
0679デフォルトの名無しさん
2007/07/04(水) 21:15:510681デフォルトの名無しさん
2007/07/04(水) 21:59:030682デフォルトの名無しさん
2007/07/04(水) 22:25:350683デフォルトの名無しさん
2007/07/04(水) 22:29:190000番から9999番までの箱を用意してそれぞれの箱に入れていく。
で、既に入ってる場合は入ってるものを捨てて代わりを入れる。
全部入れ終わったらソート。
無駄だらけだけど分かりやすい考え方だとこんな感じ?
0684デフォルトの名無しさん
2007/07/04(水) 22:30:50for(i=n-1; i> 0; i--) {
for(j=i-1; j>=0; j--) {
if(a[j]==a[i]) {
for(k=j; k<n-1; k++) a[k] = a[k+1];
n--;
i--;
}
}
}
こんな感じで同じものを消去すりゃいいんじゃね?
0685デフォルトの名無しさん
2007/07/04(水) 22:31:140686デフォルトの名無しさん
2007/07/04(水) 22:34:55ソートしちゃうとどれが先にでてきたか分からなくならない?
いや、マージソートとかならいいけど
0687デフォルトの名無しさん
2007/07/04(水) 22:38:45そのための安定ソートだろ
入門篇ならバブルソートだろう
0688デフォルトの名無しさん
2007/07/04(水) 22:44:16ソートは3番目の要素でするんだぞ?
0689678
2007/07/04(水) 22:45:58それ考えたんですけど、
実際は0000000000番から9999999999番まで(10桁)あり、
番号も全部あるわけじゃないからやっぱり効率悪いですよね。
はやさも求められているんで・・・
ハッシュとか2分探索とか使うんですかね?
0690デフォルトの名無しさん
2007/07/04(水) 22:50:51一番目の要素で安定ソート
一番目の要素でのかぶりを削除
三番目の要素でソート
ってことだろ。
0691デフォルトの名無しさん
2007/07/04(水) 22:53:290692デフォルトの名無しさん
2007/07/04(水) 23:05:49重複してるかどうか調べるのはハッシュ使うのがいいと思う
0693デフォルトの名無しさん
2007/07/04(水) 23:08:010694デフォルトの名無しさん
2007/07/05(木) 09:38:27それどっかの入門書に載ってたぞ
0695デフォルトの名無しさん
2007/07/05(木) 15:50:140696デフォルトの名無しさん
2007/07/05(木) 15:53:130697デフォルトの名無しさん
2007/07/05(木) 15:54:070698デフォルトの名無しさん
2007/07/05(木) 15:55:33そういう手法があるの?関数の内容よりそっちに目がいった。
こんなことしたことないけど、どうなの?
0699デフォルトの名無しさん
2007/07/05(木) 15:58:240700デフォルトの名無しさん
2007/07/05(木) 16:06:000701デフォルトの名無しさん
2007/07/05(木) 16:41:17Vertices isMaxNoVer(Vertices R[]){
Vertices max;
int i, count=0;
max.num = 0;
max.deg = 0;
max.no = 0;
count = countVer(R);
for(i=0; i<count-1; i++){
if(max.no < R[i].no){
max = R[i];
}
}
return max;
}
この関数を、次の再帰関数を使って二度目に呼び出した時、
動作がおかしくなり、以下のようなおかしな値が入ります。
test expand 1, 8 -1073747304 134516287
更にその後2度目のtest expand 3に入る前に
セグメントエラーを起こして止まってしまいます。
これだけの情報でわかって頂けるかわかりませんが、
誰か助けてください。
0702701
2007/07/05(木) 16:42:43Vertices p, buf[N], Rp[N];
while(countVer(R) != 0){
p = isMaxNoVer(R);
printf("test expand 1, %d %d %d\n", p.num, p.deg, p.no);
if((countVer(Q) + p.no) > countVer(Qmax)){
syokikaVer(buf);
mataha(Q, p);
printf("test expand 2\n");
syokikaVer(buf);
ganma(buf, p.no, G);
printf("test expand 3\n");
syokikaVer(Rp);
katu(Rp, buf, R);
printf("test expand 4\n");
0703701
2007/07/05(木) 16:44:38numberSort(Rp);
expand(Rp);
}
else if(countVer(Q) > countVer(Qmax)){
copyVer(Qmax, Q);
}
hiku(p, Q);
}
else return;
hiku(p, R);
}
return;
}
QやQmax、Gはグローバル変数です。
0704デフォルトの名無しさん
2007/07/05(木) 18:03:30それだけだと分からんなぁ〜
katu(Rp, buf, R);
numberSort(Rp);
このへんの関数に問題ありそうだけど
0705デフォルトの名無しさん
2007/07/05(木) 18:29:52今、以下のような関数と構造体を作ったのですが、
typedef struct
{
int Length, Maximam, ValueSize;
void* Array;
} ArrayList;
char* GetValue(ArrayList* list, int index)
{
char* data = (char*)list->Array, item = malloc(list->ValueSize);
int i = 0;
unsigned int p = index * list->ValueSize;
if(list->Length > index && item != NULL) {
for(; i < list->ValueSize; i++) {
item[i] = data[p + i];
}
return item;
} else {
return NULL;
}
}
以下続く
0706デフォルトの名無しさん
2007/07/05(木) 18:33:110707705
2007/07/05(木) 18:33:11{
char* data = (char*)list->Array, item = (char*)values;
unsigned int i = 0, itemlength = length * list->Maximam, index = list->Length * list->ValueSize;
if(list->Length + length >= list->Maximam) {
list->Maximam += length * 2;
list->Array = realloc(list->Array, list->ValueSize * list->Maximam);
} for(; i < itemlength; i++) { data[index + i] = item[i]; }
list->Length += length;
}
void main (void)
{
ArrayList list = { 0, 4, sizeof(int), malloc(sizeof(int) * 4) };
int i = 0;
int s[10] = { 0, 1, 2, 3, 4, 5, 6 ,7 ,8 ,9 };
AddRange(&list, s, 10); AddRange(&list, s, 10);
for(; i < list.Length; i++) { printf("%d\n", *((int*)GetValue(&list, i))); }
}
どうしてもGetValueのchar* itemの領域が確保できないんです。
他にも、listのArrayをいじってもヒープが壊れてますとか言われるのですが…
なにかやってはいけないことでもやってしまっているのでしょうか?
行数圧縮しているため読みにくいとは思いますが、よろしくお願いします。
0708705
2007/07/05(木) 18:34:36int i = 0;
int j = 0;
のように宣言しています。
0709デフォルトの名無しさん
2007/07/05(木) 18:38:04*itemで宣言しなきゃダメだろ
0710デフォルトの名無しさん
2007/07/05(木) 18:41:16元ソースでは
char*になってたんですが…
削りすぎた orz
0711705
2007/07/05(木) 19:07:04AddRange(&list, s, 10);を
連続でなくとも2回使用するとGetValueのitemの中がNULLに、
3回目からはAddRange(&list, s, 10);で行われるreallocで
ヒープが壊れているというエラーが出てくるようです。
何が悪いんだろ orz
0712デフォルトの名無しさん
2007/07/05(木) 19:09:20itemlengthとreallocのサイズが乖離してる
0713デフォルトの名無しさん
2007/07/05(木) 19:17:30char *GetValue(ArrayList list, int index)
{
return (char*)list.Array + index * list.ValueSize;
}
これで十分じゃね?
0714デフォルトの名無しさん
2007/07/05(木) 19:24:04でいけるかな?
0715デフォルトの名無しさん
2007/07/05(木) 19:29:48itemlength = length * list->Maximam
のMaximamが原因でした。ValueSizeにするはずだったのに…
1回の使用だけだとエラーが出なかったので問題ないと思い込んで
気づかなかった orz
>>713
そんなやり方もあったんですか…
void*だとサイズわかんねぇよって怒られるのでchar*にして
コピーする方法しか知りませんでした。
>>714
全くその通りです。
まともにコードかけるようになるのは時間がかかりそうだ orz
ありがとうございました!
0716デフォルトの名無しさん
2007/07/05(木) 19:34:000717デフォルトの名無しさん
2007/07/05(木) 21:55:47具体的に言うと
int n = 34;
char* nStr = intToStr( n ); /* nStr = "34" */
という風にしたいのだけれど。
0718デフォルトの名無しさん
2007/07/05(木) 22:03:14int n=34;
buf=メモリ確保
ssprintf(buf,"%d",n);
0719デフォルトの名無しさん
2007/07/05(木) 22:05:12sが一個多かった
sprintf
0720デフォルトの名無しさん
2007/07/05(木) 22:35:49サンキュ!
inline char* int2str( int n )
{
char *buffer;
buffer = malloc( sizeof( char ) );
sprintf( buffer, "%d", n );
return buffer != NULL ?
buffer:
"FAULT!!";
}
一応こういう感じで。
0721デフォルトの名無しさん
2007/07/05(木) 22:43:17>buffer = malloc( sizeof( char ) );
1バイトしか確保できないよ
'\0'しか格納できない
もう少し多めに確保して
>return buffer != NULL ? buffer:"FAULT!!";
buffer の確保が失敗した場合 sprintf( buffer, "%d", n ); でエラーが出る
buffer = malloc( sizeof( char ) );
if(buffer){
sprintf( buffer, "%d", n );
return buffer;
}
else {
return "FAULT!!";
}
のほうがいい気がする
0722デフォルトの名無しさん
2007/07/05(木) 22:57:49せっかくならmallocも直してやれよw
11桁くらい確保すれば十分の気がする
0723デフォルトの名無しさん
2007/07/05(木) 23:16:28んじゃ buffer = malloc(sizeof( char ) *12);
または buffer = malloc(12);
>>722
符号付の場合、'\0'いれると12文字になる
0724デフォルトの名無しさん
2007/07/05(木) 23:40:25最強の関数教えてください
0725デフォルトの名無しさん
2007/07/05(木) 23:42:070726デフォルトの名無しさん
2007/07/05(木) 23:42:250727デフォルトの名無しさん
2007/07/05(木) 23:43:51abort
0728デフォルトの名無しさん
2007/07/05(木) 23:49:330729デフォルトの名無しさん
2007/07/06(金) 01:35:39↑これは?
0730デフォルトの名無しさん
2007/07/06(金) 01:36:56C++じゃ必須の書き方だがCじゃいらん。
0731デフォルトの名無しさん
2007/07/06(金) 01:47:14キャスト演算子とか知ってなさそうだな・・・平気で型の違う変数をキャスト演算子なしで
代入しちゃうようなヘボプログラマーかw
0732デフォルトの名無しさん
2007/07/06(金) 01:48:120733デフォルトの名無しさん
2007/07/06(金) 01:54:010734デフォルトの名無しさん
2007/07/06(金) 01:56:50> bufferの型にあわせてあるんだろ。
> C++じゃ必須の書き方だがCじゃいらん。
0735732
2007/07/06(金) 01:57:25可能っぽいですね
0736デフォルトの名無しさん
2007/07/06(金) 02:01:260737デフォルトの名無しさん
2007/07/06(金) 02:01:260738デフォルトの名無しさん
2007/07/06(金) 02:04:22キャストしないと警告もんだとか言い出してみる。
0739デフォルトの名無しさん
2007/07/06(金) 02:04:470740デフォルトの名無しさん
2007/07/06(金) 02:08:16malloc で気を使っても、
どっかで void* 使ってたらそれだけでアウツだけどな。
その環境なら。
0741732 ◆L/nntMgEC6
2007/07/06(金) 02:11:36可能なんですか?
0742デフォルトの名無しさん
2007/07/06(金) 02:12:010743デフォルトの名無しさん
2007/07/06(金) 02:24:21> void*が無かった頃のCなら
0744デフォルトの名無しさん
2007/07/06(金) 02:27:29char a[10];
int i;
でa[i]ってことですか?
もちろん可能。
添え字は整数の値をとる式ならなんでもおkだぞ。
0745デフォルトの名無しさん
2007/07/06(金) 02:29:22> 添え字は整数の値をとる式ならなんでもおkだぞ。
(VIPPERのAA略)<常識的に考えて配列の要素番号の範囲内だろ
0746デフォルトの名無しさん
2007/07/06(金) 02:33:490748デフォルトの名無しさん
2007/07/06(金) 02:34:50WMPのファイル→URLを開く→http://matoinu.orz.hm:30000をコピペ→OK
実況スレ
何でも実況V なんでも実況フリーダム
http://live24.2ch.net/test/read.cgi/livevenus/1183654888/
面白いぜwwwwww
0749デフォルトの名無しさん
2007/07/06(金) 02:38:250750デフォルトの名無しさん
2007/07/06(金) 02:40:290751732 ◆L/nntMgEC6
2007/07/06(金) 02:42:37回答有難う御座います。
int i;
char a[]="abc";
i=strlen(a);
char b[i];
のような感じで使いたいのですが、可能でしょうか?
0752デフォルトの名無しさん
2007/07/06(金) 02:44:57キャストは不要でつか〜〜〜?
0753デフォルトの名無しさん
2007/07/06(金) 02:46:39アホが常駐しとるな
(VIPPERのAA略) < 常識的に考えて知ったかぶって初心者にありもしないことを言う方がおかしいだろ
どう考えて配列を適切に参照できる、要素番号の範囲内の値をとる式ならって話ならわかるけどw
0754デフォルトの名無しさん
2007/07/06(金) 02:48:030755デフォルトの名無しさん
2007/07/06(金) 02:49:35> 添え字は整数の値をとる式ならなんでもおkだぞ。
整数の値をとる式ならなんでも 整数の値をとる式ならなんでも
こやつは要素数と参照できる範囲外の値をとってもおkなんだぞぉーーー!
0756デフォルトの名無しさん
2007/07/06(金) 02:50:280757デフォルトの名無しさん
2007/07/06(金) 02:53:330758デフォルトの名無しさん
2007/07/06(金) 02:53:52all right, I will use AA that's not for short.
0759デフォルトの名無しさん
2007/07/06(金) 02:54:34> いつものアホ
アホとか言っちゃってるよぉ〜〜〜、お前がアホのくせして初心者に大嘘教えているくせにw
お前みたいな奴にアホ言われたくね〜〜なぁ。俺は間違ってねーし。お前は不適切。
0760デフォルトの名無しさん
2007/07/06(金) 02:56:01不十分な(というか間違っている)説明の言い訳をするかぁ?
んじゃお前は a[10] の配列の10番目を参照するときは a[10] とでもやってろよ
0761デフォルトの名無しさん
2007/07/06(金) 02:56:21それはダメ。
配列変数の宣言文には変数は使えない。
それをするなら
nt i;
char a[]="abc";
char *b;
i=strlen(a);
b=(char*)malloc(sizeof(char)*i);
0762デフォルトの名無しさん
2007/07/06(金) 02:56:51int i;
char a[]="abc";
char *b;
i=strlen(a);
b = (char*)malloc(sizeof(char)*i);
free(b);
スレの流れからすればこんな感じ
bにaと同じ長さの文字列を入れるなら+1しないと駄目だけど。
0763732 ◆L/nntMgEC6
2007/07/06(金) 02:58:25有難う御座います。おかげで疑問が解けました。
0764デフォルトの名無しさん
2007/07/06(金) 03:00:43. | (__人__) 指摘した相手をアホとか言う方がアホだろ
| ` ⌒´ノ 常識的に考えて・・・
0765デフォルトの名無しさん
2007/07/06(金) 03:01:22C99ならできるというのは禁句かい?
0766デフォルトの名無しさん
2007/07/06(金) 03:03:23突っ込みとしては、ちょっと弱い。
0767デフォルトの名無しさん
2007/07/06(金) 03:04:15| (●)(●) | 間違っていない奴にアホって言うアホだろ
. | (__人__) | 常識的に考えて。ちゃんとキャストしろよ
0768デフォルトの名無しさん
2007/07/06(金) 03:05:15貶し合ってないで意味のある話をしろ
0769デフォルトの名無しさん
2007/07/06(金) 03:08:42VBだとそれができるんだよね。
それはVBなどのインタープリター言語は実行時に変数宣言文も実行文もおなじように上から処理してゆくから。
Cのようなコンパイラ言語はコンパイル時に変数宣言文を処理してゆく。
だからコンパイル時に配列変数のサイズがわかっていないと処理ができない。
JavaもVBと同じだと思う。
0770デフォルトの名無しさん
2007/07/06(金) 03:09:220771デフォルトの名無しさん
2007/07/06(金) 03:09:45C99ならできるの?
0772デフォルトの名無しさん
2007/07/06(金) 03:10:54. | (__人__) 起用されても、まともなキャスティングもされずに
| ` ⌒´ノ 脇役かエキストラに決まってんじゃん>アホ言うたアホ
0773デフォルトの名無しさん
2007/07/06(金) 03:12:15今日はお開きだ
0774デフォルトの名無しさん
2007/07/06(金) 03:15:420775デフォルトの名無しさん
2007/07/06(金) 03:17:050776デフォルトの名無しさん
2007/07/06(金) 03:27:41余裕
0777デフォルトの名無しさん
2007/07/06(金) 03:27:46初心者相手にいい加減な説明、笑えねぇ〜〜〜〜〜。お前、指導者に向いてねーよ。
0778デフォルトの名無しさん
2007/07/06(金) 04:13:510779デフォルトの名無しさん
2007/07/06(金) 04:41:39printf に渡すときの話とはわけが違うぞ?
0780デフォルトの名無しさん
2007/07/06(金) 06:14:06ループ使って1バイトずつputchar()で画面に表示しても
ちゃんとどちらも表示されるのは、シェルやプロンプトの方で
何バイト文字か確認して1バイト文字じゃない時は
一度バッファに溜める、とかしてるからですか?
0781デフォルトの名無しさん
2007/07/06(金) 06:21:010783デフォルトの名無しさん
2007/07/06(金) 07:35:00いいえ、シェルプログラムはそんなことはしません。
0785デフォルトの名無しさん
2007/07/06(金) 08:09:19いいえ、勿論コンパイラの知ったこっちゃありません。
もしかしたら、画面表示はシェルプログラムがやっていると思っているんですか?
例えば他のPCにリモートログインしたときには相手先のシェルプログラムが動くわけですが、
そのシェルプログラムが自分の使っているPCの画面を直接アクセスするなんて夢でも見ているんですか?
0786デフォルトの名無しさん
2007/07/06(金) 08:23:14マルチバイト文字などに関係なく、標準入出力は
行単位バッファリングされていることが多い。
バッファリングなしにしても、まあ正しいマルチバイト文字列になった時点で
正しく表示されると仮定していいと思う。
0787780
2007/07/06(金) 08:24:22ということはOSの画面表示を担当するプログラムが
putchar()で2バイト文字の一部を出力しようとした時に
2バイト文字の一部だと判断し表示を一時中断して
次に送られてくるputcharの引数と組み合わせて
それに対応する2バイト文字を出力していているんでしょうか?
0788デフォルトの名無しさん
2007/07/06(金) 08:26:310789デフォルトの名無しさん
2007/07/06(金) 08:28:46iso-2022-jpの1バイト目はASCII文字と同じコード。
0791デフォルトの名無しさん
2007/07/06(金) 08:39:37Shift_JISしか考えてなかった。参考になった
ありがとう
0792デフォルトの名無しさん
2007/07/06(金) 08:41:440793デフォルトの名無しさん
2007/07/06(金) 09:11:21char型ならその分のデータを受け取るまで待つ
0794デフォルトの名無しさん
2007/07/06(金) 09:18:020795デフォルトの名無しさん
2007/07/06(金) 11:50:432.4 4.2 4.1 0.2 4.2 5.3
2: 3.2 2.4 3.4 2.2 5.2 3.4 5.2
2.4 4.2 4.3 0.2 4.2 5.3
3: 3.1 2.6 3.4 2.1 6.2 3.4 5.2
2.4 4.2 4.0 0.2 4.2 5.3
っていうデータがあるとして
10個目(つまり4.3 4.1 ,4.0)だけを抜き出すプログラムをつくれといわれると
float型でやりますか?char型でやりますか?
0796デフォルトの名無しさん
2007/07/06(金) 12:26:170797デフォルトの名無しさん
2007/07/06(金) 13:03:17使うなら double 。
0798デフォルトの名無しさん
2007/07/06(金) 13:51:36文字列のままで通しちゃったほうがいいべ
0799デフォルトの名無しさん
2007/07/06(金) 14:01:23それはない。そんなことしたら、ファイルにリダイレクトできない。
>>791
iso-2022-jpの場合、KanjiInが来た後は2バイト文字、そうでなければAsciiという分け方。
だから2バイト文字の後にKanjiOutが来ないと文字化けする。
>>790
バッファリングはするかもしれないが、出力の判断とは直接的には無縁。
でなければエスケープシーケンスでの制御ができない。
0800デフォルトの名無しさん
2007/07/06(金) 15:41:47>KanjiInが来た後は
>KanjiOutが来ないと
そんなコード/シーケンスはありません。
0801デフォルトの名無しさん
2007/07/06(金) 18:09:25あるのですか。LSI C-86を使ってC言語を学ぶという趣旨の本を5年前に
買ったのを今になって勉強しようとしてインストールしたという次第です。
最初のコマンドプロンプトがC:\>になるはずのところ、C:Documents and
Settings□□>となりエラーと表示されました。□□は、再起動時に
アカウント指定を要求され、自分の名前を入れたものです。
別な場所へインストールすればよいのですか。よろしくお願いします。
0802デフォルトの名無しさん
2007/07/06(金) 18:15:05LSI-C86は遺物なので、特殊性を理解できていないなら使ってはいけない。
MSのVisualStudioでもgccでも、無料で手に入るほかのコンパイラを使うことをお勧めする。
0803デフォルトの名無しさん
2007/07/06(金) 18:18:59本と同じになるだけで、役には立たないだろうけど。
0804デフォルトの名無しさん
2007/07/06(金) 18:26:590805デフォルトの名無しさん
2007/07/06(金) 18:43:580806デフォルトの名無しさん
2007/07/06(金) 18:59:380807デフォルトの名無しさん
2007/07/06(金) 19:03:18たぶん電子メールのレスと2ちゃんのレスは同じ意味を持ってると思うんだが、
だとしたら君が使ってるresponseはレスという意味とは違うぞ
0808デフォルトの名無しさん
2007/07/06(金) 19:06:00http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%B9
0809デフォルトの名無しさん
2007/07/06(金) 19:37:260811デフォルトの名無しさん
2007/07/06(金) 19:43:03Reply. Its abbreviation followed by colon (Re:) is prepended to e-mail subject lines when answering a received message
って書いてるんだよな。
まあ、スレ違いだからどうでもいいが。
0812デフォルトの名無しさん
2007/07/06(金) 20:22:371 ジョイスティックは,画面上に透明なセンサを取り付けたものであり,画面に指などを押し付けて座標を指示する。
2 タブレットは,ペンのような装置と板状の装置を組み合わせた入力機器であり,ペンのような装置を押し付けて座標を指示する。
3 ディジタイザは,人間のもつ静電気を利用して指の位置を検出するポインティングデバイスであり,操作面を指して座標を指示する。
4 トラックパッドは,球の一部分が装置の上面に出ているポインティングデバイスであり,球を指で直接回転させて,その変化量で座標を指示する。
すみません、質問なのですが今上の問題がハードウエアの組み込みの
参考書の問題がわかりませんので、教えてはいただけないでしょうか?
0813デフォルトの名無しさん
2007/07/06(金) 20:25:092
0814デフォルトの名無しさん
2007/07/06(金) 20:26:341はジョイスティックの説明ではない事は明らかだから×
2は正しいと思うから○
3は知らんから知らん
4はトラックパッドじゃなくてトラックボールの説明だから×
0815デフォルトの名無しさん
2007/07/06(金) 20:29:48これで先に行けます。
0816デフォルトの名無しさん
2007/07/06(金) 20:32:06Cのすごい所って何?
0817デフォルトの名無しさん
2007/07/06(金) 20:38:010818デフォルトの名無しさん
2007/07/06(金) 20:38:40おまえの方がすごいと思う。
0819デフォルトの名無しさん
2007/07/06(金) 20:38:580820デフォルトの名無しさん
2007/07/06(金) 20:41:363の説明がトラックパッドっぽいな
0821デフォルトの名無しさん
2007/07/06(金) 20:42:36C++も体にぴったり張り付くスク水のように、
ハードウェアに貼りつけるの??
0822デフォルトの名無しさん
2007/07/06(金) 20:43:220823デフォルトの名無しさん
2007/07/06(金) 20:44:46C++も制御系によく使われるの?
それともC++はオープン系(WEB系も含む)?
0824デフォルトの名無しさん
2007/07/06(金) 20:47:10をつくりたいんですけど、BCCでコンパイルしたら公式のところでエラー
「浮動小数点の不正な使用」ってでるんですけど、どうしてだかわかりますかね?
#include <stdio.h>
int main(void){
int year,month,day;
char youbi[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i;
printf("Year?");
scanf("%d",&year);
printf("Month?");
scanf("%d",&month);
printf("Day?");
scanf("%d",&day);
i=(year + (year/4) - (year/100) + (year/400) + (2.6*month +1.6) + day)%7;
printf("It's %s.",youbi[i]);
return 0;
}
0825デフォルトの名無しさん
2007/07/06(金) 20:49:26C++の場合スク水フェチのオジサンが自分で着る用に作ったものもあるので注意
0826デフォルトの名無しさん
2007/07/06(金) 20:56:27(2.6*month +1.6)を(int)(2.6*month +1.6)にしろ。
ここが整数でないから、%の左側全体が整数型でなくなっている。
剰余演算子は浮動小数点数を演算対象にできないので、件のエラーになる。
0827デフォルトの名無しさん
2007/07/06(金) 20:57:13Cが制御系で使われるのは「最強」だからではなく「高級アセンブラ」だから。
C++も制御系で使われるよ。C++として使われるかはともかく。
つか、最強ってなんだよ。
0828デフォルトの名無しさん
2007/07/06(金) 20:58:38剰余演算子%というオペランドは整数同士でないとダメ
演算してる行の型がごっちゃになってるから明示的にキャストしたり読みやすくすべき
基本的にコメント文とかで説明もなしに実数を整数に叩き込んだりしちゃだめ
0829デフォルトの名無しさん
2007/07/06(金) 21:19:140830デフォルトの名無しさん
2007/07/06(金) 21:30:26基本情報の午後問をCで受かりたいのですが、なんの本を読めばいいですか?
当方、C言語はよくわかりません。COBOLは少しできます。
ただCで受けたいのです。
0831デフォルトの名無しさん
2007/07/06(金) 21:32:10試験は慣れたものでやるべき
0832デフォルトの名無しさん
2007/07/06(金) 21:58:20アセンブラがオススメ
例年一番簡単
0833デフォルトの名無しさん
2007/07/06(金) 21:59:06それともvisual basic かどれでやればいいですか?
0834デフォルトの名無しさん
2007/07/06(金) 22:04:130835デフォルトの名無しさん
2007/07/06(金) 22:10:250836デフォルトの名無しさん
2007/07/06(金) 22:12:46Linuxでもできるよ。
0837デフォルトの名無しさん
2007/07/06(金) 22:14:19int iarray[10];
memset(iarray, 0, sizeof(array));
ですべて0で初期化できると知ったのですが、
実数型配列を
double darray[10];
memset(darray, 0.0, sizeof(array));
のように初期化してもかまいませんか?
つまり実数型配列の全ての要素を0.0にしたいのです
0838デフォルトの名無しさん
2007/07/06(金) 22:16:31いいんじゃね?
DirectXとか、そういう方法で、実数やらポインタやらバリバリクリアしてたな。
移植性は無くなる。
0839デフォルトの名無しさん
2007/07/06(金) 22:17:55あ、これは、警告かエラーになるな。
sizeof のところはミスだよね?
0840デフォルトの名無しさん
2007/07/06(金) 22:19:54ANSI/ISO Cへの移植性を望むなら避けるべき。
浮動小数点数がIEEE 754に則っていることを仮定してよいなら構わない。
0841デフォルトの名無しさん
2007/07/06(金) 22:21:17ほとんどにアルゴリズムの問題
ポケコンのCインタプリタでおk
0842デフォルトの名無しさん
2007/07/06(金) 22:26:29あと、0.0 は 0 だな。
0843デフォルトの名無しさん
2007/07/06(金) 22:27:49すみません sizeof(darray) です
あとmanページでmenset関数を調べてみると
#include <string.h>
void *memset(void *buf, int ch, size_t n);
となっていたので
int ch に0.0と渡してもだめなんですね
ということは関数の仕様上は
memset(darray, 0, sizeof(darray));
と書くのが正しくて、
しかもCコンパイラの浮動小数点がIEEE754前提での使い方なので
結局は配列の要素数の分だけループで回して初期化するのが
一番いちゃもん言われにくいということでよろしいでしょうか?
ありがとうございました
0844デフォルトの名無しさん
2007/07/06(金) 22:29:230845デフォルトの名無しさん
2007/07/06(金) 22:37:07double darray[10] = {0};という手もある。
0846デフォルトの名無しさん
2007/07/06(金) 23:01:27漏れもそれでいいと思う
アセンブリみたら結局memset呼び出してるけど
0847デフォルトの名無しさん
2007/07/06(金) 23:02:12reallocを使ってて何度かlong*の領域をのばしてたんですが、
数百〜数千の間で必ずと言っていいほどヒープが壊れていますと
言われるのですが、値がばらばらでどこが原因だかわかりません。
こういうときはどのようにしてバグを見つければいいのでしょうか?
0848デフォルトの名無しさん
2007/07/06(金) 23:07:090849847
2007/07/06(金) 23:46:14エラーが… もうやだ orz
もう少しいじってからまた来ます。
0850デフォルトの名無しさん
2007/07/06(金) 23:47:41デバッグする
最低限の機能だけにして実行してみる
ソースをじっくり眺める
0851デフォルトの名無しさん
2007/07/07(土) 00:33:490852デフォルトの名無しさん
2007/07/07(土) 00:35:290853デフォルトの名無しさん
2007/07/07(土) 00:44:260854847=705
2007/07/07(土) 00:59:55以下の関数
void Add(ArrayList* list, const void* value)
{
char* data = (char*)list->Array;
char* item = (char*)value;
int i = 0;
unsigned int index = list->Length * list->ValueSize;
if(list->Length >= list->Maximam) {
list->Maximam *= 2;
list->Array = realloc(list->Array, list->ValueSize * list->Maximam);
}
for(; i < list->ValueSize; i++) {
data[index + i] = item[i];
}
list->Length++;
}
でポインタの長さを2048以上にして次以降でポインタの長さをいじるか、
この関数でポインタの長さを4000以上にすると
ヒープが壊れるみたいです。
//やっぱりCで.NETのArrayListもどきを作ろうとすること自体が間違ってるんだろうか…
0855847=705
2007/07/07(土) 01:03:49長さを2048以上にして次以降 → ×
長さを2000以上にして次以降 → ○
0856デフォルトの名無しさん
2007/07/07(土) 01:10:22そこだけ見れば問題なさそうに見える。
> //やっぱりCで.NETのArrayListもどきを作ろうとすること自体が間違ってるんだろうか…
大いに間違っているといってやろうではないか。
軽くC++をやってみな。これくらい標準ライブラリの内だから。
0857デフォルトの名無しさん
2007/07/07(土) 01:13:59reallocはメモリ確保できてるの?
0858847=705
2007/07/07(土) 01:23:19ArrayList list = { 0, 1000, sizeof(short), malloc(1000 * sizeof(short)) };
for(; i < 1001; i++)
{
Add(&list, &i);
}
for(i = 0; i < list.Length; i++)
{
printf("%d\n", *((short*)GetValue(list, i)));
}
free(list.Array);
getch();
としたら、ポインタの長さが4000バイト以上でfreeのところで、8000バイト以上だと
Addのところで止まるようになりました。
>>855
やっぱり間違ってますよね orz
C#から来てて、いい加減ネイティブでもかけるようになりたいなと思い
Cを始めたのですが、C++の方のがいいのかな…
>>857
上の例だと、4000バイトまでは確保できて、8000バイトからは確保できず、
エラーが出てしまいます。
0859デフォルトの名無しさん
2007/07/07(土) 02:16:260860デフォルトの名無しさん
2007/07/07(土) 04:26:13突っ込みどころ満載だけど、一番の原因は>859だな。
0861847=705
2007/07/07(土) 08:41:15('A`)ヴァー
とんでもないところを間違っていることに今気づきました。
ありがとうございます。
>>860
まだ始めてから1ヶ月経ってないので、それは自覚していますが、
どこ、とまではわからず…
よろしければつっこんでいただけるとうれしいです。
(.NETの(ryが間違っていると言うこと以外で oz)
0862デフォルトの名無しさん
2007/07/07(土) 09:26:51>860じゃないけど幾つか。
・realloc()の第一引数を戻り値で上書きしている
#realloc()の仕様に注意
・iの初期化と参照が泣き別れ
#折角forを使うのだから……
・indexの立場(名前と使い途)が微妙
#eralloc()した後で、オフセット計算してしまえば無くてもすむ
0863デフォルトの名無しさん
2007/07/07(土) 11:36:42でしょうか? メンバに配列が居た時にきちんとゼロクリアされているかが疑問です。あ
と、パディングされている部分もクリアされないような(これは大した問題じゃないかな)。
0864デフォルトの名無しさん
2007/07/07(土) 11:42:58・せっかく value を const にしていながら、const でない item に
無理やりキャストして代入し直している
・for ループで 1 バイトずつコピーするより、
memcpy() とか使うほうが効率良い
・main() 関数の i は int? short?
int なのであれば、一旦 short 型の変数に代入して、short 型の変数の
ポインタを Add() の引数として渡すべき
・Maximam -> Maximum
0865デフォルトの名無しさん
2007/07/07(土) 11:54:03安心しろ、コンパイラはその辺を適当に最適化してくれる。
#つーか、パディングがクリアされることに依存したコードは論外だ。
つい先日もどこかのスレで{0}でもmemset()呼び出しのコードになったと言う報告があった。
iccではmemset()より高速な内部関数を呼ぶようだ。
0866デフォルトの名無しさん
2007/07/07(土) 11:55:04listを作るときも、初期化子でやるのではなく、コンストラクタ相当の関数を作ろうよ。
そして終わりも直接freeするのではなく、やはりデストラクタ相当の関数を作る。
0867867
2007/07/07(土) 13:17:40のですが,いくらやっても手計算の結果と一致しません。Ax=bという行列とベクトルの
計算で,
[1 4 3]
A=[2 5 4]
[1 -3 -2]
[1]
b=[4]
[5]
という数値で,
[ 3]
x=[-2]
[ 2]
という結果になるはずなんですが上手くいきません,どこが違うのでしょうか…?
#include<stdio.h>
#include<math.h>
#define NMAX 3
main()
{
double a[NMAX][NMAX]={{1,4,3},{2,5,4},{1,-3,-2}}; /*数値は適当,課題はこの数値*/
double b[NMAX]={1,4,5},x[NMAX]; /*定数ベクトルの数値も適当*/
int i,j,k;
0868867
2007/07/07(土) 13:28:22{
for(i=0;i<NMAX;i++)
{
if(i!=k)
{
for(j=0;j<NMAX;j++)
{
a[i][j]=a[i][j]-(a[i][k]/a[k][k])*a[k][j]; /*係数行列の対角化*/
b[i]=b[i]-(a[i][k]/a[k][k])*b[k];
}
}
}
}
for(i=0;i<NMAX;i++)
{
x[i]=b[i]/a[i][i];
}
printf("The vector x(answer) is: \n");
printf("[%lf %lf %lf]",x[0],x[1],x[2]);
}
0869デフォルトの名無しさん
2007/07/07(土) 13:38:59素朴な疑問なんだが、「係数行列の対角化」の行は合ってる?
0870867
2007/07/07(土) 14:43:45こういう形になるらしいので、そのまま引用してます。
0871デフォルトの名無しさん
2007/07/07(土) 15:03:36対角化の処理の間に古い値と新しい値が混ざってしまうようだよ。
つまり、例えばこういうこと。
古いa[どっか]*古いa[よそ]→新しいa[どっか]
古いa[よそ]*新しいa[どっか]→間違ったa[よそ]
処理中は古い値を一時的に保存しておかないといけない。
つまり、例えばこういうこと。
古いa[どっか]→一時的なa[どっか]
古いa[よそ]→一時的なa[よそ]
一時的なa[どっか]*一時的なa[よそ]→新しいa[どっか]
一時的なa[よそ]*一時的なa[どっか]→新しいa[よそ]
0872867
2007/07/07(土) 15:54:070873705
2007/07/07(土) 16:03:00>>862
>#realloc()の仕様に注意
後からわかったのですが、reallocでNULLが返ってきたときのことでしょうか?
一応代入前にNULLチェックをするようにします。
>・iの初期化と参照が泣き別れ
変数宣言と同時に初期化というのが体に染みついているので、
forの中で初期化するのがあまりしっくりこないもので…
>#realloc()した後で、オフセット計算してしまえば無くてもすむ
reallocした後に、data += list->Length * list->ValueSize;
という風にすると言うことでしょうか?
>>864
>無理やりキャストして代入し直している
確かにこれじゃconstした意味ないですよね orz
>memcpy() とか使うほうが効率良い
どこかで構造体のコピーにmemcpyは使うなと言うのを見たのですが、
この場合は大丈夫なのでしょうか?
>main() 関数の i は int? short?
ここに書いたのはただのテスト用なので問題ないのですが(一応short)、
実際に使うときには注意します。
>・Maximam -> Maximum
orz
>>866
ここには書きませんでしたが、コンストラクタ相当の関数ととデストラクタ
相当の関数は作ってあります。
いろいろなツッコミありがとうございました。
0874デフォルトの名無しさん
2007/07/07(土) 17:09:18コーディングガイドでは寧ろ、「参照直前に初期化(代入)」なんだけどね。
c99ならfor (int i = 0; ...ですむし、C++でも……って、C++ならSTL使うか。
どうしてもってことなら、c89でもブロックの先頭なら宣言できるのでこういう手は使える。
anyFunction(...)
{
...;
...;
{
int i = 0;
for (; i < list->ValueSize; ++i) {
...;
}
}
}
0875デフォルトの名無しさん
2007/07/07(土) 17:16:46...
for(i = 0; ...) {
}
って書けばいいじゃん。
どうせ最適化で最初の 0 初期化は消える。
0876デフォルトの名無しさん
2007/07/07(土) 17:36:230877デフォルトの名無しさん
2007/07/07(土) 17:42:100878デフォルトの名無しさん
2007/07/07(土) 17:46:40aだけじゃなくて、bもだよ。
0879デフォルトの名無しさん
2007/07/07(土) 17:53:540880デフォルトの名無しさん
2007/07/07(土) 17:59:36半角なら *p=='(半角スペース)' (pはchar *) で比較一致したら処理、で出来るんですが全角の場合どうすればいいのか分かりません
お願いします
0881デフォルトの名無しさん
2007/07/07(土) 18:00:52という関数を作って
replace(buf, " ", "")
とかやっとけ
0882デフォルトの名無しさん
2007/07/07(土) 18:31:06そのreplace関数の処理部分をどうすればいいのか悩んでいます
buf内にoldstrに一致するデータを探せばいいだけですかね?
文字列str に部分文字列findstrが含まれている場合1を返します
ただしstrに空白が含まれている場合はそれを除いた文字列と比較します
int sfind(char *str,char *findstr)
{
unsigned char *stmp,*fstmp;
while(*str!='\n'&&*str!='\0')
{
if(*str==*findstr)
{
stmp=str;
fstmp=findstr;
do{
stmp++,fstmp++;
if(*stmp==' ') { stmp++; continue; } //半角スペースを取り除く
// 全角スペースを取り除きたい.どうすれば?・・・B
if(*fstmp=='\0')return 1;
if(*stmp=='\n'||*stmp=='\0')return 0;
}while(*stmp==*fstmp);
}
str++;
}
return 0;
}
0883デフォルトの名無しさん
2007/07/07(土) 19:01:120884デフォルトの名無しさん
2007/07/07(土) 19:51:23そーですね
その方向でもう少し試行錯誤してきます
ありがとうございました
0885デフォルトの名無しさん
2007/07/07(土) 20:13:02p++;
*p++;
(*p)++;
の違いを教えてください、よろしくお願いします。
0886デフォルトの名無しさん
2007/07/07(土) 20:22:110887デフォルトの名無しさん
2007/07/07(土) 20:33:01実験してみりゃえっちゃないか
int i[ 3 ] = { 5, 10, 15 };
int *p = i;
printf( "*p:%d\n", *p );
p++;
printf( "*p:%d\n", *p );
*p++;
printf( "*p:%d\n", *p );
(*p)++;
printf( "*p:%d\n", *p );
0888デフォルトの名無しさん
2007/07/07(土) 20:54:22とてもわかりやすかったです!ありがとうございます!
ポインタが理解できた気分になりました、気分ですけど。
0889デフォルトの名無しさん
2007/07/08(日) 02:36:26当方某学校にて「C言語入門」を勉強しているのですが、
宿題がわからないんです!
優しい方、お手数ですが教えていただけないでしょうか。
わからない、その1
「コンピュータが計算する、任意の数の型は何型ですか。」
わからない、その2
「関数yesno(char *msg)で、キーボードから a を入力したときの、戻り値は何か。」
もし、よろしければ答えてくださると助かります。
よろしくお願いいたします。
0890デフォルトの名無しさん
2007/07/08(日) 02:41:00「君が省略した部分」
0891デフォルトの名無しさん
2007/07/08(日) 02:41:53お前の質問内容自体が、わからない。
エスパーよろしく
0892デフォルトの名無しさん
2007/07/08(日) 02:42:23そんな貴方の授業依存な問題はさすがに無理。
その1はint型・・・か?ってか、コンピュータが何かもさっぱりだよな。
その2はさすがに関数の中身みねぇとわからん。エスパーで0と予想w
0893デフォルトの名無しさん
2007/07/08(日) 02:49:13>「コンピュータが計算する、任意の数の型は何型ですか。」
特に理由が無ければintを使うって事かな?何この問題
>「関数yesno(char *msg)で、キーボードから a を入力したときの、戻り値は何か。」
関数の定義を見ないとわからないけど97か0か1か-1と予想。何この問題
0894デフォルトの名無しさん
2007/07/08(日) 02:52:271、doubleで計算しとけばおkじゃね?
2、aを入力して戻るとしたらbool値もしくは対象の格納番地もしくは配列の添え字
かな・・。
0895デフォルトの名無しさん
2007/07/08(日) 02:58:16なんのこっちゃ
1ワードの大きさと等しい型名のことか?
それか1/0のブール型の論理演算でう!っていえばええんか?ええのんか〜
0896デフォルトの名無しさん
2007/07/08(日) 03:02:45答が返ってくる質問ができるレベルにすら達してないよ
0897デフォルトの名無しさん
2007/07/08(日) 03:09:36その2 YES_NO_DIALOG_KEY_OTHER
とかどうよ?
0898デフォルトの名無しさん
2007/07/08(日) 03:26:12ここのスレの方々、質問の幼稚さに顔が真っ赤になるばかりです。
実はもう一つ違うスレにマルチで>>889と同じ質問をしてしまいました。
欲がでたのです。本当に恥ずかしい限りですが、今回は宿題の期限が間近に迫っていまして、
この宿題の是非で学生としての楽しい楽しい夏休みが補講という ことに成り兼ねません(ノД`)
自分勝手なお願いなのですが、今パソコンをつかえる環境に無く(携帯からのカキコミ)、今日朝9時15分頃に
使えるんです。パソコンが、
上記も内容が同じような事をもう1つのスレにも書いたのですが、
その今日の朝に宿題UPしてもよろしいでしょうか。
よろしいでしょうか。というのは、先輩の方々にお答えしてもらいたいと、いうことです。
0899デフォルトの名無しさん
2007/07/08(日) 03:31:04UPしていいよ
本当の問題が気になる
0900デフォルトの名無しさん
2007/07/08(日) 04:13:46ありがとうございます(_ _(--;(_ _(--;
先輩方よろしくお願いします。
(ρ.-).。o○
0901デフォルトの名無しさん
2007/07/08(日) 06:10:200902デフォルトの名無しさん
2007/07/08(日) 07:00:260903デフォルトの名無しさん
2007/07/08(日) 08:27:24嫌いなC言語使いですが何か。
0904デフォルトの名無しさん
2007/07/08(日) 09:29:52UPさせていただきます。
先輩方どうあよろしくお願いいたします。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* 関数のプロトタイプ宣言 */
int random(int min, int max);
char yesno(char *msg);
/* メイン関数 */
void main(void)
{
int r;
char yn;
srand((unsigned)time(NULL));
yn = 'n';
while(yn == 'n')
{
r = random(5, 6);
printf("コンピュータが計算した数は %d です\n", r);
yn = yesno("終了しますか?(y/n)");
}
}
・・・・・・・続く・・・・・・・・・・・
0905デフォルトの名無しさん
2007/07/08(日) 09:31:55int random(int min, int max)
{
int r;
r=rand() % (max - min) + min;
return r;
}
char yesno(char *msg)
{
char yn;
printf("%s", msg);
scanf("%c", &yn);
if(yn == 'y' || yn == 'Y')
{
yn='y';
}
else
{
yn='n';
}
return yn;
}
1.コンピュータが計算する任意の数の型は何型ですか。
2.コンピュータが計算する任意の数は、いくつからいくつの間の数ですか。
3.どのようにしたら、このプログラムを終了させることができますか。
4.関数 yesno(char *msg)で、キーボードから’a’を入力した時の、戻り値は何になりますか。
5.コンピュータに計算させる数を、3から8までにしたいときには、何行目のどこを書き換えればよいですか。
よろしくです。
0906デフォルトの名無しさん
2007/07/08(日) 09:40:040907デフォルトの名無しさん
2007/07/08(日) 10:11:03カワイソス。
0908デフォルトの名無しさん
2007/07/08(日) 10:16:210909デフォルトの名無しさん
2007/07/08(日) 10:27:081はint型
2は5〜6
3はy
4は不明
5r = random(5, 6);のところを5と6を書き換え
と予想しているのですが、まったく根拠なしなのですが、助言賜りたいですm(__)m
0910デフォルトの名無しさん
2007/07/08(日) 10:29:081. int
2. 5のみ
3. y か Y を入力
4. n
5. r = random(5, 6); を r = random(3, 9);
0911デフォルトの名無しさん
2007/07/08(日) 10:31:270912デフォルトの名無しさん
2007/07/08(日) 10:34:33>>910さん、レスありがとうございます。
1と2合ってる気がします(私見)。
1つ質問よろしいでしょうか。
なんで、4の戻り値がnになるのでしょうか。
もしよければ、レスお願いいたします。
0913デフォルトの名無しさん
2007/07/08(日) 10:42:22char yesno(char *msg)
{
char yn;
printf("%s", msg);
scanf("%c", &yn); // yn に 'a' を入力
if(yn == 'y' || yn == 'Y') // yn が 'y' 、もしくは 'Y' かどうか
yn='y'; // ifが真ではないので、実行されない
else // ifが偽のため、以下を実行する
yn='n'; // yn に 'n' を代入
return yn; // yn の値を返す
}
0914デフォルトの名無しさん
2007/07/08(日) 10:47:46char yesno(char *msg)
{
char yn;
printf("%s", msg);
scanf("%c", &yn);
if(yn == 'y' || yn == 'Y')
return 'y';
else
return 'n';
}
0915デフォルトの名無しさん
2007/07/08(日) 10:48:00>>910さん、わざわざありがとうございます。
よくわかんないですが、なんとなくわかった気がします。
宿題はまだあるので、がんばりたいと思います。
0916デフォルトの名無しさん
2007/07/08(日) 11:32:35ちょっとよくわからないので教えてほしいです。
n=20(入力
1 2 3 5 7 11 13 17 19(出力
0917デフォルトの名無しさん
2007/07/08(日) 11:46:12どこが解かんないか解からんし
先ずは20を入力して配列なりリスト構造なりにデータを格納して出力する所から作ってみなよ
0918デフォルトの名無しさん
2007/07/08(日) 12:00:40#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
int *prime,LIMIT,i,j,c,n;
printf("Input n > "); scanf("%d",&n);
prime=(int*)malloc(n*sizeof(int));
for(i=1; i<=n; i+=2) prime[i]=1;
for(i=4; i<=n; i+=2) prime[i]=0;
LIMIT=(int)sqrt(n);
for(i=3; i<=LIMIT; i+=2) {
if(prime[i]==1) {
for(j=2*i; j<=n; j+=i)
prime[j]=0;
}
}
printf("%4d",2);
for(c=1,i=3; i<=n; i+=2) {
if(prime[i]==1) {
printf("%4d",i);
c++;
if(c==10) {
printf("\n");
c=0;
}
}
}
free(prime);
return 0;
}
0919デフォルトの名無しさん
2007/07/08(日) 12:46:001は素数なのか
0920デフォルトの名無しさん
2007/07/08(日) 13:10:240921デフォルトの名無しさん
2007/07/08(日) 13:50:42すなおに補講を受けたほうがいいじゃね?
0922デフォルトの名無しさん
2007/07/08(日) 14:01:39/* Cスタイル */
// C++スタイル
が有るんですがどっちかに統一したほうが良いですか?
Cスタイルは目立ちやすいので見出しとかに使って
C++スタイルはCスタイルに比べて目立ちにくいので文の注釈に適してるように思いますが・・・
なんか慣習とかあるんでしょうか?
0923デフォルトの名無しさん
2007/07/08(日) 14:04:250924デフォルトの名無しさん
2007/07/08(日) 14:07:59単行://
0925デフォルトの名無しさん
2007/07/08(日) 14:08:430926デフォルトの名無しさん
2007/07/08(日) 14:24:59関数を実装する時に例えば戻り値の型がvoidで何も返さない場合,最後の文に return; を書くべきでしょうか?
コンパイラは最適化してしまいオブジェクトコードには何の影響も無さそうですが.
関数はこの文で戻り値無しで終了するという事を明示的にするという意味で書くのは冗長すぎますかね?
void Hoge(void){
puts("Hoge");
return;
}
0927デフォルトの名無しさん
2007/07/08(日) 14:26:54http://www.google.com/codesearch?hl=ja&q=+return%3B&start=10&sa=N
0928デフォルトの名無しさん
2007/07/08(日) 14:30:05↓このvoidは戻り値がないことを明示している。
void Hoge(void){
int error = foo();
if (error) {
return; ←エラーだったら処理やめる。中途リターンしないとインデントが深くなる
}
return; ← これはいると思うか?
}
0929デフォルトの名無しさん
2007/07/08(日) 14:35:540930デフォルトの名無しさん
2007/07/08(日) 14:36:450931デフォルトの名無しさん
2007/07/08(日) 14:38:350932デフォルトの名無しさん
2007/07/08(日) 14:57:23としたらいいじゃん。
0933デフォルトの名無しさん
2007/07/08(日) 15:02:230934デフォルトの名無しさん
2007/07/08(日) 15:06:35とかあったらイヤだな。
0935デフォルトの名無しさん
2007/07/08(日) 15:14:350936デフォルトの名無しさん
2007/07/08(日) 15:14:53そんなコーディング規約意味ないけどな。
どうしても末尾に書きたいなら
戻り値int にしてreturn 0にすりゃいいじゃん。
0937デフォルトの名無しさん
2007/07/08(日) 15:21:53リターン値がintの関数で、ミスって、
return;
と書いても、エラーにならなかったような記憶が。
0938デフォルトの名無しさん
2007/07/08(日) 15:24:52エラーになる@BCC
0939デフォルトの名無しさん
2007/07/08(日) 15:26:360940デフォルトの名無しさん
2007/07/08(日) 15:29:02Cとしてコンパイルしてる?
C++ならエラーだよ。
0941デフォルトの名無しさん
2007/07/08(日) 15:30:320942デフォルトの名無しさん
2007/07/08(日) 15:33:090943デフォルトの名無しさん
2007/07/08(日) 15:48:300944デフォルトの名無しさん
2007/07/08(日) 16:21:18趣味の問題。
0945ライ
2007/07/09(月) 12:45:290946デフォルトの名無しさん
2007/07/09(月) 13:01:580947ライ
2007/07/09(月) 13:16:160948デフォルトの名無しさん
2007/07/09(月) 14:17:510949デフォルトの名無しさん
2007/07/09(月) 16:49:340950デフォルトの名無しさん
2007/07/09(月) 17:03:37まあ車輪の再発明なんて馬鹿馬鹿しいよね
0951デフォルトの名無しさん
2007/07/09(月) 18:24:12�@( )USBは多様な周辺機器と接続できるが,転送速度が遅いのでマウスやキーボードなどには適しているが,高速を要する外付け固定ディスクなどとの接続には不適切である。
�A( )PCとキーボードやマウスはPS/2やUSBポートで接続する。
�B( )PS/2やUSBにはホットプラグイン機能があるので、キーボードやマウスをこれらのポート差し込んだ時点で使用可能となる。
�C( )マウスにはボール式、光学式、レーザ式などがあるが、光学式が最も精度が高い。
�D( )CUIの代表的な入力装置はマウス、GUIの代表的な入力装置はキーボードである。
�E( )キーボードのキー構造として、メンブレン方式とパンタグラフ方式があり、ノートPCではパンタグラフ方式の採用が多い。
0952デフォルトの名無しさん
2007/07/09(月) 18:25:340953デフォルトの名無しさん
2007/07/09(月) 18:29:260954デフォルトの名無しさん
2007/07/09(月) 18:29:27�@2
�A1
�B2
�C2
�D2
�E2
0955デフォルトの名無しさん
2007/07/09(月) 18:31:39サンクス!
0956デフォルトの名無しさん
2007/07/09(月) 18:33:36�Eは1じゃまいか?たしか・・・
0957デフォルトの名無しさん
2007/07/09(月) 18:34:18UDPでの通信で、
サーバ側がソケットを作成→bindし、
クライアント側がソケットを作成→connectした場合、
サーバから文字列を送信する場合はどうすればいいのでしょうか。
0958デフォルトの名無しさん
2007/07/09(月) 18:35:520959デフォルトの名無しさん
2007/07/09(月) 18:36:29send
0960デフォルトの名無しさん
2007/07/09(月) 18:39:57�Eは1だね
0961デフォルトの名無しさん
2007/07/09(月) 18:42:14�@、�Aが俺は間違えた
0962デフォルトの名無しさん
2007/07/09(月) 18:43:560963デフォルトの名無しさん
2007/07/09(月) 18:44:200964デフォルトの名無しさん
2007/07/09(月) 18:47:500965デフォルトの名無しさん
2007/07/09(月) 18:48:52いや、もう10年近くインターネットを毎日利用しているが。
0966デフォルトの名無しさん
2007/07/09(月) 18:53:160967デフォルトの名無しさん
2007/07/09(月) 19:02:05「こんにちは、パソコンです。それでは第(ピー)問」
0968デフォルトの名無しさん
2007/07/09(月) 19:02:220969デフォルトの名無しさん
2007/07/09(月) 19:12:450970デフォルトの名無しさん
2007/07/09(月) 19:22:19検索しづらい文字使われるといらっとくるな
0971デフォルトの名無しさん
2007/07/09(月) 19:39:23Firefox からだと「! 」に見える。
まあ、フォント次第なんだが、デフォだとそうなるね。
0972デフォルトの名無しさん
2007/07/09(月) 20:01:060973デフォルトの名無しさん
2007/07/09(月) 20:31:20近年はデスクトップもUnicodeの文字を表示できる環境が広まっているので、
確かに機種依存文字でなくなりつつあるというのはあながち間違いではない。
ここなら #9312;と書けばいいはず。①
0974デフォルトの名無しさん
2007/07/09(月) 20:55:04int型のnを、15を越えない範囲内でインクリメントしたい場合、こ
んな初心者丸出しのコードが思いつくのだけれど、もっと良い方法
は無いでしょうか?
if (n <= 15) {
n++;
} else {
;
}
ビット演算する方法を考えてみたけど、とても良い方法とは思えな
いので、教えてください。一応elseを明示しています。
if (!(0x10 & n)) {
n++;
} else {
;
}
0975デフォルトの名無しさん
2007/07/09(月) 21:07:36if (n <= 15) {
n++;
}
後はコンパイラの最適化に期待しな。
0976デフォルトの名無しさん
2007/07/09(月) 21:10:35同じことだよ。
やっぱ Mac からは「! 」に見える。
0977デフォルトの名無しさん
2007/07/09(月) 21:12:420978デフォルトの名無しさん
2007/07/09(月) 21:14:08としておいて
table[ n & 0x1F ]
というのはどうか
0979デフォルトの名無しさん
2007/07/09(月) 21:14:540980デフォルトの名無しさん
2007/07/09(月) 21:15:36一生懸命考えたんだからガムぐらいくれよ
0981デフォルトの名無しさん
2007/07/09(月) 22:26:34#include<stdio.h>
int main(void){
struct{unsigned value:4;}l={0};
int m=0,n=0;
int i;
for(i=0;i<20;i++){
printf(" %2d %2d %2d\n", l.value, m, n);
l.value+=1;
m=(m+1)&0xF;
n=(n+1)%16; // <- オススメ
}
return 0;
}
0982デフォルトの名無しさん
2007/07/09(月) 22:30:55確かに 15を越えない範囲内でインクリメント はしているが、動作が変わってる
>>974
n+=(n<15)?1:0;
または
n=(n<15)?(n+1):15;
0983デフォルトの名無しさん
2007/07/09(月) 22:32:31if (n <= 15) {
n++;
}
0984デフォルトの名無しさん
2007/07/09(月) 22:32:460985デフォルトの名無しさん
2007/07/09(月) 22:34:350986デフォルトの名無しさん
2007/07/09(月) 22:36:4815 になるのか 16 になるのかよく分からないな
(>>974 に沿えば 16 が最大値だけど)
0987デフォルトの名無しさん
2007/07/09(月) 22:37:380988デフォルトの名無しさん
2007/07/09(月) 23:07:000989デフォルトの名無しさん
2007/07/09(月) 23:07:57【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
http://pc11.2ch.net/test/read.cgi/tech/1170338926/
に合流でいいと思う。もともと厨が立てたスレだし
0990デフォルトの名無しさん
2007/07/09(月) 23:33:23http://pc11.2ch.net/test/read.cgi/tech/1172099763/
こっちもあるな
ただ、一本化すると必然的に流れが速くなるから嫌だ俺は。
一つの白熱した議論が行われてたりすると、スルーされたり
入りづらかったりと、弊害もあるから。
0991デフォルトの名無しさん
2007/07/10(火) 00:32:550992デフォルトの名無しさん
2007/07/10(火) 00:51:06幅が全長を越えるまで処理すればいいんじゃね?
0993デフォルトの名無しさん
2007/07/10(火) 02:21:41自分の解釈では10なら、0000 1010なので-なら1から反転で
上のような回答になりました、違っていたらご指摘お願いします。
0994デフォルトの名無しさん
2007/07/10(火) 02:24:26↓ビット反転
1111 0101 (2)
↓+1
1111 0110 (2) = -10 (10)
0995デフォルトの名無しさん
2007/07/10(火) 02:25:18その2つを足して 0000 0000 になる?ならんな
0996デフォルトの名無しさん
2007/07/10(火) 02:25:21それより上の桁は全部 1
0997993
2007/07/10(火) 02:41:11反転は0かrではなく、1からではなかったでしょうか?
0998993
2007/07/10(火) 02:42:04↓+1
1111 0110 (2) = -10 (10)
で、+1をするのでしょうか?
0999デフォルトの名無しさん
2007/07/10(火) 02:44:58http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0
1000デフォルトの名無しさん
2007/07/10(火) 02:47:2110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。