C言語なら俺に聞け! Part 106
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/04/10(日) 12:08:35質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
各種リンク、関連スレは>>2-13あたり
C言語なら俺に聞け! Part 105
http://pc8.2ch.net/test/read.cgi/tech/1111117094/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
2005/04/10(日) 12:09:38gcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.cygwin.com/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさん
2005/04/10(日) 12:13:40Part106 http://pc8.2ch.net/test/read.cgi/tech/1112845322/
0004デフォルトの名無しさん
2005/04/10(日) 14:08:300006デフォルトの名無しさん
2005/04/10(日) 14:32:391 名前:デフォルトの名無しさん 投稿日:2005/04/07(木) 12:42:02
0008デフォルトの名無しさん
2005/04/21(木) 23:48:22途中で条件を満たさなかったら以降は実行しない処理を書きたいのです。
if (a != 0)
{
return 1;
}
if (b != 0)
{
return 1;
}
・
・
と、ずらずらと書いているのですがスマートじゃないですね。
実際にはa、bのところに関数の処理を入れて戻り値を使っているのですが、
どうも格好悪いのです。
if ((a != 0) || (b != 0) || ........)
{
return 1;
}
こうすればプログラムの行数は短くなりますが、どっちにしろスマートじゃないです。
何か良い方法はないでしょうか?
0009デフォルトの名無しさん
2005/04/22(金) 00:16:15では、どうあればスマートだと思うのかね。
0010デフォルトの名無しさん
2005/04/22(金) 21:11:45if (a)
{
if (b)
{
if (c)
;
}
}
0011デフォルトの名無しさん
2005/04/30(土) 17:01:300012デフォルトの名無しさん
2005/04/30(土) 19:26:240013デフォルトの名無しさん
2005/04/30(土) 19:30:260014デフォルトの名無しさん
2005/04/30(土) 19:55:12>if ((a != 0) || (b != 0) || ........)
>{
>return 1;
>}
まぁ、今さら見てるか分からんが、全て0に対しての比較なら
if(a|b)return 1;
0015デフォルトの名無しさん
2005/04/30(土) 20:00:12http://pc8.2ch.net/test/read.cgi/tech/1112845322/812
812氏のソースの変数bufを配列にして
カンマがくると、それまでの内容を格納し
またカンマがくると次の配列に格納するようにしたいのですが、
while ((ch = fgetc(fp)) != EOF)
{
if(ch == ',') cnt2++;
buf[cnt2][cnt++] = ch;
}
for(i = 0; i < cnt2; i++)
buf[i][cnt] = '\0';
fclose(fp);
for(i = 0; i < cnt2; i++)
printf("%s", buf[i]);
上手く次の配列に格納できません。
なぜ上手くいかんのか、図々しいですが教えてくださいませ。
0016デフォルトの名無しさん
2005/04/30(土) 20:14:07while((ch=fgetc(fp))!=EOF){
if(ch==','){buf[cnt2++][cnt]='\0';cnt=0}
else{buf[cnt2][cnt++]=ch;}}
0017デフォルトの名無しさん
2005/04/30(土) 20:31:21ありがとうございます。解決しました
0018デフォルトの名無しさん
2005/04/30(土) 20:41:230019デフォルトの名無しさん
2005/04/30(土) 21:19:32そのとき向いている方向。
だから自分はどこを向いているのか、どこまで先を見ているかを意識しておくとよい。
最初はわずかな誤差でも、時間が経つにつれ、大きく変わるからな。
何か目標を作って、そこを常に目指すやり方でもいいが、たまに足元を見ないと
落とし穴が出来ている可能性もあるから注意な。
で、誤爆か?
0020デフォルトの名無しさん
2005/04/30(土) 21:21:22大阪の新世界
0021デフォルトの名無しさん
2005/04/30(土) 23:05:11if(a|b) は if(a||b) とは違うぞ。
0022デフォルトの名無しさん
2005/04/30(土) 23:08:45それが何か?
0023デフォルトの名無しさん
2005/05/01(日) 00:23:21保守があれだけどコメント書いておけばまあ大丈夫っしょ。
0024デフォルトの名無しさん
2005/05/01(日) 01:14:22副作用を気にしないのならいいが。
0025デフォルトの名無しさん
2005/05/01(日) 01:31:43文字通り「a、b」のところであれば、bを評価するのはまずいが、
>if (a != 0)
>{
>/* この部分 */
>return 1;
>}
であれば、問題ないね
まぁ、a,bを特殊な使い方をしてる可能性はあるし、
意表をついて、ポインタや、実数である可能性も否定出来ないが、
なんにしろ、>>8がいなければ、意味がない議論やね…
0026デフォルトの名無しさん
2005/05/01(日) 08:25:080027デフォルトの名無しさん
2005/05/01(日) 15:14:400028デフォルトの名無しさん
2005/05/01(日) 16:04:03どこか配布してる場所は無いでしょうか?
0029デフォルトの名無しさん
2005/05/01(日) 16:05:30sourceforge
0030デフォルトの名無しさん
2005/05/01(日) 16:07:13質はいいと思うんですが、初心者の私にはちょっと大きすぎるのです。
ソースコードを投稿形式で募集して公開してたサイトが昔あったと思うんですが、
そういうサイトありませんでしょうか?
0031デフォルトの名無しさん
2005/05/01(日) 16:09:38ぼるじょあスレ
0032デフォルトの名無しさん
2005/05/01(日) 16:13:330033デフォルトの名無しさん
2005/05/01(日) 16:13:36現実から目をそむけたければそむければいい
君はそのたびに自らの可能性をつぶすのだ
0034デフォルトの名無しさん
2005/05/01(日) 17:22:27アキバが変わる!? 〜近未来予想図〜
http://www.zakzak.co.jp/tsui-sat/tsui/0430_01.htm
0035デフォルトの名無しさん
2005/05/01(日) 18:52:500036デフォルトの名無しさん
2005/05/01(日) 18:58:30スレ違いの質問じゃないなら是非。
0037デフォルトの名無しさん
2005/05/01(日) 19:51:270038デフォルトの名無しさん
2005/05/01(日) 19:59:45{}
int main()
{
int a = 5 ;
hoge( a, a, a ) ;
}
このように、同じ変数をたくさん与えて、問題ないものですか?
不安です。
0039デフォルトの名無しさん
2005/05/01(日) 20:03:420040デフォルトの名無しさん
2005/05/01(日) 20:05:560041デフォルトの名無しさん
2005/05/01(日) 20:38:13#include <stdio.h>
#include <string.h>
int main()
{
char data[64];
while(1) {
scanf("%s", data);
if (strcmp(data, "E") == 0)
break;
}
return 0;
}
Eを入力したらwhileをぬけるようになってるんですが、
これをEnterをおしただけでぬけるようにするにはどうしたらいいのでしょうか?
0042デフォルトの名無しさん
2005/05/01(日) 20:42:45while(c = getchar(),c != EOF && c != '\n') ;
0043デフォルトの名無しさん
2005/05/01(日) 20:45:30static int b=0;
return ++b;
}
こんな関数があったとき、
printf( "%d %d %d\n",a(), a(), a() );
これって未定義だっけ? 不定? どっちだろう
0044デフォルトの名無しさん
2005/05/01(日) 20:49:33参考
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
0045デフォルトの名無しさん
2005/05/01(日) 20:58:27二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合
に当たらないのだろうか。
0046デフォルトの名無しさん
2005/05/01(日) 21:10:27この場合bというオブジェクトは a() 呼び出しの副作用として3回インクリメントされるだけ。
0047デフォルトの名無しさん
2005/05/01(日) 21:24:43void inputNum(int *x, int *y) {
scanf("%d", *x);
scanf("%d", *y);
}
int main(void) {
int x, y;
inputNum(&x, &y);
printf("%d, %d", x, y);
return 0;
}
inputNum関数で整数値を2つ受け取って、mainに返したいんですがうまくいきません。
0048デフォルトの名無しさん
2005/05/01(日) 21:27:48void inputNum(int *x, int *y) {
scanf("%d", x);
scanf("%d", y);
}
0049デフォルトの名無しさん
2005/05/01(日) 21:32:57おお!ありがとうございます!
でもなんで そうしたらできるんだろう?
x,yはmain関数の変数なのに
0050デフォルトの名無しさん
2005/05/01(日) 21:38:58その scanf() にわたしているのは inputNum() の2つの引数だよ。
main() の変数とは違うことを意識するために、以下みたいに変数名を変えて動作させてみて。
void inputNum(int *a, int *b) {
scanf("%d", a);
scanf("%d", b);
}
scanf() に int 変数のアドレス a を渡す
scanf() に int 変数のアドレス b を渡す
( main()はinputNum()に対し、int 変数 x と y のアドレスを渡してる )
実際に自分で理解してください。
0051デフォルトの名無しさん
2005/05/01(日) 21:45:330052デフォルトの名無しさん
2005/05/01(日) 21:48:360053デフォルトの名無しさん
2005/05/01(日) 22:00:26なんとなく理解しました!どうもです!
0054デフォルトの名無しさん
2005/05/01(日) 22:14:42>二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合
>に当たらないのだろうか。
普通の関数であれば、基本的には、
副作用はその関数内で完了するので、未定義にはならない
この場合は評価順が決まってないだけなので、結果は不定のはず…
まぁ、a()がinlineで宣言されてた場合の振る舞いはどうなるか分からんが…
005541
2005/05/01(日) 22:17:02でも、思ったとおりに動きません。
ソースを省略しすぎたみたいなので
while(1) {
printf("data[%3d] = ", n++);
scanf("%s", data);
if (strcmp(data, "E") == 0)
break;
sum += atof(data);
}
printf("合計 = %f\n", sum);
合計を求めるんですが終了条件を
Eを入力するのではなくEnterを押しただけで終了させたいわけです。
>>42の通りにやると一回の入力しかできないで終了してしまいます。
0056デフォルトの名無しさん
2005/05/01(日) 22:18:550057デフォルトの名無しさん
2005/05/01(日) 22:42:46while(1) {
printf("data[%3d] = ", n);
if(!fgets(data, sizeof(data), stdin) || strcmp(data, "\n") == 0)
break;
if(sscanf(data, "%f", &f) != 1)
continue;
sum += f;
n++;
}
printf("合計 = %f\n", sum);
0058デフォルトの名無しさん
2005/05/01(日) 22:47:290059デフォルトの名無しさん
2005/05/01(日) 22:49:13代わりにstatic変数とswitch文があります。
0061デフォルトの名無しさん
2005/05/02(月) 01:07:520062デフォルトの名無しさん
2005/05/02(月) 01:09:15Bの次
0063デフォルトの名無しさん
2005/05/02(月) 01:13:11違う。
0064デフォルトの名無しさん
2005/05/02(月) 01:14:53Basic
C
D
次はなんだろう
0065デフォルトの名無しさん
2005/05/02(月) 01:17:46D++とか出て
Eが出てくるかとw
0066デフォルトの名無しさん
2005/05/02(月) 01:53:31Aに再帰しまふ
0067デフォルトの名無しさん
2005/05/02(月) 01:54:400068デフォルトの名無しさん
2005/05/02(月) 02:13:540069デフォルトの名無しさん
2005/05/02(月) 03:43:260070デフォルトの名無しさん
2005/05/02(月) 14:17:58Excelのセルごとのデータを入力したいんですが、どうしたらよいでしょうか。。
今のところexcelからタブ区切りでファイル出力して、プログラムでfgetcしていって、
タブが見つかればそこまでを文字列としてるんですが、もっときれいにできたらいいなと思いまして。。
0071デフォルトの名無しさん
2005/05/02(月) 14:18:47この名前の構造体が定義されてなければ定義する、
という書き方は出来ますか?
0072デフォルトの名無しさん
2005/05/02(月) 14:38:34OSはリナックスです。
0073デフォルトの名無しさん
2005/05/02(月) 14:58:21どうすればいいですかね?
0074デフォルトの名無しさん
2005/05/02(月) 15:03:20多重定義するとエラーが出るだろ。
0075デフォルトの名無しさん
2005/05/02(月) 15:04:10man読めよ。
0076デフォルトの名無しさん
2005/05/02(月) 15:07:55どういう回帰式?
007771
2005/05/02(月) 15:09:30いろんなコンパイラで通るようにしたいです。
定数定義されてるかどうかだったら、
#ifndef A
#define A 1
#endif
とか書けますよね。
#構造体定義されてなかったら、
Struct A 〜
#endif
みたいなことがしたいです。
0078デフォルトの名無しさん
2005/05/02(月) 15:13:39#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main () {
struct stat st;
stat ("test108.c", &st);
printf ("%d", (int) st.st_size);
return 0;
}
007973
2005/05/02(月) 15:14:52回帰直線でした。x、yの2つの値から最小二乗法で
y=ax+bの形の回帰直線をつくりたいんです。
とりあえずデータはテキストファイルに
Xの値、Yの値が1行ずつはいってるんですが
0080デフォルトの名無しさん
2005/05/02(月) 16:41:31void *p = &i;
void **pp = &p;
void ***ppp = &pp;
printf("ppp = %d\n", ppp);
printf("*ppp = %d\n", *ppp);
printf("**ppp = %d\n", **ppp);
printf("***ppp = %d\n", ***ppp); // *1
printf("***ppp = %d\n", *((int*)**ppp)); // *2
VC.net2003だと、*1の行だけがコンパイルエラーになるんでつが、
やってる事は*2と同じだと思うのでつけど原因は何でしょうか。
0081デフォルトの名無しさん
2005/05/02(月) 16:44:300082デフォルトの名無しさん
2005/05/02(月) 16:48:35その構造体を定義しているヘッダファイルを(読み込んでなければ)読み込むようにすればいい。
0083デフォルトの名無しさん
2005/05/02(月) 16:54:38だからprintfで*1のように書いてもエラーになる。
*2のように明示的にキャストしてあげないといけない。
と述べてみるテスト
0084デフォルトの名無しさん
2005/05/02(月) 17:02:37void***〜void*はアドレスのサイズなのに対して
voidはサイズが不明だからキャストすらできないんでつね。 原因わかったよ、�dくすこ。
0085デフォルトの名無しさん
2005/05/02(月) 17:59:00サイズが不明だからではない
ボイド式の値を使ってはならないからだ
噛み砕いて言うなら表現形式が不明ゆえ定義域と値域を写像できない
なお void* は不完全型の1つでボイド式にはあたらない
表現形式は処理系定義のビット列つまり既知である
0086デフォルトの名無しさん
2005/05/02(月) 19:20:45#pragma once
↑これはどうだ?
0087デフォルトの名無しさん
2005/05/02(月) 19:29:30少しずれてるよ
0088デフォルトの名無しさん
2005/05/02(月) 20:05:560089デフォルトの名無しさん
2005/05/02(月) 20:20:460090デフォルトの名無しさん
2005/05/02(月) 20:36:19マニュアル読む=処理系定義
0092デフォルトの名無しさん
2005/05/02(月) 21:25:37以下のプログラム実行してみると結果が
0123456789
となる理由がさっぱりわかりません。
なぜでしょか?
main(){
int i;
for(i = 0;i < 10;i++)
printf("%c",i["0123456789"]);
}
0093デフォルトの名無しさん
2005/05/02(月) 21:29:05C FAQに書いてある。
0094デフォルトの名無しさん
2005/05/02(月) 21:34:53i["0123456789"]と"0123456789"[i]は同じ。
文字列リテラルはchar配列だから添え字演算子[]が使える。
0095デフォルトの名無しさん
2005/05/02(月) 21:54:250096デフォルトの名無しさん
2005/05/02(月) 21:58:120097デフォルトの名無しさん
2005/05/02(月) 22:09:03のとき
10[str]でも問題ないのだよ。
Cは最低だなプッ
0098デフォルトの名無しさん
2005/05/02(月) 22:11:00voidalloc(ANY* p, int* n, int d, int size)
{
--d;
if(d)
{
p = (ANY*)malloc(sizeof(void*)*n[0]); //配列をあろけぇと
for(int i = 0; i < n[0];++i)
alloc((ANY*)(p[i]), &(n[1]), d, size);//子配列をあろけぇと
}else{
p = (ANY*)malloc(size*n[0]); //最後の配列をあろけぇと
}
}
int main()
{
int **ppi;
int num[] = {3, 4};
int d = 2;
alloc((ANY*)ppi, num, d, sizeof(int));
for(int i = 0; i < 3; ++i)
for(int j = 0; j < 4; ++j)
ppi[i][j] = 0;
return 0;
}
動的にn次元の配列を確保する関数を作ってみようと思ったんですが
なんかエラーっぽいんでつ。 どこが間違ってますか?
0099デフォルトの名無しさん
2005/05/02(月) 22:40:47なるほど、ありがとうございました。
0100デフォルトの名無しさん
2005/05/02(月) 22:47:14で、なにがしたいって?
0101デフォルトの名無しさん
2005/05/03(火) 00:27:030102デフォルトの名無しさん
2005/05/03(火) 00:29:210103デフォルトの名無しさん
2005/05/03(火) 00:29:460104102
2005/05/03(火) 00:31:110105デフォルトの名無しさん
2005/05/03(火) 00:44:140106デフォルトの名無しさん
2005/05/03(火) 00:48:41文字列…文字の配列
配列…ブヒっ
0107デフォルトの名無しさん
2005/05/03(火) 00:48:440108デフォルトの名無しさん
2005/05/03(火) 00:51:020109デフォルトの名無しさん
2005/05/03(火) 00:51:390110デフォルトの名無しさん
2005/05/03(火) 03:29:45ってゆうか、この言語無駄に難しい気が。。。
0111デフォルトの名無しさん
2005/05/03(火) 03:34:23ホームラン級の馬鹿だな
0112デフォルトの名無しさん
2005/05/03(火) 03:43:300113デフォルトの名無しさん
2005/05/03(火) 08:52:38typedef void *ANY;
void alloc(ANY* pp, int* n, int d, int size)
{
--d;
if (d)
{
*pp = (ANY)malloc(sizeof (void*) * n[0]); //配列をあろけぇと
for (int i = 0; i < n[0]; ++i)
{
alloc((void **)*pp + i, n + 1, d, size);//子配列をあろけぇと
}
}
else
{
*pp = (ANY)malloc(size * n[0]); //最後の配列をあろけぇと
}
}
int main()
{
int num[] = {3, 4};
int d = 2;
int **ppi;
alloc((ANY *)&ppi, num, d, sizeof (int));
for(int i = 0; i < 3; ++i)
for(int j = 0; j < 4; ++j)
ppi[i][j] = 0;
return 0;
}
0114デフォルトの名無しさん
2005/05/03(火) 12:11:24Win32APIが無駄に難しいという事なら同意。
0115デフォルトの名無しさん
2005/05/03(火) 12:15:020116デフォルトの名無しさん
2005/05/03(火) 14:18:03れす、ありがとうございます。
関数にポインタ渡ししてなかったのが原因でしたか。。。
初歩的ミスでしたね。
0117デフォルトの名無しさん
2005/05/03(火) 14:21:220118デフォルトの名無しさん
2005/05/03(火) 14:44:410119デフォルトの名無しさん
2005/05/03(火) 14:48:17ちょっと閲覧
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
正式に入手
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=0&lang=jp
0120デフォルトの名無しさん
2005/05/03(火) 14:48:23ISO
0121デフォルトの名無しさん
2005/05/03(火) 14:51:41http://seclan.dll.jp/c99d/c99d00.htm
0122デフォルトの名無しさん
2005/05/03(火) 16:30:54char型2次元配列に文字列を格納したテーブルがあります。
y
x 'a' 'r' 'a' 'f' 'f' 'g' 'e' 'a' '\n' '\0'
't' 'u' 't' 'e' 'w' 'a' '\n' '\0'
'q' 'r' 'x' 'a' 'b' '\n' '\0'
わかりにくくてすいません。イメージとしてはこんな感じです。
この中から'\n'だけ取り除くプログラムを作りたいのですが、
どうしてもわかりません。
よろしければヒントだけでも教えてくれると助かります。
0123デフォルトの名無しさん
2005/05/03(火) 16:50:02「取り除く」とはどのように?
0124デフォルトの名無しさん
2005/05/03(火) 16:58:10int remove_char (char* dst, char* src, char c) {
char* p = dst;
while (*src) {
if (*src != c) {*p = *src; p++;}
src++;
}
*p = '\0';
return strlen (dst);
}
int main () {
char str[256];
remove_char (str, "test", 'e');
printf ("%s", str);
return 0;
}
0125122
2005/05/03(火) 17:38:01ありがとうございます!とても便利な関数ですね。
>>123
「取り除く」とは'\n'を削除して'\0'を一つ前に詰めるという意味です。
大事なことをわかりづらく書いてしまってすいません。
0126デフォルトの名無しさん
2005/05/03(火) 17:55:10# あえて疑問文で書いているが答えはおおかた予想している
0127デフォルトの名無しさん
2005/05/03(火) 19:00:38ごめんなさい。
初めは整数型iを増やしていたんだけど、ポインタにしちゃった。
0128デフォルトの名無しさん
2005/05/03(火) 19:09:43C/C++を一通り学習し終えたのですが、GUI画面ってどう作るのですか・・・?
0129デフォルトの名無しさん
2005/05/03(火) 19:16:050130デフォルトの名無しさん
2005/05/03(火) 19:18:31>>1の3行目を音読しれ
0131デフォルトの名無しさん
2005/05/03(火) 19:25:37すみません、3行目は空行です
0132デフォルトの名無しさん
2005/05/03(火) 19:26:060133デフォルトの名無しさん
2005/05/03(火) 19:31:31馬鹿には見えない文字コードが使われてます。
0134デフォルトの名無しさん
2005/05/03(火) 19:37:110135デフォルトの名無しさん
2005/05/03(火) 19:41:240136デフォルトの名無しさん
2005/05/03(火) 19:45:090137デフォルトの名無しさん
2005/05/03(火) 20:08:07p-dst
0138デフォルトの名無しさん
2005/05/03(火) 20:13:230139デフォルトの名無しさん
2005/05/03(火) 20:14:35あなたを、先生です。
0140デフォルトの名無しさん
2005/05/03(火) 20:15:24それこそ先生に聞け
0141デフォルトの名無しさん
2005/05/03(火) 20:16:29あなたを、先生です。
0142デフォルトの名無しさん
2005/05/03(火) 20:53:50かなり納得した。
0143凡人プ・・・
2005/05/03(火) 21:20:050144デフォルトの名無しさん
2005/05/03(火) 21:23:03無限ループ
0145デフォルトの名無しさん
2005/05/03(火) 21:23:14whie(1){}とかfor(; ; ){}とか。どちらでもよし。趣味。
0146デフォルトの名無しさん
2005/05/03(火) 21:34:500147デフォルトの名無しさん
2005/05/03(火) 21:38:08>>147
0148デフォルトの名無しさん
2005/05/03(火) 21:42:35main()
{
jmp_bufjb;
setjmp(jb);
longjmp(jb, 1);
}
0149デフォルトの名無しさん
2005/05/03(火) 21:54:42演算子のオーバーロードを目的としフレンド関数を定義したのですが、内部コンパイラエラーがでます。
エラー番号(c1001)をたどってmsdnで調べてみたのですが、
漠然としていて、いまいち良く分かりませんでした。
やさしいc++という本のコードを丸写ししていて、写しミスが無いか何度も確認したのですが見付かりません。
どなたか解決方法を知っていましたら、教えてください。
それとスレ違いだったらごめんなさい。
それと携帯からの投稿でごめんなさい。
0150デフォルトの名無しさん
2005/05/03(火) 22:00:22ここへ行くといいかも
0151デフォルトの名無しさん
2005/05/03(火) 22:08:34そっちでしたか。
ありがとんくす。
携帯で2chやることに、早くも限界を感じてきたので、またあとで質問しに行こうと思います。
ここに足跡として、携帯オリジナルの絵文字を残して行きます。
0152デフォルトの名無しさん
2005/05/03(火) 22:10:27void operator ! (struct hoge)
{
}
を恣意的に解釈すると
型指定子 void に続いて識別名が operator てなところまではパースできていて、
その次のトークン ! がマッチングしないってだけだろ
0153デフォルトの名無しさん
2005/05/03(火) 22:18:44どのようにすればよいのかわかりません。
教えてください。
0154デフォルトの名無しさん
2005/05/03(火) 22:23:50リスト
0155デフォルトの名無しさん
2005/05/03(火) 22:24:04ばらばらにつけるとメドイから
2重にforをりようしれ
0156デフォルトの名無しさん
2005/05/03(火) 22:24:07ランダムにしたいのなら配列をシャッフルというか宿題スレにいったほうが
0157デフォルトの名無しさん
2005/05/03(火) 22:25:400158128
2005/05/03(火) 22:33:13なかなか会えない人でね。
>>130
「GUIなどの標準Cではできない事」
え・・・ちょっと次の言語探してみますね。失礼しました。
0159デフォルトの名無しさん
2005/05/03(火) 22:37:550160デフォルトの名無しさん
2005/05/03(火) 22:38:420161153
2005/05/03(火) 22:39:50初心者なのでいまいち分かりません。具体的におしえていただきたのですが。
>>156
毎回ランダムにきまるようにしたいのです。
シャッフルはどのようにやるのでしょうか?
0162デフォルトの名無しさん
2005/05/03(火) 22:40:29fflush(stdout);
とするとバッファの内容が標準出力へ強制的に出力されますが、
fflish(stdin);
とした場合、標準入力へ書き出すということになるんでしょうか?
そうだとすると、標準入力へ出力とはどういうことなのでしょうか?
(フラッシュというものの概念がそもそもよくわかってないのですが・・・)
よろしくお願いします。
0163デフォルトの名無しさん
2005/05/03(火) 22:42:20rand()
0164デフォルトの名無しさん
2005/05/03(火) 22:44:41>>1にある
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
に書いてある
0165デフォルトの名無しさん
2005/05/03(火) 22:46:43>>152
MSDN (民明書房デベロッパーズノート) によると
「主にC++ コンパイル時に出現する。『標準に準拠してなくて御免なさい』の意」
だそうだ。
0166デフォルトの名無しさん
2005/05/03(火) 23:10:07こんな感じ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void shuffle( int *a, int n )
{
int temp, r, max = n ;
while( --n ) {
r = rand() % max ;
temp = a[n] ; a[n] = a[r] ; a[r] = temp ;
}
}
int main( void )
{
int a[] = { 1, 2, 3, 4, 5 } ;
srand( (unsigned)time( NULL ) ) ;
shuffle( a ,sizeof a / sizeof *a ) ;
for( int i = 0 ; i < 5 ; i++ )
printf( "%d\n" ,a[i] ) ;
}
0167デフォルトの名無しさん
2005/05/03(火) 23:18:48最低だな
0168デフォルトの名無しさん
2005/05/03(火) 23:26:59煽るだけなら簡単だよねー
0169デフォルトの名無しさん
2005/05/03(火) 23:28:41ここの板みて思ったんですけど、>>98ってあんな事して何か意味があるんですか?
0170デフォルトの名無しさん
2005/05/03(火) 23:37:18>どの辺が?
考え方が
要素数を百程度にして、実際の出現率を計算してみな
0171デフォルトの名無しさん
2005/05/03(火) 23:37:42許してやれよ
0172デフォルトの名無しさん
2005/05/03(火) 23:43:17そこまで頭回らんですよ・・・
0173デフォルトの名無しさん
2005/05/03(火) 23:50:36ある範囲の整数からなる乱数はどうやったら生成することができるか。
A:
すぐに思い付く、
rand() % N /* タコ */
(これは0からN-1までの数を返そうとする)は乱数の質が低い。なぜなら乱数発生器の多くで下位のビットは悲しいほどランダムでない(質問13.18を参照のこと)。よりよい方法は以下のようなものである。
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
浮動小数を使うことが気になるのなら、以下の方法を試せばよい。
rand() / (RAND_MAX / N + 1)
どちらの方法もRAND_MAX(ANSIは<stdlib.c>で定義している)の値を知っていることが当然必要である。またどちらもNがRAND_MAXにくらべて十分小さいことを仮定している。
(ところで、RAND_MAXはCライブラリのrand()関数が返す値の範囲を表わす定数である。RAND_MAXを他の値に変更することはできないし、rand()に別の範囲の数を返すように指定することもできない。)
0から1の間の小数を返す乱数発生器を元にするなら、単にその乱数発生器の出力にNを掛けると0からN-1の範囲の乱数発生器が得られる。
References: K&R2 Sec. 7.8.7 p. 168; PCS Sec. 11 p. 172.
0174デフォルトの名無しさん
2005/05/03(火) 23:57:21>>166は、それ以前の問題
0175173
2005/05/03(火) 23:59:280176デフォルトの名無しさん
2005/05/04(水) 00:01:520177デフォルトの名無しさん
2005/05/04(水) 00:04:070178デフォルトの名無しさん
2005/05/04(水) 00:05:110179デフォルトの名無しさん
2005/05/04(水) 00:10:530180デフォルトの名無しさん
2005/05/04(水) 00:14:190181デフォルトの名無しさん
2005/05/04(水) 00:17:03疑問をもつ貴方に疑問を持ちます。
たしかにおかしな記述ではあるが間違ってはいないはず
0182デフォルトの名無しさん
2005/05/04(水) 00:17:53もしかして 0 になるとループ終了してしまうから、ってこと?
そんなん気にするなよ(w
0183デフォルトの名無しさん
2005/05/04(水) 00:20:12>たしかにおかしな記述ではあるが
そんな貴方に疑問をもちます
0184デフォルトの名無しさん
2005/05/04(水) 00:24:51どう疑問を持ったのでしょう、ほら言って御覧なさい。
じっくりと訊いて差し上げましょう。
0186デフォルトの名無しさん
2005/05/04(水) 00:29:52君は親切すぎる。アホが気付くまで待ってやれって。
0187デフォルトの名無しさん
2005/05/04(水) 00:29:59要素数 と 配列のインデクス(添え字) の区別はついてるよね?
0188デフォルトの名無しさん
2005/05/04(水) 00:30:04#define NUM 1000
int main() {
int t[NUM], i ;
for(i=0;i<NUM;i++){
t[i]=i+1;}
srand((unsigned)time(NULL));
shuffle(a,sizeof(t)/sizeof(t[0]));
for(i=0;i<NUM;i++) printf("%d ",a[i]);
return 0 ;}
0189デフォルトの名無しさん
2005/05/04(水) 00:31:19>shuffle(a,sizeof(t)/sizeof(t[0]));
shuffle(t,sizeof(t)/sizeof(t[0]));
0190デフォルトの名無しさん
2005/05/04(水) 00:31:340191デフォルトの名無しさん
2005/05/04(水) 00:32:12「乱数発生器の多く」の特性に依存する方がよっぽどタコだ
乱数発生器をわざわざ関数にする意味がまるでわかってねえな
0192デフォルトの名無しさん
2005/05/04(水) 00:34:57小さくなるだろうなw
0193デフォルトの名無しさん
2005/05/04(水) 00:35:33揚げ足とりのような細かい部分ばかり気がいくんだからさー
正直参っちゃうね
0194デフォルトの名無しさん
2005/05/04(水) 00:36:13> --nで疑問持たないのか
どう疑問を持ったのでしょう、ほら言って御覧なさい。
じっくりと訊いて差し上げましょう。
0195173
2005/05/04(水) 00:37:30知ってて見ないふりをしてそのままにするより、手当てする方が好みなんで
0196デフォルトの名無しさん
2005/05/04(水) 00:39:190197デフォルトの名無しさん
2005/05/04(水) 00:40:370198デフォルトの名無しさん
2005/05/04(水) 00:41:33俺が困る事は全くないのでかまわないが
shuffle(a,0);
0199デフォルトの名無しさん
2005/05/04(水) 00:44:25まさにあげあしとりだw
0200デフォルトの名無しさん
2005/05/04(水) 00:48:200201デフォルトの名無しさん
2005/05/04(水) 00:49:41だから、俺は困らないから、別にかまわないと書いている
0202デフォルトの名無しさん
2005/05/04(水) 00:57:240203デフォルトの名無しさん
2005/05/04(水) 00:59:24>別に rand() そのまま使っても致命的な問題は発生せんけど
(,,゚Д゚)ハァ?
0204デフォルトの名無しさん
2005/05/04(水) 01:00:19a[0]がswapの対象になるのは乱数で選ばれた時だけ
0205デフォルトの名無しさん
2005/05/04(水) 01:01:020206デフォルトの名無しさん
2005/05/04(水) 01:01:280207デフォルトの名無しさん
2005/05/04(水) 01:01:39問題がない、と主張したい香具師は「問題」が示されていないのでコメントしようがない
それが問題
0208デフォルトの名無しさん
2005/05/04(水) 01:02:14なんで言っちゃうかな
0209デフォルトの名無しさん
2005/05/04(水) 01:03:17もう少し遊びたかったのにw
0210195
2005/05/04(水) 01:04:33やっぱりそれが致命的とは思えんな
そもそも配列全体数回swapする必要はないだろ?
0211デフォルトの名無しさん
2005/05/04(水) 01:06:24精度のいい乱数つかうなら>>205が正解
実装の手間はともかく
0212デフォルトの名無しさん
2005/05/04(水) 01:07:400213デフォルトの名無しさん
2005/05/04(水) 01:08:06ポイントはこれだな
0214デフォルトの名無しさん
2005/05/04(水) 01:09:230215デフォルトの名無しさん
2005/05/04(水) 01:10:090216デフォルトの名無しさん
2005/05/04(水) 01:10:42気にしない人は気にしないんだろうが。
0217デフォルトの名無しさん
2005/05/04(水) 01:11:090218デフォルトの名無しさん
2005/05/04(水) 01:11:420219デフォルトの名無しさん
2005/05/04(水) 01:14:420220デフォルトの名無しさん
2005/05/04(水) 01:18:53そういうことは哲板で言え。
0221デフォルトの名無しさん
2005/05/04(水) 01:25:380222デフォルトの名無しさん
2005/05/04(水) 01:26:35>>a[0]がswapの対象になるのは乱数で選ばれた時だけ
>やっぱりそれが致命的とは思えんな
...もまえさん分裂しとるだ
022372
2005/05/04(水) 01:35:21すっきり理解できました。
なんか丁寧にありがとうございます。恐縮です・・
0224デフォルトの名無しさん
2005/05/04(水) 01:35:580225デフォルトの名無しさん
2005/05/04(水) 01:37:220226デフォルトの名無しさん
2005/05/04(水) 01:37:53C++ならな
0227デフォルトの名無しさん
2005/05/04(水) 01:38:030228デフォルトの名無しさん
2005/05/04(水) 01:38:53苦労しなくていいところで苦労する
こんな言語使ってる香具師はアホだろw
0229デフォルトの名無しさん
2005/05/04(水) 01:39:220230デフォルトの名無しさん
2005/05/04(水) 01:40:44えっ?
0231デフォルトの名無しさん
2005/05/04(水) 01:40:59自分で書く無駄な苦労はやめて、ライブラリ使うようにしろ。
0232デフォルトの名無しさん
2005/05/04(水) 01:41:43それはCに限った話ではないがw
0233デフォルトの名無しさん
2005/05/04(水) 01:42:30最初から使う気のない香具師に覚えろというのは酷かも
0234デフォルトの名無しさん
2005/05/04(水) 01:53:16確認したら
59081/100000 = 59.08%
80133/100000 = 80.13%
81440/100000 = 81.44%
81588/100000 = 81.59%
80180/100000 = 80.18%
こんな感じだった
0235デフォルトの名無しさん
2005/05/04(水) 02:02:14#include <stdlib.h>
#include <time.h>
#define NUM 9
int Rand(int i){
int j,k=RAND_MAX-((RAND_MAX+1)%i);
while((j=rand())>k);
return j%i;}
int *make_shuffle(int i){
int j,k,*p=NULL;
if(i>0){
p=calloc(i,sizeof(*p));
while(i){
k=Rand(i);j=-1;
do{while(p[++j])k++;}while(j!=k);
p[j]=i--;}}
return p;}
int main(){
int i,*p;
srand((unsigned)time(NULL));
p=make_shuffle(NUM);
for(i=0;i<NUM;i++)printf("%d\n",p[i]);
free(p);
return 0;}
0236デフォルトの名無しさん
2005/05/04(水) 02:11:380237デフォルトの名無しさん
2005/05/04(水) 02:21:53そのprocmailみたいなキモイソースのインデントやめて
0238デフォルトの名無しさん
2005/05/04(水) 13:24:09スタイルの問題なぞ本質ではない、と思っている俺ですら
嫌悪感を覚えるスタイルだなあ。
0239デフォルトの名無しさん
2005/05/04(水) 14:29:560240デフォルトの名無しさん
2005/05/04(水) 15:17:280241デフォルトの名無しさん
2005/05/04(水) 15:27:32ここにうpするなら充分にありそうだ
0242デフォルトの名無しさん
2005/05/04(水) 17:12:250243デフォルトの名無しさん
2005/05/04(水) 18:10:34includeなんて掲示板に書く例としては必要ないだろ。
0244デフォルトの名無しさん
2005/05/04(水) 19:06:32>includeなんて掲示板に書く例としては必要ないだろ。
それは「営業」の発想。
もし、「技術者」がサンプルを提示するときは、
表記法が多少おかしくても、必ず「動く」ものを
出してくる。
0245デフォルトの名無しさん
2005/05/04(水) 19:12:200246デフォルトの名無しさん
2005/05/04(水) 19:13:00ほほお、なら大半の本はまともな技術者が書いていないということか。
0247デフォルトの名無しさん
2005/05/04(水) 19:22:030248デフォルトの名無しさん
2005/05/04(水) 20:04:07cgi に文字列を送信するサンプルプログラム、C言語で記述しようと思うのですが、
どなたか簡単なサンプルプログラム作成できる方いらっしゃいませんか?
いくら探しても、私のような初心者にわかりやすいサンプルが見つかりません。
0249デフォルトの名無しさん
2005/05/04(水) 20:05:49>cgi に文字列を送信する
具体的にどうぞ。
0250デフォルトの名無しさん
2005/05/04(水) 20:11:490251デフォルトの名無しさん
2005/05/04(水) 20:14:492ちゃんねるだったら、書き込むボタンを押したら、
<form method=POST action="../test/bbs.cgi">の
../test/bbs.cgi ってところにデータが送られて、更新されますよね?!
ここに、書き込むボタンを押さずに自分で用意したプログラムからデータ
を送りたいんです。 これじゃわかりませんか?!
0252デフォルトの名無しさん
2005/05/04(水) 20:14:55それは、cgiが起動するスクリプトにパラメータを引き渡す方法だね。
cgiに文字列を送信することとは違うと思うのだが。
0253デフォルトの名無しさん
2005/05/04(水) 20:15:00そんなに処理速度が必要でないなら、極力Cは止めた方がいい。
そういう用途にはあまり向かない。
0254デフォルトの名無しさん
2005/05/04(水) 20:20:23いくら検索してもさっぱりわかりません。Perl とかがいいと訊いたことは
ありますが、私はCぐらいしかまともに使ったことがないんです。
もう、この動作を実現するプログラムを作りたくてたまらないのですが、
なにから始めればいいかさっぱりわからんです!
0255デフォルトの名無しさん
2005/05/04(水) 20:20:25このMETHODの指定は、入力フォーム(HTML)上で、<INPUT>タグ内で指定します。
GET METHODは、HTTP/0.9から規定されており、データをサーバに送る手段として、
当時においては唯一の手段でした。ただ、255文字分しか有効にならないという制限がありました。
しかも、URLエンコード(後述)した状態で255文字までですので、複雑なフォームを送信しようとするには限界がありました。
これを改善するかのように、最大有効文字数という制限がない POST という手段が規定されました。
ただ、リクエスト時のHTTPヘッダーに、Content-Lengthヘッダーを含める必要があります。
通常、ブラウザーでの実装となりますので、データを受け取る側のCGIでは考慮する必要はありません。
ただ、CGIからHTTPリクエストを送出する場合には、考慮しなければいけません。
0256デフォルトの名無しさん
2005/05/04(水) 20:25:54鯖に極力負荷をかけないのが大事だ
0257デフォルトの名無しさん
2005/05/04(水) 20:26:34Cしか書けないとか阿呆なこといってないで、htmlとJavaScriptで書けば?
オーサリングツールを使うまでもなく、数時間勉強するだけでチャット用の固定発言フォームくらい作れるようになるよ。
0258デフォルトの名無しさん
2005/05/04(水) 20:27:020259デフォルトの名無しさん
2005/05/04(水) 20:30:130260デフォルトの名無しさん
2005/05/04(水) 20:46:46↓
ブラウザのエディットボックスのウィンドウハンドルを得る
↓
マウスカーソルを移動させて文字列を貼り付け
↓
書き込みボタンを押す
こういうの考えてたとしても、面倒くさくて仕方ないです。
もっと一発で出きる関数とかないんですかね?
Cでやりたいんです、とにかくCだけで!
0261デフォルトの名無しさん
2005/05/04(水) 20:50:43必ずってのは現実とズレてるだろ
サンプルの中に //... なんてフレーズはよく出てくるし
擬似コードと断っているサンプルは全然珍しくない
俺はハードもやるけどもっとひどいの普通にあるぜ
0262デフォルトの名無しさん
2005/05/04(水) 20:51:47>↓
>ブラウザのエディットボックスのウィンドウハンドルを得る
>↓
>マウスカーソルを移動させて文字列を貼り付け
>↓
>書き込みボタンを押す
CGIとどんな関係が? ただのGUIアプリじゃねの?
0263デフォルトの名無しさん
2005/05/04(水) 21:00:46ソケットを開く
↓
データを送る
で終了だが。
0264デフォルトの名無しさん
2005/05/04(水) 22:54:15でヤフれ
0265デフォルトの名無しさん
2005/05/04(水) 23:09:12>もう、この動作を実現するプログラムを作りたくてたまらないのですが
ここに萌えたので教えてあげよう。
TCP/IP で connect して PUT コマンドと
ヘッダ、空白行に続いてエンコード済みのフォームを送出し、
サーバからのレスポンスを受信。
噛み砕いて言うと、ぶっちゃけ(君には)無理。
0266デフォルトの名無しさん
2005/05/05(木) 00:28:04どっからどうみても、環境依存の問題なので、完全にスレ違い
0267デフォルトの名無しさん
2005/05/05(木) 00:30:350268デフォルトの名無しさん
2005/05/05(木) 02:31:15さらに、Cでネットワーク通信をする方法を調べる。
(TCP/IP通信の基礎くらいは学ぶ必要があるだろうな)
んで、一応webブラウザがサーバとの間でどういう通信をしてるのかを調べる。
(自分のPCの通信内容を覗きみるソフトなんぞ探せば簡単に見つかる。
もしくは、WWWの通信規約をRFCか何かを読んで調べてもいい)
ここまで身に付ければ書ける。つーかこの程度の知識は無いと書けない。
掲示板荒らしスクリプトとかに使われる事が予想される技術。
なんで、悪用を恐れて初心者入門〜みたいなサイトにはあんまりサンプルは無いと思う。
#ってほど難しいもんでも無いけどな。ユーザインターフェース除けば50行未満で最低限のものは作れると思うし
0269デフォルトの名無しさん
2005/05/05(木) 16:21:00CGIプログラムがおかれてるマシンの、たぶんwebサーバアプリの入出力が
CGIプログラムの標準出力/標準入力となる、ってのは理解してるのかな?
0270デフォルトの名無しさん
2005/05/05(木) 16:44:57下のtest関数の"abcd"をmainに返したいんだけど返らないの・・・。
なぜだ、ウガー!って感じ。
int main() {
char **a;
test(*a, 10);
printf("test=%s", *a);
return 0;
}
int test(char *a, int msize) {
a = (char* )malloc(msize);
a = "abcd";
}
0271デフォルトの名無しさん
2005/05/05(木) 16:45:28なかなかないんだよな、対応鯖が
0272デフォルトの名無しさん
2005/05/05(木) 16:46:30もうちょっとポインタの事を勉強しなされ。
0273デフォルトの名無しさん
2005/05/05(木) 16:52:09もまえさんのやりたい事はこんな感じか?
void test(char **a, int msize) {
*a = (char* )malloc(msize);
strcpy(*a,"abcd");
}
int main() {
char *a;
test(&a, 10);
printf("test=%s", a);
return 0;
}
0274デフォルトの名無しさん
2005/05/05(木) 17:13:38はや!ありがとね。すごいね。
そうか、ポインタのポインタで受けるわけね・・・。
俺みたいなVBな人にはポイポイは難しいのよ。
test関数側をcharのポインタだけで処理しようとしてたから
ずっとうまくいかなかったのかな。。。
完全理解するまでもうちょっと悩みマツ。ありがとうね。
0275デフォルトの名無しさん
2005/05/05(木) 17:42:16HTTP と言うプロトコルを勉強汁。
後、もっと基礎知識を身に付けろ。
0276デフォルトの名無しさん
2005/05/05(木) 17:49:37>a = "abcd";
は、VBと違って文字列のコピーはしないからね
0277デフォルトの名無しさん
2005/05/05(木) 17:52:37HTTP? CGIプログラムでなくWebサーバとのやりとりならな
もっと勉強汁。
0278デフォルトの名無しさん
2005/05/05(木) 18:09:19意味不明
0279デフォルトの名無しさん
2005/05/05(木) 18:27:54プログラムからフォームデータを送信したい、
と言う話だから HTTP だろう。
藻前は日本語勉強した方がいいぞ。
0280デフォルトの名無しさん
2005/05/05(木) 18:32:30少なくとも HTTP ヘッダを弄ったりするぐらいはするだろうし。
0281デフォルトの名無しさん
2005/05/05(木) 19:04:360282デフォルトの名無しさん
2005/05/05(木) 19:20:41ttp://www.cs.shinshu-u.ac.jp/Lecture/NetworkComputing/main.html
0283デフォルトの名無しさん
2005/05/05(木) 19:29:48というより、単なるHTTPの問題じゃないの?
CGIかどうかなんて関係なく。
0284デフォルトの名無しさん
2005/05/05(木) 19:44:360285デフォルトの名無しさん
2005/05/05(木) 19:48:120286デフォルトの名無しさん
2005/05/05(木) 19:51:170287デフォルトの名無しさん
2005/05/05(木) 19:52:540288デフォルトの名無しさん
2005/05/05(木) 19:54:010289デフォルトの名無しさん
2005/05/05(木) 19:54:06なぜCにキタ
0290デフォルトの名無しさん
2005/05/05(木) 19:57:08> もう、この動作を実現するプログラムを作りたくてたまらないのですが、
とか
> Cでやりたいんです、とにかくCだけで!
とかが俺のツボで、腹が痛いんだけど、どうしてくれるよ。
0291デフォルトの名無しさん
2005/05/05(木) 20:06:510292デフォルトの名無しさん
2005/05/05(木) 21:24:21>257じゃないの?
どっちにしろスレ違いなんだからそろそろ消えてね。
0293デフォルトの名無しさん
2005/05/05(木) 23:29:22っつーかそんなライブラリがダウソできるの?
0294デフォルトの名無しさん
2005/05/05(木) 23:31:450295デフォルトの名無しさん
2005/05/05(木) 23:33:23使える できる
0296デフォルトの名無しさん
2005/05/05(木) 23:42:090297デフォルトの名無しさん
2005/05/05(木) 23:48:47この辺見れ
0298デフォルトの名無しさん
2005/05/05(木) 23:49:230299デフォルトの名無しさん
2005/05/06(金) 01:30:41unsigned char r;
unsigned char g;
unsigned char b;
} COLOR;
void Test1(const COLOR **hoge)
{
return;
}
int main(void)
{
COLOR **hoge;
int i;
hoge = malloc(sizeof(COLOR *) * NUM);
for (i = 0; i < NUM; i++) {
hoge[i] = malloc(sizeof(COLOR));
}
Test1(hoge);
return 0;
}
Test1(hoge);のところで問題のあるポインタ変換と警告が出てしまいます。
何でですか?
0300デフォルトの名無しさん
2005/05/06(金) 01:31:49ってせんげんしてるじゃん
0301デフォルトの名無しさん
2005/05/06(金) 06:28:35(#include"xxx.h"ではなく)#include<xxx.h>
としても、そのファイルを読み込んでしまいます。
標準のファイルを読み込ませる方法は無いでしょうか?
0302デフォルトの名無しさん
2005/05/06(金) 07:00:13上の式は常に真ですか?
0303デフォルトの名無しさん
2005/05/06(金) 07:10:33wwwwwwwwwwwwうはっwwwwwwwwwwww
っおkwwwwwwwwwwwwwwwwwwっ
wwwwwwwwwwwwっうはっうはっうはっうはっ
っっwwwwwwwwwwwwwwwwおkうぇwwwwww
0304デフォルトの名無しさん
2005/05/06(金) 07:42:310305デフォルトの名無しさん
2005/05/06(金) 08:57:160306デフォルトの名無しさん
2005/05/06(金) 08:58:470307デフォルトの名無しさん
2005/05/06(金) 09:34:56インクルードパスにカレントが含まれていないなら、不等号で囲えば検索対象外になるはずだけど。
詳しくは、環境依存スレにて。
0308デフォルトの名無しさん
2005/05/06(金) 09:36:00その場合は常に真。
0xff == '\xff'は偽になることもある。
0309デフォルトの名無しさん
2005/05/06(金) 10:01:31そのキャストは完璧に意味なし
int から int に変換しているだけ
0310デフォルトの名無しさん
2005/05/06(金) 10:02:18コンパイラの環境設定でヘッダファイルの検索パスにカレントが入っているとそうなる
0311デフォルトの名無しさん
2005/05/06(金) 10:11:43君は、標準ヘッダと同名のファイルを作らない方が賢明だと思う。
0313デフォルトの名無しさん
2005/05/06(金) 11:19:450314デフォルトの名無しさん
2005/05/06(金) 11:37:47'\0'のような文字定数は元々int型。
(C++ではcharになったが)
0315デフォルトの名無しさん
2005/05/06(金) 11:47:30printf("size = %d\n", sizeof('\0'));
0316デフォルトの名無しさん
2005/05/06(金) 13:07:12>>310
>>311
thx。よく考えたらMakefileに-I.が指定されてました。
0317デフォルトの名無しさん
2005/05/06(金) 14:35:51解放するというのは正しいやり方ですか、それとも反則技ですか。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char *pc;
int n;
pc = (char *)malloc(256);
if (pc == NULL) {
fputs("エラー\n", stderr);
exit(-1);
}
gets(pc);
n = strlen(pc) + 1;
printf("n = %d\n", n);
free(pc + n); /* これは正しいか、反則か */
free(pc);
return 0;
}
0318デフォルトの名無しさん
2005/05/06(金) 14:42:50部分開放はできないし、意味が無い
0319デフォルトの名無しさん
2005/05/06(金) 14:56:48以下のforループで、++aの形でインクリメントしているのですが、これの意味はなんですか?
Cのテキスト(独習C)の中で今まで出てきた他のプログラムでは、forループのインクリメントは全て
a++の形で書かれていました。
色々と意味を考えてみたのですが、わかりませんでした。
/*バブルソートを使って数値を整列させる*/
for(a=1;a<count;++a){
for(b=count-1;b>=a;--b){
/*隣り合わせの要素を比較*/
if(item[b-1]>item[b]){
/*要素を交換*/
t=item[b-1];
item[b-1]=item[b];
item[b]=t;
}
}
}
0320デフォルトの名無しさん
2005/05/06(金) 15:04:44++a の意味
http://c-production.com/contents/c/sec05.html#05
0321デフォルトの名無しさん
2005/05/06(金) 15:21:05for( ; ; ※)
この位置では ++a と a++ は同じ
a++ をよく使うのはアセンブラ使いの癖
++a をよく使うのは C++ 使いの癖
>>320 のリンク先は目眩がするほど嘘ばっかり書いているから信じるな
0322デフォルトの名無しさん
2005/05/06(金) 15:30:04確かにひどい解説だ…
未定義なコード検証してるし
変なところでリテラルとか言ってるし。もとい逝ってるよ…
0323デフォルトの名無しさん
2005/05/06(金) 15:50:51>>321がそんな事言うから見に行っちゃったじゃないかw
0324csh
2005/05/06(金) 15:59:19C言語に似た記述だから Cシェル
結局 言語を覚える感覚でよいんですか?
0326デフォルトの名無しさん
2005/05/06(金) 16:10:37それでいいけどスレ違い。
0327デフォルトの名無しさん
2005/05/06(金) 16:44:41ホントに酷いね。各ページに一つや二つじゃすみそうにないくらい間違いがある。
軽く指摘しようと思って問い合わせフォームを開いたらそこにもTypoがw
ttp://c-production.com/contact.html
0328デフォルトの名無しさん
2005/05/06(金) 16:45:41説明したがるからね。
0329デフォルトの名無しさん
2005/05/06(金) 17:01:12アセンブラ使いだからこそ、a++したら--aしたくなる罠。
0330デフォルトの名無しさん
2005/05/07(土) 01:58:47感覚としては「a+=1」となりまふ
0331299
2005/05/07(土) 01:59:43Test1内で警告が出るのではなく、mainのTest1(hoge);のところで警告が出てしまいます。
0332デフォルトの名無しさん
2005/05/07(土) 02:02:58Test1((const COLOR **)hoge);
つーか、Cじゃなくて、C++使ってない?
殆どのCコンパイラは、そこまで煩くないと思うけど…
0333デフォルトの名無しさん
2005/05/07(土) 02:03:47増分幅はオペランドで決まるもので、即値で指定する += とはニュアンスが違う
0334デフォルトの名無しさん
2005/05/07(土) 02:05:25(?_?)?
0335デフォルトの名無しさん
2005/05/07(土) 02:15:49wwwwwwwwwwwwwうはっwwwおkwwwwwwwwwwwwwww
うぇwwwっうぇwwwwwwwww
っっうぇwwwwwwwwwwwwうはっwww
0336299
2005/05/07(土) 02:17:44bcc32 test.c
gcc test.c
sc -mn -Bj -j0 test.c
でやってみたんですが、どれも似たような警告が出ます。
0337デフォルトの名無しさん
2005/05/07(土) 02:21:14めっちゃC++やん…
まぁ、ただのCは殆どないからね…
0338デフォルトの名無しさん
2005/05/07(土) 02:23:49絶対ネタとしか思えんが…
0339デフォルトの名無しさん
2005/05/07(土) 02:23:52おkwww
wうぇwwwうはっwwwっうぇおkwww
うぇwww
うはっwwwwwwwwwwwwwww
おkwwwうはっwwwwwwっ
おkwww
0340299
2005/05/07(土) 02:58:40ほかのコンパイラでも警告が出るのかと思って
Digital Marsためしただけなので。
C++わからないので何で警告が出るのかまだわからないんですが
無視してもよいのですか?
Cとして?使う場合どうすればよいのですか?
0341デフォルトの名無しさん
2005/05/07(土) 03:05:07キャスト汁
0342299
2005/05/07(土) 03:39:49キャスト汁って何の汁ですか?
けんちん汁の間違えですか?
もう、僕はずっと困ってるんだ。
いい加減丁寧に教えてくれよ、さもないと頃すぞ
0343デフォルトの名無しさん
2005/05/07(土) 03:42:09キエーーー! キャストーーーー!
関係ないけど、キャスターってバニラ入ってるんだね。
0344デフォルトの名無しさん
2005/05/07(土) 03:46:27ttp://www.google.co.jp/search?hl=ja&q=C%E8%A8%80%E8%AA%9E+%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88%E6%B1%81&lr=
0345デフォルトの名無しさん
2005/05/07(土) 04:07:24extern "C"
0346デフォルトの名無しさん
2005/05/07(土) 04:32:48C++なら
Test1(const_cast<COLOR **>(hoge));
0347デフォルトの名無しさん
2005/05/07(土) 09:14:25bcc32は拡張子でCとC++を切り替えている。
0348デフォルトの名無しさん
2005/05/07(土) 18:15:37非constからconstへのキャストは暗黙のうちに行われるけど、逆は明示的なキャストが必要
0349デフォルトの名無しさん
2005/05/07(土) 20:46:050350デフォルトの名無しさん
2005/05/07(土) 21:14:070351デフォルトの名無しさん
2005/05/07(土) 22:04:29int i;
i = 4; の式で i が4になること。
インクリメント・デクリメント演算子での値の変化も副作用。
0352デフォルトの名無しさん
2005/05/07(土) 22:05:29#define N 3
int main(){
double a[N][N],
b[N],
temp1, temp2;
int i, j, k, l, m;
for (i=0; i<N; i++) {
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);
}
printf("(Input)\n");
for (i=0; i<N; i++){
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf(":%7.2f \n", b[i]);
}
for (i=0; i<N; i++) { printf("(i=%d)\n",i);
temp1 = a[i][i];
for (k=0; k<N; k++)
a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1;
for(l=0; l<N; l++)
printf("%7.2f",a[i][l]);
printf(":%7.2f\n",b[i]);
0353デフォルトの名無しさん
2005/05/07(土) 22:06:18for (j=0; j<N; j++)
if (i != j){
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -=temp2*a[i][k];
b[j] -= temp2*b[i];
for (m=0; m<N; m++)
printf("%7.2f", a[j][m]);
printf(":%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n");
}
すいません、コレにピボット交換の機能をつけて貰えませんか?
0354デフォルトの名無しさん
2005/05/07(土) 22:08:460355デフォルトの名無しさん
2005/05/07(土) 22:16:21>>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
0356デフォルトの名無しさん
2005/05/07(土) 22:16:41おkうはっおkwwwwうぇwwwおkwwwうはっっ
wうはっおkっっうぇっうはっおkっwおkwwwwwwwwwwww
wwwwwwwwwwwwおkwwwwwwwwwwww
っうはっおkっおkwwっっw
うはっ
0357349
2005/05/07(土) 22:22:03分かりやすかったです、ありがとです。
0358299
2005/05/08(日) 01:13:08test.cはC++のソースとしてコンパイルされているということですか?
Test1((const COLOR **) hoge);とすれば警告は消えるんですが
何でキャストが必要なのか、何でキャストしないと警告が出るのか、わかりません。
そういえば
void Test1(const COLOR **hoge);
COLOR **hoge;
hoge = malloc(sizeof(COLOR *) * NUM);
for (i = 0; i < NUM; i++)
hoge[i] = malloc(sizeof(COLOR));
Test1(hoge);
と
void Test1(const COLOR *hoge);
COLOR *hoge;
hoge = malloc(sizeof(COLOR) * NUM);
Test1(hoge);
は使い分けたほうがいいんですか?
後者のほうだと警告もエラーも出ないです。
0359デフォルトの名無しさん
2005/05/08(日) 01:32:52const の意味はわかってる?
うっかりを防止するための警告なんだがね。
0360デフォルトの名無しさん
2005/05/08(日) 01:49:48あのね。
const COLOR** と COLOR** は全く違う型なの。
どっち向きにもキャストなしに代入できません。
const COLOR* と COLOR* なら右から左へ自動的に変換されます。
COLOR*const* と COLOR** でも自動的に変換されます。
基本的にポインタの暗黙の変換は同じ型であることが前提
ただし、ポインタを“1つだけ”はがした型に constが付いている場合は
ついてる方向への変換は可能。
2つ以上はがした型に constが付いていた場合、それは全く別の型と見なされ、キャストなしには代入できません。
0361299
2005/05/08(日) 03:01:01難しくて理解できてないですが
なんとなくわかりました。
ありがとうございました。
0362デフォルトの名無しさん
2005/05/08(日) 04:56:21#include <math.h>
#define N 3
int main(){
double a[N][N],
b[N],
b1,
x[1][N],
s, temp1, temp2;
int i, j, k, l, m, t, pivot;
for (i=0; i<N; i++) { /* 入力読み取り */
for (j=0; j<N; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);
}
/* 読み取りデータ出力 */
printf("(Input)\n");
for (i=0; i<N; i++){
for (j=0; j<N; j++) printf("%7.2f", a[i][j]);
printf(":%7.2f \n", b[i]);
}
for (i=0; i<N; i++) { printf("(i=%d)\n",i);
0363デフォルトの名無しさん
2005/05/08(日) 04:57:06s=0; pivot=i;
for(t=i;t<N;t++) {
if(fabs(a[t][i])>s) { //i列の中で一番値が大きい行を選ぶ
s=fabs(a[t][i]);
pivot=t; printf("%lf\n",s);
}
}
if(pivot !=i) { //pivotがiと違えば、行の入れ替え
for(j=0;j<N;j++) {
x[0][j]=a[i][j];
a[i][j]=a[pivot][j];
a[pivot][j]=x[0][j];
} b1=b[i]; b[i]=b[pivot]; b[pivot]=b1;
}
for (l=0; l<N; l++){ /* 交換した係数行列を表示 */
for (m=0; m<N; j++) printf("%7.2f", a[l][m]);
printf(":%7.2f \n", b[l]);}
temp1 = a[i][i]; /* 通常通り計算 */
for (k=0; k<N; k++)
a[i][k] = a[i][k]/temp1;
b[i] = b[i]/temp1;
0364デフォルトの名無しさん
2005/05/08(日) 05:00:03printf("%7.2f",a[i][l]);
printf(":%7.2f\n",b[i]);
for (j=0; j<N; j++)
if (i != j){
temp2 = a[j][i];
for (k=0; k<N; k++) a[j][k] -=temp2*a[i][k];
b[j] -= temp2*b[i];
for (m=0; m<N; m++)
printf("%7.2f", a[j][m]);
printf(":%7.2f\n", b[j]);
}
}
for (i=0; i<N; i++) printf("%10.2f", b[i]);
printf("\n");
}
>>362-364
コンパイルしようとすると文字が識別できずにエラーとなってしまうのですが、どこが間違っているのでしょうか?
助けてください!
環境はwinXPでコンパイラ(バージョン):Microsoft.NET FrameworkSDK です
0365デフォルトの名無しさん
2005/05/08(日) 05:23:370366360
2005/05/08(日) 05:30:37何 を 言 っ て る ん だ ? 俺 は。
要するに
代入は、同じ型じゃなきゃ基本的にはだめ。
但し、型が違っても、代入先の被参照型に余分に修飾子が付いている、
というだけの違いなら大丈夫。
0367デフォルトの名無しさん
2005/05/08(日) 06:23:03うんこ氏ね
0368デフォルトの名無しさん
2005/05/08(日) 06:59:54XPでBorland C++を使ってCの勉強してます。
現在文字列のあたりを勉強しているのですが、
gets()で日本語の文字列を入力しようと思っても、入力できません。
全角キーを押しても、半角しか入力できないんです。
どのようにすればいいか教えてください。
0369デフォルトの名無しさん
2005/05/08(日) 07:12:320370デフォルトの名無しさん
2005/05/08(日) 07:23:500373デフォルトの名無しさん
2005/05/08(日) 12:06:25文字列を入力した順の逆から表示するプログラムを作成しているのですが、
以下のやり方では文末が文字化けしてしまいました。
何がまずかったのでしょうか?
(解答ではforループ内で、1charづつ出力してました。
自分でも動作確認したところ、そちらの方はきちんと動きました。)
#include "stdio.h"
#include "string.h"
main()
{
char str[100],str2[100];
int i,l;
printf("文字列を入力せよ: ");
gets(str);
l=strlen(str);
for(i=l-1;i>=0;i--){
str2[l-1-i]=str[i];
}
printf("%s\n",str2);
}
0374デフォルトの名無しさん
2005/05/08(日) 12:09:50この関数を使え。
void swap (char* a, char* b) {char tmp = *a; *a = *b; *b = tmp;}
char* reverse (char* str) {
char *p, *ep;
p = ep = str;
while (*ep++); ep -= 2;
while (p < ep) {swap (p, ep); p++; ep--;}
return str;
}
void print_freq (const char* str) {
}
int main () {
char str[] = "abcdef";
printf ("%s\n", reverse (str));
return 0;
}
0375デフォルトの名無しさん
2005/05/08(日) 12:45:25#include <string.h>
void swap(char* lhs, char* rhs)
{
char oldLhs = *lhs;
*lhs = *rhs;
*rhs = oldLhs;
}
void reverseRange(char* first, char* last)
{
for (; first < last; ++first) {
swap(first, --last);
}
}
void reverse(char* string)
{ reverseRange(string, string + strlen(string)); }
int main(void)
{
char s[] = "The quick brown fox jumpx over the lazy dog.";
printf("%s\n", s);
reverse(s);
printf("%s\n", s);
return 0;
}
漏れの脳内コンパイルは通った
0376デフォルトの名無しさん
2005/05/08(日) 12:48:57> strlen(string)
これ無駄過ぎ。なんで繰り返しを2回もやるのかと。
0377デフォルトの名無しさん
2005/05/08(日) 12:52:08意味不明
0378デフォルトの名無しさん
2005/05/08(日) 12:53:380379デフォルトの名無しさん
2005/05/08(日) 12:53:54strlenの中身は先頭から\0がくるまで文字数をカウント。
繰り返しだ。
0380デフォルトの名無しさん
2005/05/08(日) 12:59:03じゃあどうするの??
0381デフォルトの名無しさん
2005/05/08(日) 12:59:45>>374
0382デフォルトの名無しさん
2005/05/08(日) 13:00:11int get_power(int x, int n);
int main(void);
/* x の n乗の計算 */
int get_power(int x, int n)
{
int i,y = 1;
for(i = 0;i < n;i++){
y = y * x;
}
return(y);
}
int main(void)
{
printf("%d\n",get_power(8, 2)):
return(0);
}
xのn乗の計算をするわけですが、なぜここでfor文がつかわれるのかわかりません。
初歩的な質問ですみませんm(__)m
0383デフォルトの名無しさん
2005/05/08(日) 13:01:13やってることは同じだろw
0384デフォルトの名無しさん
2005/05/08(日) 13:01:51計算量的に同じだと思うが…
0385デフォルトの名無しさん
2005/05/08(日) 13:02:43じゃあどう書けば美しいんだ?
0386デフォルトの名無しさん
2005/05/08(日) 13:04:27int power (int x, int y) {
if (y == 0) return 1;
else if (y == 1) return x;
else return x * power (x, y-1);
}
だったら再帰使えよ。
0387デフォルトの名無しさん
2005/05/08(日) 13:05:12未定義の動作になるんじゃないの?
0388デフォルトの名無しさん
2005/05/08(日) 13:08:20無問題
0390デフォルトの名無しさん
2005/05/08(日) 13:14:41無問題なわけねーだろww
って釣りか?
0391デフォルトの名無しさん
2005/05/08(日) 13:20:47なに今さらまとめちゃってんの?
0392デフォルトの名無しさん
2005/05/08(日) 13:26:200393デフォルトの名無しさん
2005/05/08(日) 13:30:22うるさい 低能っていうやつが低能なんだよ!!!!!!!!!
0394デフォルトの名無しさん
2005/05/08(日) 13:34:46++ のタイミングあたり
間違っちゃいないけどダサい
例えるなら sprintf 一発で済むことを strcat で延々書いているようなスタイルだ
0395デフォルトの名無しさん
2005/05/08(日) 13:36:26再帰の使い方のうち最悪な例の1つだな
0396デフォルトの名無しさん
2005/05/08(日) 13:36:55じゃあどうすれば sprintf 一発で済む感じになるの?
見本キボンヌ
0397デフォルトの名無しさん
2005/05/08(日) 13:37:36ここから有料です
0398デフォルトの名無しさん
2005/05/08(日) 13:39:56必死すぎwwwww
>>395
まあ、再帰を使うべき場面ってあんまないしね…
0399デフォルトの名無しさん
2005/05/08(日) 13:41:35うぇwwwっwwwwwwwwwwwwwwwwwうはっwww
おkwwwwwwwwwwwwwwwっw
っwwwwwwwwwwwwおkwwwっw
wwwwwwwwwwww
0400デフォルトの名無しさん
2005/05/08(日) 13:43:50再帰使いたいならCやめて関数型言語使えよ。
0401デフォルトの名無しさん
2005/05/08(日) 13:45:23再帰のほうがきれいに書けるときは使う
使ってはならない条件に該当したとき無理して非再帰にばらす
0402デフォルトの名無しさん
2005/05/08(日) 13:47:18効率を考えると関数のオーバヘッドは無視できないから、汚くてもforやらwhileを使う。
0403デフォルトの名無しさん
2005/05/08(日) 13:57:50>>375のようになるよね。STLとかはこういうforの使い方ばっかり。
for( ; begin != end; ++begin ) とか、for( ; last != begin; ){ --last; ... } とか
>>401
クイックソートとか木とかはいい例ですよね。
あれくらい楽になれば漏れも再帰使う。
でもn乗を求める場合は再帰使う利点って何一つとしてないような…?
0404デフォルトの名無しさん
2005/05/08(日) 14:04:39int r=1;
if(y) {
r=power(x, y>>1);
r*=r;
if(y&1) r*=x;
}
return r;
}
0405デフォルトの名無しさん
2005/05/08(日) 14:06:24これだと再帰使う利点がかなりあると思う
0406デフォルトの名無しさん
2005/05/08(日) 14:15:52お、STL が出てきたぞw
0407デフォルトの名無しさん
2005/05/08(日) 15:21:27ソートでの再帰は最大エレメント数が予めわかっているときにだけ使う場合があるが原則禁止
ツリーも同様、あれはちょっと工夫すればすぐ非再帰にできる
0408デフォルトの名無しさん
2005/05/08(日) 15:26:150409デフォルトの名無しさん
2005/05/08(日) 15:27:12厳しすぎね?
0410デフォルトの名無しさん
2005/05/08(日) 15:33:01ハノイの塔を再帰使わずに書いてみろ。
0411デフォルトの名無しさん
2005/05/08(日) 15:37:18死ぬほど簡単なアルゴリズムがあるが、何か?
0412デフォルトの名無しさん
2005/05/08(日) 15:38:230413デフォルトの名無しさん
2005/05/08(日) 15:47:020414デフォルトの名無しさん
2005/05/08(日) 15:53:21そんときは再帰で根性だろうけど。
例が悪すぎたな。
0415デフォルトの名無しさん
2005/05/08(日) 16:28:39速度等の都合でどうしてもやらざるをえない場合を除いて原則、再帰使用だ
"ちょっと工夫"ができない香具師があまりにも多すぎる
0416デフォルトの名無しさん
2005/05/08(日) 16:57:15そうでもないか・・・
0417デフォルトの名無しさん
2005/05/08(日) 17:14:50-eオプションでエスケープを解釈するechoコマンドを作ったぞ!
0418デフォルトの名無しさん
2005/05/08(日) 17:16:06行き詰まってます。環境はwindows + VC6。何が間違ってるのかよくわからず・・
だいたいメモリエラーになります。
#include <stdio.h>
struct clientData{
int acctNum;
char lastName[15];
char firstName[10];
float balance;
};
main()
{
FILE *cfptr;
struct clientData client;
if((cfptr = fopen("credit.dat","r+")) == NULL)
printf("ファイルをオープンできません\n");
0419デフォルトの名無しさん
2005/05/08(日) 17:16:34printf("顧客の口座番号(1-100)を入力してください(0を入力すると終了)\n?");
scanf("%d", &client.acctNum);
while(client.acctNum != 0){
printf("名字、名前、取引残高を入力してください\n?");
scanf("%s%s%f",client.lastName, client.firstName, client.balance);
fseek(cfptr, (client.acctNum - 1) * sizeof(struct clientData), SEEK_SET);
fwrite(&client, sizeof(struct clientData), 1, cfptr);
printf("口座番号を入力してください\n?");
scanf("%d",&client.acctNum);
}
}
fclose(cfptr);
return (0);
}
0420デフォルトの名無しさん
2005/05/08(日) 17:23:010421418
2005/05/08(日) 17:25:320422デフォルトの名無しさん
2005/05/08(日) 17:29:460423デフォルトの名無しさん
2005/05/08(日) 17:46:000424418
2005/05/08(日) 17:46:01別のとこにも問題アリでしょうか・・
scanfで"%f"を取るのは大丈夫ですよね??
printf("名字、名前、取引残高を入力してください\n?");
printf("名字:");
fgets(client.lastName, sizeof(client.lastName), stdin);
printf("名前:");
fgets(client.firstName, sizeof(client.firstName), stdin);
printf("取引残高:");
scanf("%f",client.balance);
0425デフォルトの名無しさん
2005/05/08(日) 17:46:33>scanf("%f",client.balance);
0426デフォルトの名無しさん
2005/05/08(日) 17:58:44本の誤りを指摘すると、お礼として図書券とかもらえる事があるらしい
急げ
0427418
2005/05/08(日) 17:58:58sscanf(line,"%f",&client.balance);
む、むむむ、なんか動作変わってきました!確認してみます!!
0428デフォルトの名無しさん
2005/05/08(日) 18:00:04scanf変えとるやんw
0429418
2005/05/08(日) 18:10:45while(client.acctNum != 0){
printf("名字、名前、取引残高を入力してください\n");
printf("名字:");
fgets(client.lastName, sizeof(client.lastName), stdin);
printf("名前:");
fgets(client.firstName, sizeof(client.firstName), stdin);
printf("取引残高:");
fgets(line, sizeof(line), stdin); /*文字用の配列lineをとりました*/
sscanf(line,"%f",&client.balance);
fseek(cfptr, (client.acctNum - 1) * sizeof(struct clientData), SEEK_SET);
fwrite(&client, sizeof(struct clientData), 1, cfptr);
printf("口座番号を入力してください\n?");
fgets(line, sizeof(line), stdin); /*文字用の配列lineを使ってます*/
sscanf(line,"%d", &client.acctNum);
}
0430418
2005/05/08(日) 18:13:00なんか2週間くらい詰まってたので無茶苦茶嬉しいです!
0431デフォルトの名無しさん
2005/05/08(日) 18:14:32>scanf("%f",client.balance);
と
>sscanf(line,"%f",&client.balance);
の決定的な違いに気が付いてんの?
scanf( "%f", client.balance);
sscanf(...,"%f",&client.balance);
わかんね?
0432418
2005/05/08(日) 18:14:33あと、fcloseのとこの処理ですね。これも気をつけます!
0433デフォルトの名無しさん
2005/05/08(日) 18:15:53...もまえオモシロスギ
0434デフォルトの名無しさん
2005/05/08(日) 18:16:26どーでもいいけど気持ち悪いコードだな
K&Rスタイルで書いてるのかと思いきや
int 返しやポインタ返しの関数にわざわざ #include 使ったり
条件に != 0 とか出てきたり・・・
0436デフォルトの名無しさん
2005/05/08(日) 18:19:111.11をかければkm/hになりますよね。
1.11だとfloat使わなきゃいけないんで、floatを使わずに変換する方法ありますか?
0437デフォルトの名無しさん
2005/05/08(日) 18:22:294 倍すれば [m/s] 単位
3600 倍すれば [m/h] 単位
60 で割れば [km/h] 単位
おい、文部科学省! 小学校で一体何を教えているんだ?
0438デフォルトの名無しさん
2005/05/08(日) 18:23:190439デフォルトの名無しさん
2005/05/08(日) 18:24:07(処理系依存?)
0440デフォルトの名無しさん
2005/05/08(日) 18:24:330441デフォルトの名無しさん
2005/05/08(日) 18:25:26http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
0442デフォルトの名無しさん
2005/05/08(日) 18:28:54どこがまずいのでしょうか?(C言語プログラムと書かれて言うのに拡張子がcppですもしかしてC++?)
windows.hがないのかな・・・
■実行コマンド
>cl sample01.cpp
■出力結果
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.40607.16 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
sample01.cpp
sample01.cpp(3) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory
0443デフォルトの名無しさん
2005/05/08(日) 18:32:11まてまてもちつけ順番に
Km = 1000m
m = 60s
h = 60m = 3600s
Km/h = 1000m / 3600s
= [1000 / 3600] m/s
つまり m/s を 1000倍して 3600で割れば Km/h
0444デフォルトの名無しさん
2005/05/08(日) 18:32:16windows.hがないね。
インクルードパス上にwindows.hを置けばいいと思うよ。
0445デフォルトの名無しさん
2005/05/08(日) 18:34:23またそういう破壊的なジョークを・・・
0446デフォルトの名無しさん
2005/05/08(日) 18:34:57ごめんなさい・・・インクルードパス上にwindows.hを置くとはどういう意味ですか?
具体的にはどうすればよいのかわかりません・・・本当ごめんなさい。
0447デフォルトの名無しさん
2005/05/08(日) 18:38:42コマンドプロンプトの起動の仕方が間違っていると思われ
[スタート] - [すべてのプログラム] - [Microsoft Visual Studio 2005 Beta] - [Visual Studio Tools] - [Visual Studio Command Prompt]
で起動したコマンドプロンプトからやってみれ
0448デフォルトの名無しさん
2005/05/08(日) 18:39:34ん、任せた
0449デフォルトの名無しさん
2005/05/08(日) 18:40:37それでやってるんですけど・・・・少し書き換えたのがまずかったのかな・・・
オリジナルも残しているのでデフォルトに戻して試してみます。
0450デフォルトの名無しさん
2005/05/08(日) 18:43:02"C:\Program Files\Microsoft Visual Studio 8\VC\bin\vcvars32.bat"
↑
これ実行してもダメか?
0451デフォルトの名無しさん
2005/05/08(日) 18:46:35はい。できません(汗
0452デフォルトの名無しさん
2005/05/08(日) 18:48:590453デフォルトの名無しさん
2005/05/08(日) 18:50:00できません じゃねーよぼけ
どうできないのか具体的に書けや
コマンドを実行してどうなった?
コマンド自体がエラーになったのか?
エラーならそのメッセージは?
それとも正常に終わったのか?
てめーみたいな低脳はなぁ、一歩一歩を大切にしないと
一生成長できないんだ。わかったか?
0454デフォルトの名無しさん
2005/05/08(日) 18:49:59はい。そのままダブルクリックしたらコマンドプロンプトは終了しちゃうので・・・
0455デフォルトの名無しさん
2005/05/08(日) 18:51:15再インスコしる
0456デフォルトの名無しさん
2005/05/08(日) 18:51:31>>442を参照してください。
バッチで環境変数をSETしているのは知ってますが、そもそもそれがまちがってるのかな?
0457デフォルトの名無しさん
2005/05/08(日) 18:52:170458デフォルトの名無しさん
2005/05/08(日) 18:52:550459デフォルトの名無しさん
2005/05/08(日) 18:53:41ごめんなさい。書き換えたのではなく書き加えました。表現が間違ってすみません。
書き加えたのはディレクトリの移動だけです・・・もしかしてコンパイルするのは所定の場所でないといけないのかな?
0460デフォルトの名無しさん
2005/05/08(日) 18:54:35↑これで起動してます。もしかしてこれがまずいのでしょうか?
0461デフォルトの名無しさん
2005/05/08(日) 18:56:46cl実行するコマンドプロンプトでvsvars32.batを動かせ
0462デフォルトの名無しさん
2005/05/08(日) 18:58:58SDK 入れてないだろ?
set | find "INCLUDE"
で表示されるディレクトリに windows.h があるかどうか見てみ
0463デフォルトの名無しさん
2005/05/08(日) 18:59:35/k ならいいんじゃないか
/c はまずいけど
0464デフォルトの名無しさん
2005/05/08(日) 19:00:11�A「C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat」をプロンプト上で実行
�Bカレントディレクトリの移動(D:ドライブに行ってます)
�C「cl sample01.cpp」をプロンプトで実行(拡張子がcの場合も試しました)
�D>>442が出力されました・・・
ベータ版だからできないのかな・・・windows.hをインクルードしない簡単なプログラムはコンパイルできたのですか・・・
0465デフォルトの名無しさん
2005/05/08(日) 19:00:46/K command 指定したコマンドを実行する(復帰はEXITコマンドで)
0466442
2005/05/08(日) 19:06:59■実行コマンド
set | find "INCLUDE"
■出力結果
INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;
�A出力フォルダ内にwindows.hの有無を確認
無
・・・・・え〜〜windows.hというのが存在しませんでした(汗
0467デフォルトの名無しさん
2005/05/08(日) 19:13:28単位0.25m/sなら
250倍して3600で割ればいいわけですね。
0468デフォルトの名無しさん
2005/05/08(日) 19:15:520.25*1000という意味?
0469デフォルトの名無しさん
2005/05/08(日) 19:36:48Windowsプログラミングなのに windows.h が無いとか洒落にしかならんな。。。
ところで、Windows.h と windows.h
どっちが正しいんだ?
0470デフォルトの名無しさん
2005/05/08(日) 19:38:06どちらも同じ
0471デフォルトの名無しさん
2005/05/08(日) 19:38:38それ、OS の仕様を知らなさすぎ
頭悪スレがお似合い (プ
0472デフォルトの名無しさん
2005/05/08(日) 19:39:380473デフォルトの名無しさん
2005/05/08(日) 19:40:590474デフォルトの名無しさん
2005/05/08(日) 19:44:14うぇwwwwwwwwwwっうぇwwwwwwwwwwww
っうぇ
wwwwwwうぇwwwうぇwwwwwwwww
wwwwwwwwwwwwwwwおkwww
0475デフォルトの名無しさん
2005/05/08(日) 20:03:19「関数の引数に配列全体を渡すことはできない」
というのが、イマイチ理解できません。
#include<stdio.h>
void kansu(char ptr[])
{
printf("%s",ptr);
}
int main(void)
{
char str[5]="1234";
kansu(str);
return(0);
}
というのを実行しても問題なく「1234」と表示されますし、
仮引数に配列全体渡されてるじゃん、と思ってしまうのです。
どうかご教授お願いします。
0476デフォルトの名無しさん
2005/05/08(日) 20:09:10ってやって
関数で配列strの大きさをどうやって汁?
ちなみに main() でなら sizeof(str)/sizeof(str[0]) でわかるが
0477デフォルトの名無しさん
2005/05/08(日) 20:26:10渡されているのは、先頭の要素のアドレスだけ。
呼び出された関数は、そこから配列が始まるものとして動作する。
0478476
2005/05/08(日) 20:28:08もれあて?
何がいいたいの?
0479デフォルトの名無しさん
2005/05/08(日) 20:37:07関数には配列の先頭を指すポインタを渡している。
配列そのものを渡しているわけではない。
0480デフォルトの名無しさん
2005/05/08(日) 20:46:450481デフォルトの名無しさん
2005/05/08(日) 20:51:41なあ、コードに「俺はヴァカ」って書いてあるぞ?
0482デフォルトの名無しさん
2005/05/08(日) 20:53:12> というのを実行しても問題なく「1234」と表示されますし、
これは、char型配列の最後に0という値が入っていて、文字列を扱うライブラリ関数(この場合はprintf)は、
kansuに渡した先頭ポインタptrから順にたどって、0という値を見付けると停止するようにできているの。
0483475
2005/05/08(日) 20:54:17先頭要素だけを渡してるから↓でもOKなのかな。
一見、全体を渡してるように見えても実際は先頭だけってこと?
#include<stdio.h>
void kansu(char ptr[1])
{
printf("%s",ptr);
}
int main(void)
{
char str[10]="123456789";
kansu(str);
return(0);
}
0484デフォルトの名無しさん
2005/05/08(日) 20:55:28意味ない書き方
(そもそもコンパイル通る?)
0485デフォルトの名無しさん
2005/05/08(日) 20:57:41> 一見、全体を渡してるように見えても
見えてない見えてない
例えば、str[1]は、*(str+1)とも書けるんだ。これだとポインタを意識しやすいでしょ。
0486デフォルトの名無しさん
2005/05/08(日) 20:58:51> void kansu(char ptr[1])
あ、これはおかしいな。
ptr[1]とは*(ptr+1)
要素を指していることになる。おかしい。
0487デフォルトの名無しさん
2005/05/08(日) 21:02:08kansuの定義を kansu(char* ptr)としてみるとか
kansu(&str[1])で呼び出してみるとかじゃないの?
0488418
2005/05/08(日) 21:11:10元の状態からscanfの&を直した状態でも動いたり動かなかったり
(コンパイルは通る)
なんか別の個所がおかしいのかも・・
0489デフォルトの名無しさん
2005/05/08(日) 21:12:33では「先頭アドレス」を渡しているだけ。
0490デフォルトの名無しさん
2005/05/08(日) 21:18:250491デフォルトの名無しさん
2005/05/08(日) 21:33:14そうです。違いますかね?
0492デフォルトの名無しさん
2005/05/08(日) 21:37:350493デフォルトの名無しさん
2005/05/08(日) 21:41:23トされていません。
こういう表示がされた場合って、基本的に何が原因なんでしょうか
0494デフォルトの名無しさん
2005/05/08(日) 21:44:230495デフォルトの名無しさん
2005/05/08(日) 21:45:23ありとあらゆること
0496デフォルトの名無しさん
2005/05/08(日) 21:51:30全角使うなアフォ
0497デフォルトの名無しさん
2005/05/08(日) 21:54:21>fgets(line, sizeof(line), stdin); /*文字用の配列lineをとりました*/
>sscanf(line,"%f",&client.balance);
>>488
なんで残高にfloat使ってんの?
unsigned long int か long long int つかったほうがいいと思うが、
floatだとライン入力時に小数点を打たない場合エラーでなかったけか?
0498デフォルトの名無しさん
2005/05/08(日) 21:55:26でない
0499418
2005/05/08(日) 22:06:58Debug Error! と、あまり見慣れない
エラーダイアログが出て終了してしまう場合と
なんなく実行できる場合があります。
0500デフォルトの名無しさん
2005/05/08(日) 22:08:49うそだねー
多重仮想記憶の OS 書けねえ
0501デフォルトの名無しさん
2005/05/08(日) 22:12:17それなんてエロゲー?
0502418
2005/05/08(日) 22:14:53_______________________________________
×Debug Error!
Program:D:\C\test\Debug\test.exe
runtime error
(Press Retry to debug the application)
[中止(A)] [再試行(R)] [無視(I)]
_______________________________________
0503デフォルトの名無しさん
2005/05/08(日) 22:14:590504デフォルトの名無しさん
2005/05/08(日) 22:17:33侮辱系のエロゲーか・・・
0505デフォルトの名無しさん
2005/05/08(日) 22:18:090507418
2005/05/08(日) 22:46:28if(fseek(cfptr, ((client.acctNum - 1) * sizeof(struct clientData)), SEEK_SET))
fprintf(stderr,"fseek に失敗してます\n");
どうも変わっていない様子。気長にデバッグしてみまっす。
0508デフォルトの名無しさん
2005/05/08(日) 22:49:12単純にファイルの終わりを超えてseekしてんじゃねの? とおもたが
0509デフォルトの名無しさん
2005/05/08(日) 22:51:58それは fseek では検出でけへん
0510デフォルトの名無しさん
2005/05/08(日) 22:53:43失敗しないの?
0511デフォルトの名無しさん
2005/05/08(日) 23:24:000512デフォルトの名無しさん
2005/05/08(日) 23:28:560513デフォルトの名無しさん
2005/05/08(日) 23:31:030514418
2005/05/09(月) 00:22:17ごっちゃになってる点は直してみました。
読み込まれる"credit.dat"は"wb"オプションで作成して、今回うまくいってない
「ランダムアクセスファイルにランダムにデータを書き込む」
の際には"credit.dat"を"rb+"オプションで開くように直しました。
・・んがっ・・状況変わらず。
気長にいきまっす。。
0515デフォルトの名無しさん
2005/05/09(月) 01:16:57�@整数nを入力して、1以上n以下の完全数を全て求めるプログラムを作成せよ。
�A二分法(中間値の定理の応用)を利用して、方程式sinx=0の解の1つであるπの近似値を求めてみよ。
って問題です。
まだ制御文(while,for)を習ったところなので、その程度の知識で出来るらしいのですが、
むしろ数学的なものがわからないんです。。。
0516デフォルトの名無しさん
2005/05/09(月) 01:18:15馬鹿かお前は。無知にもほどがある。
0517デフォルトの名無しさん
2005/05/09(月) 01:18:55>1をよめ。
0518デフォルトの名無しさん
2005/05/09(月) 01:26:49Data[10]には符号なし、Data[11]に対しては符号つきでアクセスしたいといった場合、
型変換をする方法だと、その型の範囲外のサイズのものに対しては、
変換された値が保証されなくなってしまいます。
どうしたらよいのでしょうか?
いちおうこんな方法も考えてみたのですが・・・
typedef union
char c;
unsigned char uc;
} DATA;
DATA Data[40];
Data[10].uc=200;
Data[11].c=-10:
のようにしてアクセスするのは、どう思いますか?
0519デフォルトの名無しさん
2005/05/09(月) 01:32:48だが板違いにも教えてあげると、完全数っていうのは、自身を除く約数を全部足したら自身に戻る数
例えば6!6の約数は1,2,3で、全部足したら6に戻る(’−’)b
二分法っていうのは、f(a) < 0 < f(b)となるa, bを選べば、f(x)=0の解は区間(a, b)に含まれる。
そこで中間値c = (a + b)/2を取って、もしf(c) > 0なら解は区間(a, c)に狭まる。
それで近似解を求めること(’−’)b
0520デフォルトの名無しさん
2005/05/09(月) 01:35:42DATAの定義の前に
#if sizeof(char) != sizeof(unsigned char)
#error ( ゚Д゚)うごー
#endif
0521デフォルトの名無しさん
2005/05/09(月) 01:38:250522デフォルトの名無しさん
2005/05/09(月) 01:39:00そういうニーズがどこにあるのかわからんので
いまいちイメージできないのだが
0523デフォルトの名無しさん
2005/05/09(月) 01:46:38-127〜255までの数をcharで扱おうというケチ精神
0524デフォルトの名無しさん
2005/05/09(月) 01:49:00sizeof(char) != sizeof(unsigned char)
↑みたいなこともあるんですか?
>>521
すみません。
charで書いたけど、long intの場合もあるんです・・・
Dataのサイズがlong intだとすると、
取り込むときは
for(i=0; i<40; i++){
Data[i].ul=*(unsigned long *)(0x020000+i*4);
}
みたいに取り込んで、取り込んだ値を使うときは、符号付きだったり、符号なしだったりするという感じです。
>>522
メモリに直接アクセスするような使い方です。
0525デフォルトの名無しさん
2005/05/09(月) 01:56:57使うときにsignedかunsignedかをキャストして変えればいいんじゃないの?
0526デフォルトの名無しさん
2005/05/09(月) 02:27:42その場合に、桁が大きくなるのでcharで書くと、
unsigned charで255という値を受け取って、それをsigned charとして扱いたい(-1として扱いたい)ときに、
signed charにキャストできるのかどうかがちょっと不安です。
0527373
2005/05/09(月) 02:35:530528デフォルトの名無しさん
2005/05/09(月) 02:45:10>-127〜255までの数をcharで扱おうというケチ精神
実データの8ビットに加えて型情報も
保持しなきゃならんのだから1バイトじゃ無理。
節約どころか技術の浪費。
>>526
>unsigned charで255という値を受け取って
これが 0xFF であることを保証したいなら
代入文使わずに memcpy でも使えば?
0529デフォルトの名無しさん
2005/05/09(月) 03:04:38できる
0530デフォルトの名無しさん
2005/05/09(月) 04:54:54変数自体は型情報をもたない。型情報は内部の変数テーブルに記述されているのみ。
構造体のバイナリ―保存考えれば普通に分かるはず。
0531デフォルトの名無しさん
2005/05/09(月) 05:16:44(・∀・)ヘイヘーイ!!
0532デフォルトの名無しさん
2005/05/09(月) 05:17:05ビットシフトはなんの役に立つのでしょうか?
0533デフォルトの名無しさん
2005/05/09(月) 05:25:080534デフォルトの名無しさん
2005/05/09(月) 06:31:02例えば圧縮のように本質的にビット単位のアプリの記述
0535デフォルトの名無しさん
2005/05/09(月) 06:32:280536デフォルトの名無しさん
2005/05/09(月) 07:02:38処理系依存
0537デフォルトの名無しさん
2005/05/09(月) 09:50:34それってC以外のブログラミング言語なら書けるの?
プログラミング言語レベルの話し?
0538528
2005/05/09(月) 11:07:25char配列のどのインデックスがsignedかunsignedかを保持するための
別の変数が必要っていう意味で書いたんだが、518からのレスを読み返すと、
思ってた用途と違うっぽいな。
0539デフォルトの名無しさん
2005/05/09(月) 11:42:14strtokは文字なので不可でお願いします。
0540デフォルトの名無しさん
2005/05/09(月) 11:49:250541デフォルトの名無しさん
2005/05/09(月) 11:55:220542デフォルトの名無しさん
2005/05/09(月) 11:55:430543デフォルトの名無しさん
2005/05/09(月) 11:56:16やりたい事をもっと具体的に書いた方がいいと思う。
0544デフォルトの名無しさん
2005/05/09(月) 11:57:08ない
>>542
キャスト
0545542
2005/05/09(月) 11:59:22ありです
0546デフォルトの名無しさん
2005/05/09(月) 12:19:52wwwおkwwwうはっwwwうはっwwwwっうぇうぇwww
wwwwwwwwwwwwwwwwwwっうぇ
wwwwwwwwwwwwwっうぇっうぇうぇwww
0547デフォルトの名無しさん
2005/05/09(月) 12:29:012.33 1.24
こんなふうに、1行に2つの数が間にスペースをはさみ保存されてて
それが200行ほどあります。配列A[1][1]に一行目の最初の数、
A[1][2]に1行目の2つ目の数のように入れていくには
どうすればよいですか?
0548デフォルトの名無しさん
2005/05/09(月) 12:41:170549デフォルトの名無しさん
2005/05/09(月) 12:44:41for文+fgets()+sscanf()
0550デフォルトの名無しさん
2005/05/09(月) 12:47:150551デフォルトの名無しさん
2005/05/09(月) 13:14:55ググッてもよくわからんかったとです。
具体的なプログラム教えてくれませんか?
0552デフォルトの名無しさん
2005/05/09(月) 13:42:050553デフォルトの名無しさん
2005/05/09(月) 13:42:11> ググッてもよくわからんかったとです。
何がわからなかったんだ?
> 具体的なプログラム教えてくれませんか?
宿題スレに行け。
0554デフォルトの名無しさん
2005/05/09(月) 13:53:13今更新たに関数を作るなんてことしないで
POSIX regex.h の regcomp/regexec/regfree
VSでは標準で入ってないのでGNU Rxを使う
ソース:http://directory.fsf.org/libs/c/rx.html
マニュアル:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/regcomp.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/regexec.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/regfree.3.html
日本語解説とVC用ファイル:http://www.sip.eee.yamaguchi-u.ac.jp/kou/regex.html
>>547
enum{arbital=20,max=200+arbital};float a[max][2];int n;for(n=1;n<max&&sscanf("%f %f",&a[n][0],&a[n][1])>0;n++);n>=max&&exit(EXIT_ERROR);
0555554
2005/05/09(月) 13:54:29>>547
enum{arbital=20,max=200+arbital};float a[max][3];int n;for(n=1;n<max&&sscanf("%f %f",&a[n][1],&a[n][2])>0;n++);n>=max&&exit(EXIT_ERROR);
0556デフォルトの名無しさん
2005/05/09(月) 13:55:48宿題スレに逝って来ます
0557C言語勉強中
2005/05/09(月) 13:55:51その数を別の変数に記憶しておくしか方法はないでしょうか?
例えばですが、、、
<file>
ああ、いい、うう
ええ、おお、かかか、きききき
くくくくくく
・・・・
といった風なファイルを読み、p[0][0] = ああ p[0][1] = いい
p[0][2] = うう p[1][0] = ええ ・・・
といった感じで***pから3次元に動的に確保していったとします。
そこで上の例でいうとp[0]の要素数3、p[1]の要素数4といったものを
取得することは簡単にできるのでしょうか?
0558デフォルトの名無しさん
2005/05/09(月) 13:59:10> p[0]の要素数3、p[1]の要素数4
何故、p[0]が要素数 3 で、p[1]が要素数 4 となる?
あと、型くらい書け。
0559デフォルトの名無しさん
2005/05/09(月) 14:03:42出来ない。
自前で覚えておけ。
0560デフォルトの名無しさん
2005/05/09(月) 14:04:05p[i][j][k]とあったら、p[i]に対するjの要素数を知りたいのです。
iが何行目か。jが"、"の何個目の文字か。kがjの文字配列という形です。
0561C言語勉強中
2005/05/09(月) 14:05:010562デフォルトの名無しさん
2005/05/09(月) 14:06:18多次元配列をよく分かっていない気配
0563デフォルトの名無しさん
2005/05/09(月) 14:08:040564デフォルトの名無しさん
2005/05/09(月) 14:08:53配列である以上、
p[0]の「p[0][0]〜p[0][N]」の数
と、
p[1]の「p[1][0]〜p[1][N]」の数
は、同じでないとおかしい。
0565C言語勉強中
2005/05/09(月) 14:13:03いわれてみればそうですが、malloc等使えばそのNを可変にできますよね?
これがメモリを節約する方法かと思っていたのですが違うんでしょうか?
0566デフォルトの名無しさん
2005/05/09(月) 14:17:080567デフォルトの名無しさん
2005/05/09(月) 14:18:40char **ps;
ps = (char **)malloc(sizeof(char *) * 2);
ps[0] = (char *)malloc(3);
ps[1] = (char *)malloc(2);
strcpy(ps[0], "TT");
strcpy(ps[1], "A");
free(ps[0]);
free(ps[1]);
free(ps);
ってのはアリですよね?
0568デフォルトの名無しさん
2005/05/09(月) 14:32:290569デフォルトの名無しさん
2005/05/09(月) 14:44:00char **ps;
ps = (char **)(1+(size_t*)malloc(sizeof(size_t) + sizeof(char *) * 2));
((size_t*)ps)[-1] = 2;
...
free((size_t*)ps-1);
みたいにすれば配列らしいアクセシビリティを維持しながらメモリも節約できる.
0570デフォルトの名無しさん
2005/05/09(月) 14:47:110571デフォルトの名無しさん
2005/05/09(月) 14:49:06Charポインタ型からChar型に変換するにはどうすればいいんですか?
0572デフォルトの名無しさん
2005/05/09(月) 14:52:07セグメンテーションフォルトになりますが、この時エラー出力をするように
は戻り値のNULL判定をしてやればよいのですか?
また、この時のメモリーにいたずらを施すことができるのか教えてください。
0573テキストボックスの幅
2005/05/09(月) 14:57:00のですが・・
アプリを立ち上げてみるとテキストボックスのプルダウンメニューの
中身が空(空白)になってしまいます。
どなたかテキストボックスの幅を伸ばしてもプルダウンメニューの
表示に影響を及ばさないやり方をご教授していただけないでしょうか。
緊急で困っておりますので宜しくお願いします。
0574C言語勉強中
2005/05/09(月) 14:59:13トリッキーですね、、勉強になります。しかし理解できませんでした。。
((size_t*)ps)[-1] = 2;
なぜこんな代入が可能なのでしょうか??-1というのがどうも理解不能です。
0575デフォルトの名無しさん
2005/05/09(月) 15:07:48幅を倍にしても影響はないし、
テキストボックスにプルダウンメニューはないし、
標準 C にはテキストボックスなどありません。
0576デフォルトの名無しさん
2005/05/09(月) 15:08:25日本語で話して下さい。
0577デフォルトの名無しさん
2005/05/09(月) 15:12:26意味不明。具体的でないとさっぱりわからん。
0578デフォルトの名無しさん
2005/05/09(月) 15:13:25> セグメンテーションフォルトに
なりません。
0579572
2005/05/09(月) 15:15:38勘違いしてました。セグメンテーションフォルトには奈良ないっすね;
0580テキストボックスの幅
2005/05/09(月) 15:53:22C++.netでテキストボックスの幅を二倍にするとプルダウンメニュー
の表示が空になってしまうのです。
0581デフォルトの名無しさん
2005/05/09(月) 16:03:23すいません悪い癖が出てしまいました.
*((size_t*)ps-1) = 2;
の方が適切です.
0582デフォルトの名無しさん
2005/05/09(月) 16:07:22激しくスレ違い。タイトル嫁。
>>579
fgets()の使い方は判ってる?
0583デフォルトの名無しさん
2005/05/09(月) 16:08:45別に((size_t *) ps)[-1]で問題ないと思うが。
Cの[]演算子を理解していないらしい>574にあわせる必要はない。
0584デフォルトの名無しさん
2005/05/09(月) 16:09:20IDEのバグじゃないか?
0585デフォルトの名無しさん
2005/05/09(月) 16:11:56藻前も答えんなや。
0586デフォルトの名無しさん
2005/05/09(月) 16:18:55記述の意味はわかりますが、どうもどこからメモリがあるのかよくわからんです。
-1の位置からメモリ領域がとられているのですか??
例えば・・・
char *p;
p = (char *)malloc(5);
p[0]〜p[4]まで。というイメージなのですが。。
0587デフォルトの名無しさん
2005/05/09(月) 16:24:29#もう一つ見つけた悪い癖
ps = (char **)(1+(size_t*)malloc(sizeof(size_t) + sizeof(char *) * 2));
↓
ps = (char **)((size_t*)malloc(sizeof(size_t) + sizeof(char *) * 2)+1);
#無駄な議論になるからノーコメントで
0588デフォルトの名無しさん
2005/05/09(月) 16:39:16でもコンパイルだけは通るから。。。
0589デフォルトの名無しさん
2005/05/09(月) 16:40:30その認識でよし。
>>587
見にくいし、free() する時も面倒あるし、my_malloc() と my_free() 作ったらどうだ?
0590 ◆Sqi4jGZgn2
2005/05/09(月) 17:45:04printf("\x1b[2J")
と書くと画面が消去される、とあるサイトに書いていたのですが、
やってみると消去されず何か文字が表示されます。
使っているのはBCCです。
何か画面を消去する方法があれば教えてください。
0591デフォルトの名無しさん
2005/05/09(月) 17:47:49どのOSのどの画面を消したいの?
\x1b[2J はANSIエスケープシーケンスの画面消去だな
つか、専用スレ行きじゃないか
0592590
2005/05/09(月) 18:03:280593デフォルトの名無しさん
2005/05/09(月) 18:07:37char *ps[3];
strcpy(p[0], "BBBBBB");
strcpy(p[1], "AAAAAA");
strcpy(p[2], "XXXXXX");
qsort(p, 3, 100, compare);
ps[0] = "BBBBBB";
ps[1] = "AAAAAA";
ps[2] = "XXXXXX";
qsort(ps, 3, sizeof(char *), compare2);
int compare(const void *x,const void *y){
return strcmp((char *)x, (char *)y);
}
int compare2(const void *x,const void *y){
return strcmp(*((char **)x), *((char **)y));
}
比較関数にはいってくる*x,*yが今一つ理解できません。上記2つとも同じように
ダブルポインタが来るように思えて仕方ないのですが。それぞれどういった風に
比較関数に入ってきているのでしょうか?
0594590 ◆Sqi4jGZgn2
2005/05/09(月) 18:07:58これは書き込んだ覚えないんですが・・・
>>591
printf("\x1b[2J") と入力してなるのと同じようにするんです
BCCではできないみたいなので・・・
0595デフォルトの名無しさん
2005/05/09(月) 18:16:02図を書いて考えれ。
# 後、「ダブルポインタ」なんてオレ用語使うな。
>>594
スレ違い
0596デフォルトの名無しさん
2005/05/09(月) 18:21:31開発環境がなんだかわからないけど、統合環境で変数のインスペクトが可能なら
比較関数内にブレーク置いていろいろキャストしてみたりしてアドレスやら値やら見ると
すこしは理解につながるかもね。
>>595
ポインタのポインタでおk?
0597デフォルトの名無しさん
2005/05/09(月) 18:36:07#if sizeof(char) != sizeof(unsigned char)
#error ( ゚Д゚)うごー
#endif
は、ネタなんですか?
sizeof(char) != sizeof(unsigned char) みたいなのはありえるのでしょうか?
524 の人じゃないけど、ぼくもふしぎにおもいました。
0598デフォルトの名無しさん
2005/05/09(月) 18:38:55標準出力でなく<conio.h>の関数で書き込むのでは?
0599デフォルトの名無しさん
2005/05/09(月) 18:39:33うんこ氏ね。
0600590
2005/05/09(月) 18:42:37ありがとうございます
0601デフォルトの名無しさん
2005/05/09(月) 18:44:5698、MeならANSI.SYS組み込んだかどうかでも違ってくるし
0602デフォルトの名無しさん
2005/05/09(月) 18:46:19> 標準入力からfgetsで文字列を受け取る時、指定サイズ以上だったら
> セグメンテーションフォルトになりますが、
前提条件から間違っている。getsとfgetsは別物だ
0603デフォルトの名無しさん
2005/05/09(月) 18:54:460604デフォルトの名無しさん
2005/05/09(月) 19:50:04次
0605デフォルトの名無しさん
2005/05/09(月) 20:22:490606デフォルトの名無しさん
2005/05/09(月) 20:26:27そのネタもう秋田
0607デフォルトの名無しさん
2005/05/09(月) 20:31:160608デフォルトの名無しさん
2005/05/09(月) 20:41:32既出。さようなら。
0609デフォルトの名無しさん
2005/05/09(月) 21:20:040610デフォルトの名無しさん
2005/05/09(月) 21:29:440611馬鹿学生
2005/05/09(月) 21:45:400612デフォルトの名無しさん
2005/05/09(月) 21:47:19{
int a, b, c, printf();
for(a = 1; a <= 10; a++)
for(b = 5; b <= 15; a++)
for(c = 10; c >= 1; --c)
printf("%d %d %d\n", a, b, c);
}
0613デフォルトの名無しさん
2005/05/09(月) 21:50:40就職面接で、「ダブルポインタなら判りますけどトリプルポインタは自信がありません」と答えた香具師もいる。
要は、ポインタを理解していない連中が、わかった気になるためのおまじない。
0614デフォルトの名無しさん
2005/05/09(月) 21:56:09確か循環リストの話だったような・・・
0615デフォルトの名無しさん
2005/05/09(月) 22:00:19某Lisp言語仕様書に載ってる関数に基づいて
Cのコード書いたんだけど、召されませんですた。
0616デフォルトの名無しさん
2005/05/09(月) 22:34:320617デフォルトの名無しさん
2005/05/09(月) 22:55:440618デフォルトの名無しさん
2005/05/09(月) 22:57:540619デフォルトの名無しさん
2005/05/09(月) 23:22:400620デフォルトの名無しさん
2005/05/09(月) 23:40:40と ) | |
Y /ノ 人
/ ) < >__∧∩
_/し' //. V`Д´)/
(_フ彡 / ←>>619
0621デフォルトの名無しさん
2005/05/10(火) 00:01:40int main(void)
{
char *pc="abcd";
char **ppc=&pc;
printf("%s",**ppc);
return(0);
}
「pc」には文字列のアドレスが入っていて、
「ppc」には「pc」のアドレスが入っているのは間違いないですよね?
なぜこれを実行してもエラーがでてしまうのでしょうか、
**ppcとはppcの中身の中身なのだから、abcdが表示されるように思えるのですが…。
0622デフォルトの名無しさん
2005/05/10(火) 00:07:53pcを表示するためには
printf("%s",pc);
なんだから(これが分からなければ出直しといで)、
printf("%s",*ppc);
0623デフォルトの名無しさん
2005/05/10(火) 00:25:50にこいじょうつながないで、わからなくなるから
0624デフォルトの名無しさん
2005/05/10(火) 00:44:21URLとURLが指し示すHTMLの関係を良く考えろ
0625デフォルトの名無しさん
2005/05/10(火) 00:51:340626デフォルトの名無しさん
2005/05/10(火) 01:05:09if( hoge==1 & foo==0 & bar!=5 ){
//ニャホニャホ
}
0627デフォルトの名無しさん
2005/05/10(火) 01:08:28条件次第
0628デフォルトの名無しさん
2005/05/10(火) 01:19:48というと?
0629デフォルトの名無しさん
2005/05/10(火) 01:20:51条件が真になる可能性が高いならスケジューリングしやすい分速くなるんだっけ
0630デフォルトの名無しさん
2005/05/10(火) 01:31:01if(条件式&条件&条…) {}
のように全てが条件式(例外もあるが…)で全ての式を評価しても良いならOK
0631デフォルトの名無しさん
2005/05/10(火) 01:43:17本を読んでも条件式の中では条件演算子を使うとしか書いてなかったので知らなかったよ
で、速さ以外は特に違いはないの?
速さの違いは
全部の式を評価してから分岐するのが論理演算子、
条件が不成立したら全部評価する前に分岐してしまうのが条件演算子
ということでOK?
0632デフォルトの名無しさん
2005/05/10(火) 01:53:32>論理演算子と条件演算子を使った場合の違い
bit演算(&)を行うか、論理演算(&&)を行うかの違い
&は、論理演算ではないし、&&は条件塩山市ではないので注意
0633デフォルトの名無しさん
2005/05/10(火) 04:53:51全ての式を評価するか否かにより「速さ」が変わることよりもむしろ、
「実行結果」自体が変わり得ることに気をつけたほうがいい。
というかそもそもビット演算子を論理演算子の代わりに
使うってのが間違ってるんだが。(用語は>>632を参照)
// @挙動が変わる例
bool a=false;
bool b(){ printf("unko"); return false; }
if(a && b()){ //unkoは表示されない
//実行されない
}
if(a & b()){ //unkoが表示される
//実行されない
}
// @判定自体が変わる例
int f(){ return 1; } //nonzeroを返してるつもり
int g(){ return 2; } //nonzeroを返してるつもり
if(f() && g()){ // true && true → true
//実行される
}
if(f() & g()){ // 1 & 2 → 0 → false
//実行されない
}
「&&」と「&」の見た目が似てるから互いに代用が利くように
見えるのかもしれないけど、「&」や「|」は「&&」や「||」よりも
むしろ「+」とか「*」に近い分類の演算子だよ。
君の質問は、
「if(a || b)の代わりにif(a + b)でもいいですか?」
に似たようなものなのです。(オーバーフローしない限りはこれもアリのこともあるが)
0634デフォルトの名無しさん
2005/05/10(火) 06:07:57int main(int argc, char* argv[])
{
char buf[4];/*念の為*/
for (; ;)
{
read(0,buf,1); /*←不明。*/
putchar((int)*buf);
write(1,buf,1);
}/*CTRL+Cで終了*/
return 0;
}
0635デフォルトの名無しさん
2005/05/10(火) 06:36:09#include <unistd.h>
read(STDIN_FILENO,buf,1);
write(STDOUT_FILENO,buf,1);
0636デフォルトの名無しさん
2005/05/10(火) 08:49:00は、ありませんか?
0637デフォルトの名無しさん
2005/05/10(火) 09:01:270638デフォルトの名無しさん
2005/05/10(火) 09:12:51スレ違い
0639539
2005/05/10(火) 11:52:25ご丁寧にありがとうございました。
これでできそうです。
助かりました。
0640デフォルトの名無しさん
2005/05/10(火) 12:56:21とか言ってみるテスト
0641デフォルトの名無しさん
2005/05/10(火) 13:21:40unistd.hなら半標準じゃね?知らんけど
0642デフォルトの名無しさん
2005/05/10(火) 13:39:13出先だから規格票持ってねーぜ、ヒャッハー(^Д^)
0643デフォルトの名無しさん
2005/05/10(火) 18:14:580644デフォルトの名無しさん
2005/05/10(火) 18:19:030645デフォルトの名無しさん
2005/05/10(火) 18:19:580646デフォルトの名無しさん
2005/05/10(火) 20:04:01//はできたのですけど、
/* */の削除がわからないです。
/*
*
*/
と行をはさむ場合の削除方法がわかりません。
どなたかご教授願います。
//の削除プログラムは載せておきます。
よろしくお願いします。
//の削除プログラム
while (fgets(string_buf, SIZE, filep_in) != NULL)
{
// //があったとき一つ目の/まで読み込みを繰り返す。
for (i = 0; string_buf[i] != '/' || string_buf[i + 1] != '/'; i ++)
{
//改行になったらfor文のループを抜ける
if (string_buf[i] == '\n')
break;
}
// //のある場所の一つ目の/に改行をいれる。二つ目の/以降は読み込まない。
strcpy(string_buf + i, "\n");
}
0647デフォルトの名無しさん
2005/05/10(火) 20:09:42ぼるじょあがC/C++の宿題を片づけますYO! 42代目
http://pc8.2ch.net/test/read.cgi/tech/1113811213/
0648デフォルトの名無しさん
2005/05/10(火) 20:11:34非標準
0649デフォルトの名無しさん
2005/05/10(火) 20:15:29クオートされた部分を除外しないと
0650デフォルトの名無しさん
2005/05/10(火) 20:48:07先頭から一文字ずつ見ていって、
/*が来たらコメント開始。
*/が来たらコメント終了。
ただし、文字列の中では無視。
0651デフォルトの名無しさん
2005/05/10(火) 20:57:21全部いっぺんにやろうとするから辛くなるんだよ
本物のコンパイラだって、プリプロセッサ→パーサ→コードジェネレータ→リンカみたいに流れ作業してるだろ
その問題の意図は鉄砲玉みたいなやり方の矯正だったりしないか?
0652デフォルトの名無しさん
2005/05/10(火) 21:07:55gcc -E
じゃ駄目か? #defineも展開されるけど...
0653デフォルトの名無しさん
2005/05/10(火) 21:08:46遷移図?ぐらい書けるだろうよ
0654デフォルトの名無しさん
2005/05/10(火) 21:09:190655デフォルトの名無しさん
2005/05/10(火) 21:12:55/__ \
| | | |
(_) (__)
0656デフォルトの名無しさん
2005/05/10(火) 21:15:11fgets ではなく fgetc な
0657デフォルトの名無しさん
2005/05/10(火) 22:43:070658464
2005/05/10(火) 22:49:35スキルアップのつもりで考えたんですけど
ちっとまだ知識が足りないみたいっす。
状態繊維とかいみわからないっす。
0660デフォルトの名無しさん
2005/05/11(水) 00:46:190661デフォルトの名無しさん
2005/05/11(水) 01:52:28unsigned long U, u1, u2;
u1 = 0x00000009;
u2 = 0xFFFFFFFF;
U = u1 + u2;
unsigned はオーバーフローしないということなので
これが 0x00000008 になるのは理解できましたが,
U = u1 - u2;
これで U が 0x00000010 になるのが直感的にわかりません.
0x00000009 - 0xFFFFFFFF が
0x00000009 + 0x00000001 になっている?
0662デフォルトの名無しさん
2005/05/11(水) 01:54:370663デフォルトの名無しさん
2005/05/11(水) 02:13:400664デフォルトの名無しさん
2005/05/11(水) 02:58:36main()
のように関数名を行頭にするスタイルはなんていうんですか?
0665デフォルトの名無しさん
2005/05/11(水) 03:02:14>1も理解できないなら人間止めた方がいいよ。
>>661
0xffffffffを引くことは即ち-1を引くこと。したがって、+1になる。
よって、0xa。
#アンダーフローしているわけだね。
0666デフォルトの名無しさん
2005/05/11(水) 03:46:41非常に簡単だから自分で作ったら良いと思う.
0667デフォルトの名無しさん
2005/05/11(水) 10:05:50検算してごらん
0668デフォルトの名無しさん
2005/05/11(水) 10:24:14> unsigned はオーバーフローしないということなので
いや、するぞ。
0670デフォルトの名無しさん
2005/05/11(水) 10:26:020671デフォルトの名無しさん
2005/05/11(水) 10:34:200672デフォルトの名無しさん
2005/05/11(水) 10:37:310673デフォルトの名無しさん
2005/05/11(水) 11:06:07K&Rの第二版のサンプルプログラムをコンパイルすると、
main()関数は値を返すべき、とエラーメッセージが出ます。
これはreturn文が無いからだとは分かるのですが、
main()関数へreturn文の記述必要性がわかりません。
(どの関数に呼び出されている訳でもないので)
どなたか説明御願いします。
0674デフォルトの名無しさん
2005/05/11(水) 11:07:18unsignedは恥メッカら(最大値+1)を法とする算術規則に従うって仕様で決まってるんだから
最大値を超えたときに剰余をとるのはオーバーフローじゃない
0675デフォルトの名無しさん
2005/05/11(水) 11:14:59でもオーバーフローって言った方が分かりやすいよな
>>673
mainの戻り値はexit()に渡される引数と同じ。
んで、exit()は、システムにプログラムの正常終了、異常終了(っていうのか?)を知らせる。
0676デフォルトの名無しさん
2005/05/11(水) 11:16:26そのメッセージは
エラーでなくて警告で
main()はint型を返す
型を省略すると勝手にint型を返す、
return文を省略すると、適当な値を返す
ということになっていて、
戻り値は、そのプログラムをfork() && exec()した
ttyの親プロセスである、shが参照
せつめい、おわり
0677デフォルトの名無しさん
2005/05/11(水) 11:16:49スタートアップルーチンがmainを呼んでいる
が、エラーにはならんでしょ(ウォーニングは出るかも)
intで宣言してんじゃないの?
0678デフォルトの名無しさん
2005/05/11(水) 11:20:32よくわかりました。ありがとうございます。
読み返したら日本語が大分間違ってました・・・
エラーが出たのではなく、警告が出た、でした。
0679デフォルトの名無しさん
2005/05/11(水) 15:49:49現在では型を省略することは出来ない。
0680デフォルトの名無しさん
2005/05/11(水) 15:52:53最後の段の説明は一部のOSに特化している。
戻り値を親プロセスが参照する義務はないし、実際全く参照しないコマンドインタプリタもある。
逆に、0以外を返されると警告を出すコマンドインタプリタもある。
0681デフォルトの名無しさん
2005/05/11(水) 16:43:28下のコードを実行して c:\test フォルダ内のファイルの内容を変更すると
メッセージボックスが二回表示されてしまいます。
変更は一回しかしていないのに二回でてしまうのですが
ここまでコードを短くしても出るので行き詰まってしまいました
二回検知してしまう動作が正しいのでしょうか?
どこかおかしくて二回出てしまうのならばご指摘お願いします。
HANDLE hFind = FindFirstChangeNotification( "C:\\test\0", FALSE, FILE_NOTIFY_CHANGE_SIZE );
if( hFind == INVALID_HANDLE_VALUE )
return;
while( 1 )
{
DWORD ret = WaitForSingleObject( hFind , INFINITE );
if( ret == WAIT_OBJECT_0 )
{
MessageBox( NULL, "TEST", "Changed!", MB_OK );
if( FindNextChangeNotification( hFind ) == 0 )
return;
}
}
FindCloseChangeNotification( hFind );
0682デフォルトの名無しさん
2005/05/11(水) 16:49:05どうやって書くのですか?どなたか教えてください
0683デフォルトの名無しさん
2005/05/11(水) 16:50:22srand(time(NULL));
0684デフォルトの名無しさん
2005/05/11(水) 16:51:51srand(clock());
0685デフォルトの名無しさん
2005/05/11(水) 16:52:53スレ違い
Win32API スレ逝け
0686681
2005/05/11(水) 16:56:57なので私の質問は閉じます
0687682
2005/05/11(水) 16:57:58どちらの方も有難うございます。どっちが正解なのかな・・・
両方使えるってことですかね
0688デフォルトの名無しさん
2005/05/11(水) 17:02:01for( i = 0; i < 10000; i++ ){
……
*(pbuf + i) = c;
}
といった処理があるんですが、この10000が4294967295より大きくなってしまったとき
どうすればいいかわかりません
単純にiをdoubleにしても「ポインタに整数でない値を加えようとしました」エラーに
なってしまいます
0689デフォルトの名無しさん
2005/05/11(水) 17:31:17そういう値を受け入れることが出来る型でiを定義する。
0690デフォルトの名無しさん
2005/05/11(水) 17:33:33越えられない
0691デフォルトの名無しさん
2005/05/11(水) 17:33:410692デフォルトの名無しさん
2005/05/11(水) 17:33:42あなたの使っているコンピュータでは多分 4294967295 より大きくなってしまったとき
に malloc() が失敗します。
0693デフォルトの名無しさん
2005/05/11(水) 19:42:53例えば i に(unsigned )long long intとかを使う。
そもそもそんな環境でそれだけのメモリを確保できるかどうかは疑問だが。
ところでさ、pbuf[i]って書こうよ。
0694デフォルトの名無しさん
2005/05/11(水) 20:20:56スタイルの強要はやめていただきたい
0695デフォルトの名無しさん
2005/05/11(水) 20:37:200x30を引く方法って一般的な方法でしょうか?
それとも他に何かありますか?
0696デフォルトの名無しさん
2005/05/11(水) 20:39:37よく見る。
c - 0x30 よりは c - '0' のほうが分かりやすい。
0697デフォルトの名無しさん
2005/05/11(水) 20:54:100698デフォルトの名無しさん
2005/05/11(水) 20:54:490699デフォルトの名無しさん
2005/05/11(水) 21:00:14○bitCPUが扱えるメモリは(仮想メモリ含めて)そのビット数で表現できる値までなのでそういうくだらない心配をする必要は無い
0700デフォルトの名無しさん
2005/05/11(水) 21:47:21GNU Coding Standard
0701デフォルトの名無しさん
2005/05/11(水) 21:52:000702デフォルトの名無しさん
2005/05/11(水) 21:53:488086
0703デフォルトの名無しさん
2005/05/11(水) 22:03:550704デフォルトの名無しさん
2005/05/11(水) 22:45:55おっ、名言が生まれたよ
0705デフォルトの名無しさん
2005/05/11(水) 23:08:57int sum;
for(int i=0; i < 12; i++) { sum = sum + mozi[i]; }
このようにすれば変数moziの1バイトごとの合計値は求めれると思うのですが
2バイトごとに求めるにはどうしたらいいでしょうか?教えてくださいお願いします。
0706デフォルトの名無しさん
2005/05/11(水) 23:12:420707デフォルトの名無しさん
2005/05/11(水) 23:13:590708デフォルトの名無しさん
2005/05/11(水) 23:22:55switchは遅いという情報を見つけました。
ifで表現したら速くなりますか?
0709デフォルトの名無しさん
2005/05/11(水) 23:23:45(スレ違い気味だが) データ幅とアドレス幅は無関係。
0710デフォルトの名無しさん
2005/05/11(水) 23:26:16君が気にする程違うわけでもなし、
気にしないといけない程
クリティカルなプログラムも書かないだろうし、
何よりコンパイラのオプティマイザに任せた方が
余程いい結果が得られる。
0711デフォルトの名無しさん
2005/05/11(水) 23:27:48良くない設計の兆候。まずは設計を見直せ。
0712デフォルトの名無しさん
2005/05/11(水) 23:40:45char buf[...];
int n=0;
switch(buf[i]){
case 'b':
i++;
switch(buf[i]){
case 'a':
i++;
switch(buf[i]){
case 'k':
i++;
switc(buf[i]){
case 'a':
i++;
return;
}
}
}
}
みたいなコードに出会ったことあるYO。久々に殺意を覚えた。
0713デフォルトの名無しさん
2005/05/11(水) 23:41:100714デフォルトの名無しさん
2005/05/11(水) 23:42:02switchをジャンプテーブルに変換してくれるコンパイラならifより速い
0715デフォルトの名無しさん
2005/05/11(水) 23:49:472バイト単位で見ていけばいいだけだろ。
基本的なロジックは変わらない。
データが奇数バイトの時にどうするか?に気をつけれよ。
0716デフォルトの名無しさん
2005/05/11(水) 23:56:24亀っぽいけど、乱数発生関数(俺も内容よくわからん)
#define MULT 25173
#define MODU 65535L
#define INCR 13849
#define FLMO 65536.0
double crand(void);
static long seed;
double crand()
{
seed = (MULT * seed +INCR ) % MODU;
return ( seed / FLMO );
}
確か図書館で借りた本(C言語Q&Aだったかな?忘れた。16bit
期の本だった。読み応えはまあまあ)にのってたやつ(だとおもう)。
整数値だけ用いるように改造してたりもしたんだが、混乱して
やめちゃって放置してた、、、偏りがないかとかも測ってない。
っていうかこれも俺が(既に)変にいじった後のものかも、、、。
0717デフォルトの名無しさん
2005/05/11(水) 23:56:45あぁ?カスがでしゃばってんじぇねぇよボケ。こっちはビットシフトしたり
2バイト確保した別の配列に入れて試したりしてんだよ低脳
0718デフォルトの名無しさん
2005/05/11(水) 23:57:44線形合同法。いまいちなやつだね。
0719705
2005/05/12(木) 00:17:120720デフォルトの名無しさん
2005/05/12(木) 00:28:24バカほど口がお達者な様で。
0721デフォルトの名無しさん
2005/05/12(木) 00:31:460722デフォルトの名無しさん
2005/05/12(木) 00:39:070723705
2005/05/12(木) 00:41:310724デフォルトの名無しさん
2005/05/12(木) 00:42:250xC0000005: Access Violationが出てしまいます。
VC6.0でコンパイルもうまくできるのですが、なぜこんなエラーが出てしまうのかわかりません。
どなたか教えてください。
#include<stdio.h>
#include<stdlib.h>
void AllocMem(int* a);
int main(){
int *a;
AllocMem(a);
printf("%d\n",*a);
return 0;
}
void AllocMem(int* a){
a=(int*)malloc(sizeof(int));
*a=10;
}
0725デフォルトの名無しさん
2005/05/12(木) 00:50:32それではAllocMem内でmallocしたアドレスは呼び出し元には返らない
0726デフォルトの名無しさん
2005/05/12(木) 00:56:02#include<stdio.h>
#include<stdlib.h>
void AllocMem(int** a);
void FreeMem(int** a);
int main(){
int *a;
AllocMem(&a);
printf("%d\n",*a);
FreeMem(&a);
return 0;
}
void AllocMem(int** a){
*a = (int*)malloc(sizeof(int));
**a = 10;
}
void FreeMem(int** a){
free(*a);
}
0728デフォルトの名無しさん
2005/05/12(木) 01:50:55教えてください。
例
01,aaa,090-****-****
02,bbb,090-****-****
03,ase,02-***-***
04,afe,023-***-***
このときに3番を消したら
4が3になり、データを上書きするプログラムがわかりません。
教えてください。
データはCSV形式で保存してあります。
お願いします。
0729デフォルトの名無しさん
2005/05/12(木) 01:54:22いったん別のファイルにバックアップして
元のファイルをまっさらに
バックアップから消したい行以外を書き出す
0730デフォルトの名無しさん
2005/05/12(木) 01:56:49バックアップいらなくなったら忘れずに消しとけ
0731デフォルトの名無しさん
2005/05/12(木) 01:56:59system("sed -e 3d your.csv > temp; mv temp your.csv");
0732デフォルトの名無しさん
2005/05/12(木) 03:05:09rand() % 6
として何か不都合があるのですか?
このやり方は良くないという記述を見かけたもので気になってます。
0733デフォルトの名無しさん
2005/05/12(木) 03:21:13rand()とsrand()の Linux C Library 版は random()とsrandom() のふたつの関
数 と同じ乱数生成のアルゴリズムを使用している。そのため、下位のビットは
上位のビットと同じくらいにランダムである。しかし旧版の rand() の 実 装
は、下位のビットが上位のビットほどランダムになってはいない。
Numerical Recipes in C: The Art of Scientific Computing (William H.
Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New
York: Cambridge University Press, 1992 (2nd ed., p. 277)) では、次のよ
うなコメントがなされている。
「1 と 10 の間の乱数を生成したいのであれば、常に
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
のように上位ビットを用いること。
j=1+(rand() % 10);
のような、下位のビットを用いるような方法は一切止めること。」
乱数の生成は複雑な話題である。前述の Numerical Recipes in C でも実用 的
な乱数生成を論点とした優れた議論を第 7 章(乱数)で展開している。
よ り理論的な議論については Donald E. Knuth の The Art of Computer Pro-
gramming, volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Mas-
sachusetts: Addison-Wesley Publishing Company, 1981 の第 3 章(乱数)を見
よ。これは、たくさんの実用的な話題についても深く網羅している。
0734デフォルトの名無しさん
2005/05/12(木) 03:38:55昔は不都合があることが多かった。
今でも、不都合があるシステムがあるかもしれないが、
そういう場合は大抵注意書きされてる。
0735デフォルトの名無しさん
2005/05/12(木) 03:42:55% の剰余計算だけでも何ら不都合はないのですね?
0736デフォルトの名無しさん
2005/05/12(木) 03:43:47これがメルセンヌツイスタに変わる日が来るのだろうか。
0737デフォルトの名無しさん
2005/05/12(木) 03:44:55問題ない。
0738デフォルトの名無しさん
2005/05/12(木) 09:18:17rand()の値域が0-32767だと6の剰余では均等にならないだろうが。
RAND_MAXが充分大きければ目立たなくなるかもしれないが。
0739デフォルトの名無しさん
2005/05/12(木) 09:58:560740デフォルトの名無しさん
2005/05/12(木) 12:06:180741デフォルトの名無しさん
2005/05/12(木) 12:15:150742デフォルトの名無しさん
2005/05/12(木) 12:32:170743デフォルトの名無しさん
2005/05/12(木) 12:42:060744デフォルトの名無しさん
2005/05/12(木) 15:03:36コードの連続性については数字だけは言語仕様で保証されている
0745デフォルトの名無しさん
2005/05/12(木) 15:12:27させることでその辺の問題をクリアするためなんじゃないかと思ってみたり。
j=1+(int) (10.0*rand()/(RAND_MAX+1.0)); とするのに何のためらいがあるんだろう。
0746デフォルトの名無しさん
2005/05/12(木) 15:19:130747デフォルトの名無しさん
2005/05/12(木) 15:29:04でも、それやったところで、結局は均等にはならないよね?
どうやったら均等になるかな?
やっぱり、ダイスみたいに振り直し法を使うしかないのかな?
0748デフォルトの名無しさん
2005/05/12(木) 15:30:010749デフォルトの名無しさん
2005/05/12(木) 15:34:460750デフォルトの名無しさん
2005/05/12(木) 15:39:1710個の値がほしければ、0〜9までの配列用意して連番を入れ、シャッフルして先頭から取り出していく
それがランダムかと言われたら疑問だが。
0751デフォルトの名無しさん
2005/05/12(木) 15:57:34そこで
double drand48(void);
ですよ。
0752デフォルトの名無しさん
2005/05/12(木) 16:19:13そこで、例えば 0〜5 の乱数を求めるなら、
まず、0〜7 の乱数を求め、その値が 6 又は 7 だったら
その結果を捨て、再度乱数を求めればよい。
0753デフォルトの名無しさん
2005/05/12(木) 19:40:150754Cかなり初心者の名無し
2005/05/12(木) 23:01:14それともソフトなどを購入してやるものなんですか?
0755デフォルトの名無しさん
2005/05/12(木) 23:02:330756デフォルトの名無しさん
2005/05/12(木) 23:04:040757デフォルトの名無しさん
2005/05/12(木) 23:07:30スレ違い。C++初心者スレにでも行け。
0758デフォルトの名無しさん
2005/05/12(木) 23:28:32小数点系の乱数はそのへんクリアして内科医?
0759デフォルトの名無しさん
2005/05/12(木) 23:56:330760デフォルトの名無しさん
2005/05/13(金) 00:09:330761デフォルトの名無しさん
2005/05/13(金) 00:12:22どなたかご教示ください。
0762デフォルトの名無しさん
2005/05/13(金) 00:34:28m回以上連続で同じ目が出る確率が低くなり、
n回以上連続で同じ目が出る確率が0に、、、
というふうになるの?
どう違うか計算しようかと思ったが今の俺の頭で
は無理そうだな。
無視できる程度の違いだとも思えるけど、
0763ヽ(´ー`)ノ ◆.ogCuANUcE
2005/05/13(金) 00:51:46例えば、何かしらの方法で C のソースを生成する時とか。
-- hello.c.tmpl
printf("hello world\n");
から
-- hello.c
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
なソースを生成する時に、
-- hello.c
#include <stdio.h>
int main() {
#line "hello.c.tmpl" 1
printf("hello world\n");
#line "hello.c" 7
return 0;
}
とかやると、人間の可読性は落ちるけど、C のソースをコンパイルした時に
元となった hello.c.tmpl のどこで間違ってるか分かるわな。
普通に C でコード書いてる分にはあまりお世話にならんね。
cpp の結果で出てくるぐらいじゃないかな。
0764デフォルトの名無しさん
2005/05/13(金) 02:03:35親切
0765デフォルトの名無しさん
2005/05/13(金) 02:50:51unsigned char に置き換えて考えると
unsigned char u1 = 0x05, u2 = 0xFF;
u1 + u2 これは 5 + 255 = 260
CHAR_MAX が 255 なので 260 % (255 + 1) で 4 (0x04) ですよね
では, u1 - u2 つまり 0x05 - 0xFF をどう計算すると 0x06 になるのか
が直感的に分からないのです
>>665 (ちょっと変えています)
>0xffを引くことは即ち-1を引くこと。
まさにここがよく分かりません
これは signed の計算方法ではないのですか?
0766デフォルトの名無しさん
2005/05/13(金) 03:19:170 0101 = 5
0 1111 = F
--------------
1 0110
となって、答えは1 0110。
ただし、4bit分しか表現できないので、最上位ビットの1が消えて
0110 = 6
が計算結果となる。
0767デフォルトの名無しさん
2005/05/13(金) 03:24:08まずunsignedで0x05-0x06をやってみて、次に0x05-0x07、0x05-0x08・・・としていくと0x05-0xFFがどうなるか想像つかない?
0768デフォルトの名無しさん
2005/05/13(金) 08:10:190769デフォルトの名無しさん
2005/05/13(金) 08:13:082の補数で数直線を書いてみるといいよ
0770デフォルトの名無しさん
2005/05/13(金) 08:23:450771デフォルトの名無しさん
2005/05/13(金) 09:09:50アセンブラならCPUによってはそういうのを知らせるフラグなんかがあるからそれを見ればいいんだろうけど
C言語だとそんなの聞いたこと無いしなぁ・・・
0772デフォルトの名無しさん
2005/05/13(金) 09:40:13無いCPUもあるの?
0773デフォルトの名無しさん
2005/05/13(金) 09:45:33知らないけどあったら嫌だから念のためw
0774770だけど
2005/05/13(金) 10:30:52負 + 負 で正になる。
で正解ですか?
0775デフォルトの名無しさん
2005/05/13(金) 10:41:45main()
{
int c, i, nwhite, nother;int ndigit[10];nwhite = nother =0;
for (i = 0; i < 10; ++i) ndigit[i] =0;
while ((c = getchar()) != EOF) {
if (c >= '0' && c <= '9') ++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t') ++nwhite;
else ++nother;
}
printf("digits =");
for (i = 0; i < 10; ++i) printf(" %d, ", ndigit[i]);
printf("white space =%d, other = %d\n", nwhite, nother);
}
K&Rにある入力した文字を、数字、空白文字、
その他に分けてそれぞれをカウントするプログラムなのですが、
if (c >= '0' && c <= '9') の部分で数字あるかどうか判定し、
++ndigit[c-'0'];のc - '0'でその数値を求めると説明にありますが、
いまいちよく飲み込めません。
if (c >= '0' && c <= '9')は「文字コード49以上かつ57以下であれば」を示すのでしょうか?
c - '0'はサッパリ分かりません。
どなたか宜しく御願いします。
0776デフォルトの名無しさん
2005/05/13(金) 10:47:26cが '9' のとき、 c - '9' は 9 になるわけだ
0777デフォルトの名無しさん
2005/05/13(金) 10:47:51だった・・・
0778デフォルトの名無しさん
2005/05/13(金) 10:52:55C言語以外、たとえば人間関係とかなら正解
0779デフォルトの名無しさん
2005/05/13(金) 11:41:39ブロックくずしなどのゲームを作れるようになりたいのですが
どうしたらよいでしょうか?
オススメの参考書や学習セットみたいなのがあるのならば
教えていただきたいです。
宜しくお願いします。
0780デフォルトの名無しさん
2005/05/13(金) 12:30:11>>1 も読めないような奴には教えられない。
0781デフォルトの名無しさん
2005/05/13(金) 12:39:58スレ違い
0782デフォルトの名無しさん
2005/05/13(金) 12:41:19そうか?
0783デフォルトの名無しさん
2005/05/13(金) 12:45:13どうしたらいいかを決定するのは>>779だし、
参考書などの紹介をするスレでもない。
Cに関わる質問も出ていない。
どこに、このスレに該当する項目がある?
0784デフォルトの名無しさん
2005/05/13(金) 12:50:090785デフォルトの名無しさん
2005/05/13(金) 12:52:01確かにCと指定はしてないんで、rubyで作ろうとしてるのかもしれないけど。
0786デフォルトの名無しさん
2005/05/13(金) 12:55:15基底クラスからそれを禁止する方法ってないものでしょうか。
コメントに書いておけばいいのかな…。
0787デフォルトの名無しさん
2005/05/13(金) 12:58:07だから推薦図書スレでも言ってそこで聞けやボケってことだろ?
なんで理解できないの?
0788デフォルトの名無しさん
2005/05/13(金) 13:00:02スレ違い
0789デフォルトの名無しさん
2005/05/13(金) 13:54:390790デフォルトの名無しさん
2005/05/13(金) 13:57:440791デフォルトの名無しさん
2005/05/13(金) 14:11:53#define IN 1
#define OUT 0
main()
{
char c; int i, state; int na, nn[19], nm[19];
na = i = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t' || c == '\n')state = OUT;
else state = IN;
if (state == IN) na++;
else if (state == OUT) {(nn[na])++ ; na = 0;}
}
printf("単語の文字数 度数 累積度数 累積比率\n");
for (i=0; i>=19; i++) nm[i] = nm[i] + nn[i];
i=1;
while (i>=19) {
printf("%d %d %d %3.2f\n", i, nn[i], nm[i], nn[i]/nm[19]);
i++;
}
return 0;
}
一度目のwhileループ後がうまく動きません。
修正箇所ありましたら教えてください
0792デフォルトの名無しさん
2005/05/13(金) 14:15:20i=1;
while (i>=19)
これは whike 素通りするよな
0793デフォルトの名無しさん
2005/05/13(金) 14:19:41ほんとだ…その点も含めて軽く修正してみました
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
char c; int i = 0, state; int na, nn[19], nm[19];
while (i<=19){
nn[i] = 0; nm[i] = 0;
i++;
}
na = i = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t' || c == '\n')state = OUT;
else state = IN;
if (state == IN) na++;
else if (state == OUT) {(nn[na])++ ; na = 0;}
}
printf("単語の文字数 度数 累積度数 累積比率\n");
for (i=0; i<=19; i++) nm[i] = nm[i] + nn[i];
i=1;
while (i<=19) {
printf("%d %d %d %3.2f\n", i, nn[i], nm[i], nn[i]/nm[19]); i++;
}
return 0;
}
0794デフォルトの名無しさん
2005/05/13(金) 14:21:580から19って要素数いくつあるよ
nn[19], nm[19]; は、0から18までの19個しか使えないぞ
0795791
2005/05/13(金) 14:36:58ありがとうございました
0796デフォルトの名無しさん
2005/05/13(金) 14:40:45>>793の意図している事は、19個使う事かもしれない
>i=1;
>while (i<=19) {
他の所が間違えてる可能性もあり
0797デフォルトの名無しさん
2005/05/13(金) 14:42:20イルに出力するプログラムを作成せよ.
(規則1):5文字以上の単語を全て大文字にする.
(規則2):"the"という単語を()で囲む(The -> (The))
A color scheme is one of the important elements when considering a design of
Web contents such as illustrations. However, since the explicit rule which
determines a color scheme does not exist, the inexperienced user has to proceed
the design work by repeating trial and error.
初心者な俺には超分かりません どうすりゃいいんですか?
0798デフォルトの名無しさん
2005/05/13(金) 14:51:26それが五文字以上だったら大文字で、未満ならそのまま出力、
をファイル終端まで繰り返す。
theは文章のままだな
0799デフォルトの名無しさん
2005/05/13(金) 15:38:46ありがとうございました。
0800デフォルトの名無しさん
2005/05/13(金) 15:45:350801デフォルトの名無しさん
2005/05/13(金) 15:46:22Cではなく、sed, perlの方が楽かも知れない
0802デフォルトの名無しさん
2005/05/13(金) 15:55:14(指定した点の画素の画素値)/2より大きければ白、小さければ黒にして、一度黒が出た時点でそこ以降の周りは、全部黒にしたいんですけど下のプログラムではできません><。訂正お願いします。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define USAGE "usage: program input-filename width height output-filename\n "
#define x 258 /*目的位置を入力(x)*/
#define y 213 /*目的位置を入力(y)*/
void tra4(unsigned char *in, unsigned char *out, int width, int height)
{int i; int j; int h; int k,l,m,n;k = x-1;
l = x+1;m = y-1;n = y+1;
out[(y-1)*width+x] = 255;
/*第2象限k*/
for(i=0;i<k;i++){
for(j=0;j<y;j++)
{
if ((in[(y-1)*width+x])/2 < in[(y-j-1)*width+(k-i)] )
{
out[(y-j)*width+(k-i)] = 255;
}
else
{
for(h=0;h<(y-j-1);h++)
{
out[(y-j-h-1)*width+(k-i)] = 0;
}}}}
一部を書きました
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
2005/05/13(金) 17:01:470805デフォルトの名無しさん
2005/05/13(金) 17:03:310806デフォルトの名無しさん
2005/05/13(金) 17:03:33'0'を引く。
0807デフォルトの名無しさん
2005/05/13(金) 17:06:49変換したい元のcharの内容による。
5→5なら>>805
'5'→5なら>>806
0808804
2005/05/13(金) 17:10:55ありがとうございました
0809デフォルトの名無しさん
2005/05/13(金) 17:13:090810805
2005/05/13(金) 17:24:00つーか、この内容を質問する奴はいないだろ。
0811デフォルトの名無しさん
2005/05/13(金) 17:39:59数字 ≠ 数値
数「字」
0812デフォルトの名無しさん
2005/05/13(金) 17:41:05んじゃ>>806の方だな
0813デフォルトの名無しさん
2005/05/13(金) 22:17:50Enterを押す必要がなく、あるキーを押した瞬間にその値を使うことはCで可能ですか?
できればその方法がしりたいです。
0814デフォルトの名無しさん
2005/05/13(金) 22:24:25プラットフォームによるンじゃないか?
0815デフォルトの名無しさん
2005/05/13(金) 22:41:54各処理系の板なりスレなりへGo!
0816デフォルトの名無しさん
2005/05/13(金) 22:48:28遅いんですか?
0817デフォルトの名無しさん
2005/05/13(金) 22:49:35本当に速さが必要ならアセンブラでもやってろ
0818デフォルトの名無しさん
2005/05/13(金) 23:51:58自分が答えられないから何でもスレ違いと決め付ける厨房です。
0819デフォルトの名無しさん
2005/05/14(土) 00:00:02自慢するスレに何を期待しているんですかぁ?
0820デフォルトの名無しさん
2005/05/14(土) 00:01:00だれも"お前の"2chを見たいわけじゃない。
0821デフォルトの名無しさん
2005/05/14(土) 00:07:190822デフォルトの名無しさん
2005/05/14(土) 00:32:16標準Cではそんなことは決められていない。
0823デフォルトの名無しさん
2005/05/14(土) 00:35:100824デフォルトの名無しさん
2005/05/14(土) 01:49:54高水準ファイル出力と低水準ファイル出力の違いが今ひとつ分からない…
0825デフォルトの名無しさん
2005/05/14(土) 02:01:11と?
0826デフォルトの名無しさん
2005/05/14(土) 02:06:09お前には全く関係ない話だから fopen() だけを使え。
0827デフォルトの名無しさん
2005/05/14(土) 02:07:38呪文言って
バトルして
0828デフォルトの名無しさん
2005/05/14(土) 02:08:12大まかな傾向を言うと、ANSIのファイル入出力はテキスト志向が強く、
POSIXのファイル入出力は細かな動作指定が可能。
0829デフォルトの名無しさん
2005/05/14(土) 02:13:190830デフォルトの名無しさん
2005/05/14(土) 04:51:14親プロセスは、一秒に一回ぐらいの間隔で、子プロセスが終了してるかどうかを確認したいのです。
その間、親では
while(1){
子プロセスの終了してるか監視 終了してれば、処理を抜ける
メータ表示
}
などのプログラムを動かしたいと思っています。
いろいろ調べたんですがwait()関数なるものが子プロセス終了まで待ちつづけるというものでしたので、子プロセスが動いている間
メータを動かすという処理が出来ませんでした。
子プロセスは、system関数で、別のプログラムを実行しています。
その間、親プロセスで、メータを増やす処理をしたいのですが、子プロセスが終了?してるか調べるwait関数に変わるものは何かあるのでしょうか?
ps -aux で確認したところ、子プロセスの処理が終わったらゾンビプロセスになってました;
0831デフォルトの名無しさん
2005/05/14(土) 05:04:470832830
2005/05/14(土) 06:00:03スレ違い申し訳ありません;
LINUX板かUNIX板で聞いたほうがよろしいでしょうか?
GCCでコンパイルしてるんですが・・
0833デフォルトの名無しさん
2005/05/14(土) 06:16:06>>1の1行目を100回読め
0834デフォルトの名無しさん
2005/05/14(土) 06:38:44UNIXプログラミング質問すれってのがありました
ありがとうございます
0835デフォルトの名無しさん
2005/05/14(土) 13:09:13ビットシフトはなんの役に立つのでしょうか?
0836デフォルトの名無しさん
2005/05/14(土) 13:31:100837デフォルトの名無しさん
2005/05/14(土) 14:51:280838長文ごめんなさい
2005/05/14(土) 15:49:30{
int i = 1 ;
for ( printf("hoge\n") ; i > printf("aaa"),5 ; i++ )
printf("fuga") ;
return 0 ;
}
for文の評価順序について確認しようと、テストプログラムを作っていました。
この場合、無限ループに陥ってしまうのはなぜですか?
()で括ると正常に動くあたり、優先順位の関係には思えない気もしますし。
printf("aaa"),5 で5が評価対象となったとしても、無限ループに
なる訳がないし、と悩んでおります。
あと、評価順序は、for(1;2;3) で間違えないですか?
大抵の本には、 for(2;1;3)のような記述が書かれているように思うのですが、
評価順序も規格とかで決まっているものなのでしょうか。
0839デフォルトの名無しさん
2005/05/14(土) 16:00:420840デフォルトの名無しさん
2005/05/14(土) 16:02:59スレ汚しすみませんでした。;;
0841デフォルトの名無しさん
2005/05/14(土) 16:15:37どーせやるなら
for(printf("1"), i = 1; printf("2"), i < 5; printf("3"), i++) printf("4");
だろ
順序については、http://www.jisc.go.jp/app/pager?id=13508 で 6.8.5.3 を読めばはっきりする
0842デフォルトの名無しさん
2005/05/14(土) 16:24:480843デフォルトの名無しさん
2005/05/14(土) 16:26:19ほんとだ! おかげさまで、はっきりと致しました。
ありがとうございます。
0844デフォルトの名無しさん
2005/05/14(土) 16:28:21VB
0845デフォルトの名無しさん
2005/05/14(土) 16:28:57簿記
0846デフォルトの名無しさん
2005/05/14(土) 16:31:23アセンブラ
0847デフォルトの名無しさん
2005/05/14(土) 16:33:05http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010
0848デフォルトの名無しさん
2005/05/14(土) 16:37:28おkwwwwwwwwwwwwうはっwwwwwwwww
wwwwwwうぇうぇうはっwwwwwwwwwwww
うぇうぇうはっwwwwwwおkwwwwwwwwwwww
うぇうぇwwwおkおkっうぇwwwwwwwwwwwwwww
0849842
2005/05/14(土) 16:39:42f`::'ー 、,-、-、_ _,....-- 、_ _,....-=―ヽ―-、-、_ 、ミ川川川彡
,.r'‐'゙´ヽ,r' ヽ \ー、_:::::::::/,´:::::::::::,:::::::,::::::::ヽ::\`ー、 ミ 彡
,〃ィ ,rヽ'-ヽ i 、 、 ヾ,、 `'y',ィ´/::::::::/|::::::ハ_::::::::ト、::::\ \ 三 ギ そ 三
r'/〃// | i! |, \、_`ー!rf.,イ-,ィ/u ノ::::/ |::::`::::|iヽ::::::ヽ ヽ. 三 ャ れ 三
iヾ!l i /,.=ヽ i,ケ ハ,i', Y't=ラ゙,〉'|::::r'|! 彡´ ,!--、 |i!|::|::i::::::', ', 三 グ は 三
{ヾllッ-, 〃ノ'-'、||ii i|i| |-/! /^ヽ ´ ヾ|从ノ::i::::| ||三 で 三
>|゙! 0ヽ ノ' ´ 0 レノWノi |,.、!/ 0 0 ',' レ|,イ::::i,,_ | !三 言 ひ 三
',i ヽ- , _, " |i| | | ´ '´ハ',Y .!三 っ ょ 三
/l ` !| | i `´ r 'ー‐' u (-, ' | !三 て っ 三
/久 U |! i|'´'、u z_,ノ/ .i |三 る と 三
/イ |ヽ '==..‐_、 |!,'|Y´,ヽ ___ ハ_ ,/i | |三 の し 三
|ト|、',::::\ _,.-‐イ//-'´::::!\'ー‐--ニュ / ト_、 _| _!,=,|三 か て 三
〉:ヾ_'、::::`ー‐r< //イ|::::::_、:::`7i\ __,..-‐'´ .| |`゙"::"::|-"三 !? 三
'ー‐'´¨`'ー、/,rケ /,'1ノ人'-‐'`y'/::::, i| ,!, |`iiイ:::::::::| 彡 三
,〃7,‐/ { ´_,-'´ ,,‐!、=,/.〃::::i i|kハ / ,ヾ、::::::|.|! 彡川川川ミ
,ッ'、_〃'f /゙-<´ r〃 〃 /イ::::,!ッ'/ ', / / |ト、:|:リ
rir' 〃,y'、久_,.rヽ/〃 川/iケir'〃/ ,-'水´ / 〃 \
f::}'ー'〃_i| /::::f|::::', .〃 r/if |||ir' f| レ' r'o | .〃-、 〃 "i
,);'ーッ゙-. レ:::::/_|::::::',_,〃=_、!!|| !i/ ||:,ri !o ∨/_)_〃 |
0850デフォルトの名無しさん
2005/05/14(土) 17:28:360851デフォルトの名無しさん
2005/05/14(土) 19:51:36文字列を返す時にstrlenで返そうとすると、
空白やタブ等、文字以外の物を返してくるのですが、
文字だけ返す方法はあるのでしょうか?
また、strlen以外で違うやり方はあるのでしょうか?
よろしくお願いします。
0852デフォルトの名無しさん
2005/05/14(土) 19:55:21はい?なんですか?
信じられないという気持ちが目を見えなくしているようです。
0853デフォルトの名無しさん
2005/05/14(土) 19:57:52ちょっと手に負えない
0854デフォルトの名無しさん
2005/05/14(土) 20:01:41E S P 発 動
0855851
2005/05/14(土) 20:04:25標準入力からの入力の行数、文字数を数えたいのですが、
その時に、文字数には空白をカウントしたくないのですが、
どうすればいいのですか?
0856デフォルトの名無しさん
2005/05/14(土) 20:06:55これ使ってみる?
#include <ctype.h>
size_t printable_len(const char *p) {
size_t len = 0;
while (*p++) if (isprint(*p)) len++;
return len;
}
0858デフォルトの名無しさん
2005/05/14(土) 20:17:330859デフォルトの名無しさん
2005/05/14(土) 20:22:570860デフォルトの名無しさん
2005/05/14(土) 20:25:21ねたなのか?
ねたnのか?
ntnnk?
0861デフォルトの名無しさん
2005/05/14(土) 20:35:11>基礎だけでできるやり方などはございますか?
無理に >>856 のソースの意味を理解しようとせず、
そのままコピーして使うだけにする。
0862851
2005/05/14(土) 20:47:04大学で習ってないものを使ってやっても、
提出を認められないので、基礎的なやり方に絞ってました。
>>861
さっきからやってみてたんですが、
やっぱり分からなかったです。
ありがとうございました。
0863デフォルトの名無しさん
2005/05/14(土) 20:57:230864デフォルトの名無しさん
2005/05/14(土) 21:04:390865デフォルトの名無しさん
2005/05/14(土) 21:11:030866デフォルトの名無しさん
2005/05/14(土) 21:16:000867デフォルトの名無しさん
2005/05/14(土) 21:24:530868デフォルトの名無しさん
2005/05/14(土) 21:30:300870デフォルトの名無しさん
2005/05/14(土) 22:11:23やり直し。でもやっぱりマルチバイト文字はダメ。
#include <ctype.h>
size_t graph_len(const char *p) {
size_t len = 0;
while (*p) {
if (isgraph(*p)) len++;
p++;
}
return len;
}
0871デフォルトの名無しさん
2005/05/14(土) 22:18:45iswgraph() 使えばいいの?
0872デフォルトの名無しさん
2005/05/14(土) 22:29:410873デフォルトの名無しさん
2005/05/14(土) 23:16:34#include <wchar.h>
#include <stdio.h>
#include <wctype.h>
#include <locale.h>
int main(void)
{
wchar_t wc;
int wc_count = 0;
int line_count = 0;
setlocale(LC_CTYPE, "");
while (wc = getwchar(), wc != WEOF) {
if (iswgraph(wc)) {
wc_count++;
}
if (wc == L'\n') {
line_count++;
}
}
printf("字数:%d 行数:%d\n", wc_count, line_count);
return 0;
}
0874デフォルトの名無しさん
2005/05/14(土) 23:38:450875デフォルトの名無しさん
2005/05/14(土) 23:43:570876デフォルトの名無しさん
2005/05/14(土) 23:48:26それだと空白文字が出てきた時点でカウントをやめてしまうんじゃないか?
0877デフォルトの名無しさん
2005/05/15(日) 00:36:32iswgraphを!iswspaceに変更して実行してみたら↓
sc011% a.out
875 :デフォルトの名無しさん :2005/05/14(土) 23:43:57
iswgraphが!iswspaceに変わるだけだと思うが・・・。
字数:70 行数:2
で計算合ってるし。
0878デフォルトの名無しさん
2005/05/15(日) 01:05:44勘違いスマソ
0879デフォルトの名無しさん
2005/05/15(日) 05:54:31これって float にする意味あるのか?
全く意味無いんじゃないの?
rand()*N / (RAND_MAX+1)
これとどう違うの? 何のために浮動小数点型にするの?
不動小数点型でやった方が良くない?
0880デフォルトの名無しさん
2005/05/15(日) 07:24:270881デフォルトの名無しさん
2005/05/15(日) 07:31:54最大値は規定されていない
0882デフォルトの名無しさん
2005/05/15(日) 08:50:51(float)(INT_MAX + 1)
0883デフォルトの名無しさん
2005/05/15(日) 12:36:410884デフォルトの名無しさん
2005/05/15(日) 12:42:190885デフォルトの名無しさん
2005/05/15(日) 12:42:390886デフォルトの名無しさん
2005/05/15(日) 13:10:260887デフォルトの名無しさん
2005/05/15(日) 13:45:160888デフォルトの名無しさん
2005/05/15(日) 13:55:580889デフォルトの名無しさん
2005/05/15(日) 14:44:43ビットシフトはなんの役に立つのでしょうか?
0890デフォルトの名無しさん
2005/05/15(日) 14:48:350891デフォルトの名無しさん
2005/05/15(日) 15:23:430892デフォルトの名無しさん
2005/05/15(日) 16:28:05楽しいか?
0893デフォルトの名無しさん
2005/05/15(日) 16:30:25東京都 男性・24歳
0894デフォルトの名無しさん
2005/05/15(日) 17:20:35Windowsのコマンドプロンプトの環境では図形を描いたり
色を付けたりできないのでしょうか。
0895デフォルトの名無しさん
2005/05/15(日) 17:28:540896デフォルトの名無しさん
2005/05/15(日) 17:41:030897デフォルトの名無しさん
2005/05/15(日) 17:46:580898デフォルトの名無しさん
2005/05/15(日) 17:49:400899デフォルトの名無しさん
2005/05/15(日) 17:59:17嘘つくな
>>896
strtol
0900デフォルトの名無しさん
2005/05/15(日) 18:03:03その質問は、「なぜソフトで実現するのか」ということの核心をついている
しゃっきり答えられない香具師は砂上の楼閣
0901デフォルトの名無しさん
2005/05/15(日) 18:23:25おま%k腋ヌ2の回答は?
0902901
2005/05/15(日) 18:23:530903デフォルトの名無しさん
2005/05/15(日) 19:34:07>おま%k腋ヌ2
なんかエロイな
0904デフォルトの名無しさん
2005/05/15(日) 19:36:05どうせ
おま と 液 に反応しただけでしょ!変態!
0905デフォルトの名無しさん
2005/05/15(日) 20:39:140906デフォルトの名無しさん
2005/05/15(日) 20:40:20スクリーンに書き込むのはできる
0907デフォルトの名無しさん
2005/05/15(日) 20:53:350908デフォルトの名無しさん
2005/05/15(日) 20:54:14すいません、XPのOSが入っていればCのコンバイラは不要ですか?
0909デフォルトの名無しさん
2005/05/15(日) 20:55:480910デフォルトの名無しさん
2005/05/15(日) 20:58:030911デフォルトの名無しさん
2005/05/15(日) 21:02:52どういう意味ですか?
0912デフォルトの名無しさん
2005/05/15(日) 21:05:30質問の意味がわかりません
0913デフォルトの名無しさん
2005/05/15(日) 21:13:05すいません、混乱してました、
変な事言ってすみませんでした
0914デフォルトの名無しさん
2005/05/15(日) 21:32:170915デフォルトの名無しさん
2005/05/15(日) 21:33:13>>891
0916デフォルトの名無しさん
2005/05/15(日) 21:33:160917デフォルトの名無しさん
2005/05/15(日) 22:01:330918デフォルトの名無しさん
2005/05/15(日) 22:19:08>>1-2のリンク先を熟読しておいで
それでもわからないなら色んなものを諦めろ
0919デフォルトの名無しさん
2005/05/15(日) 22:37:13待て、奴はコンパイラとは言ってないぞ
0921デフォルトの名無しさん
2005/05/16(月) 04:13:28楽しいよ
食いつきいいんだもん
0922デフォルトの名無しさん
2005/05/16(月) 11:54:57回文判定部分を,文字列を受け取るとその文字列が回文なら 1 を、
そうでないなら 0 を返す関数を設計し,置き換える。
という風にしたいんですが、以下のやつからどうしたらいいんでしょうか?
詳しい方どうか教えてくださいませ。
#include <stdio.h>
#define MAX 100
main()
{
char string[MAX];
int n, i;
/* input */
printf("string = ");
scanf("%s", string);
/* strlen */
for (n = 0; string[n] != 0; n++) {
/* 何もしない */
}
/* reverse */
for (i = n - 1; i >= 0; i--)
putchar(string[i]);
putchar('\n');
}
0923デフォルトの名無しさん
2005/05/16(月) 13:00:050924デフォルトの名無しさん
2005/05/16(月) 13:19:46問題の意味がまったくワカラネ
0925デフォルトの名無しさん
2005/05/16(月) 13:30:10持ってないのでパス
0926デフォルトの名無しさん
2005/05/16(月) 13:38:12ただの K&R でよければ、
| 一番長い行を印字するプログラムの main ルーチンを書き直して、任意の長さの入力行群
| の長さ、およびテキストのできるだけ多くの部分を正しく印字できるようにせよ。
確かにわかりづらい (一応わかるけど)
0927デフォルトの名無しさん
2005/05/16(月) 16:09:32ガンパレ。そこ以降もヘタクソな日本語による出題が続出だ。
0928デフォルトの名無しさん
2005/05/16(月) 16:44:52流し読みした感じでは、
「一番長い行を印字するプログラム」では、行の長さに制限がある
だから制限を取り除け。
という意味に読めた。
ちゃんと読んでみると、、、、全然わからん orz
0929デフォルトの名無しさん
2005/05/16(月) 16:50:050930924
2005/05/16(月) 17:41:33ほんと意味ワカラネ日本語ばっかで、字面を追うのだけでも苦労シテオマス
こういうものなんだ、と思い込んでがんばります。レスくれた方ありが�d
0931デフォルトの名無しさん
2005/05/17(火) 00:28:510932デフォルトの名無しさん
2005/05/17(火) 00:58:270933デフォルトの名無しさん
2005/05/17(火) 01:33:490から9までの数字を使って5桁の整数を2つ作って、それを掛け合わせた結果も
0から9までの数字が1回ずつ出てくる10桁の数になるような組み合わせの数を求める。
12345*67890 とか。01234は4桁だからだめ。再帰を使って解く問題だと思ったんだが
教官が配ったプログラム例では総当りっぽく計算してたかな。
0934933
2005/05/17(火) 01:34:48> 0から9までの数字を使って
0から9までの数字を「1回ずつ」使って
0935デフォルトの名無しさん
2005/05/17(火) 02:07:13なんで再帰が出てくるのかわからん
0936デフォルトの名無しさん
2005/05/17(火) 02:24:520937デフォルトの名無しさん
2005/05/17(火) 02:32:18学校だったらそれくらいのコンピュータはあるだろうし。
0938デフォルトの名無しさん
2005/05/17(火) 02:44:19解いて欲しいということじゃなくて、どんな計算法があるのかなと思って。
>>935
0〜9を1回ずつ組み合わせてできる5桁の数×2を再帰で作れば速いかなと思ったの。
ちなみに俺が書いてみたソース。もしよければ評価してください。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/399.txt
0939デフォルトの名無しさん
2005/05/17(火) 08:19:580940デフォルトの名無しさん
2005/05/17(火) 10:24:390941デフォルトの名無しさん
2005/05/17(火) 10:44:250942デフォルトの名無しさん
2005/05/17(火) 11:47:53どうすればいいのですか?
ソースうpしてください。m(__)m
0943デフォルトの名無しさん
2005/05/17(火) 12:08:05>>1
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
0944デフォルトの名無しさん
2005/05/17(火) 13:00:220945デフォルトの名無しさん
2005/05/17(火) 13:03:09引数を2つ受け取ってそれをメンバにした構造体を宣言して、
それを返すっていう関数を作りたいのですが
その関数を抜けてもその構造体が保持されて、
再びその関数を実行したときに、前とその時の構造体が別々に
保存されるようにするにはどのようにすればいいでしょうか?
0946デフォルトの名無しさん
2005/05/17(火) 13:11:13激しく意味がわからん
0947デフォルトの名無しさん
2005/05/17(火) 13:13:57日本語で話せ
0948デフォルトの名無しさん
2005/05/17(火) 13:17:49えーとやりたいことはこんな感じなんですけど、
これだと二回以上この関数を実行したときに
前に宣言したtestの内容が消えちゃうんで
別々に保存するにはどうするか聞きたかったんですけど・・・
今度は通じますかね?つたない説明でスミマセン・・・
Test *declare(char *name1, char *name2)
{
Test t;
Test *test = &t;
strcpy(test->name1,name1);
strcpy(test->name2,name2);
return test;
}
0949デフォルトの名無しさん
2005/05/17(火) 13:29:10declare() 抜けた瞬間に Test t は解放されるからそのコードの動作は激しく未定義だぞ。
何やりたいのかよくわからないんだが、static Test t; でもすればどうだ。
0950デフォルトの名無しさん
2005/05/17(火) 13:41:34何故ポインタを使う必要があるかと問い詰めたい('A`)
Test declare(char *name1, char *name2)
{
Test t;
strcpy(t.name1,name1);
strcpy(t.name2,name2);
return t;
}
0952950
2005/05/17(火) 13:45:39それにクラスじゃなくて構造体っぽい匂いがするな。
グダグダですまぬ('A`)
0953デフォルトの名無しさん
2005/05/17(火) 13:46:39標準 C では構造体を返すことはできない。
>>951
ここは標準 C スレ。
コピーコンストラクタはスレ違い。
0954デフォルトの名無しさん
2005/05/17(火) 13:50:30ANSI 以前の C ではだった
0955デフォルトの名無しさん
2005/05/17(火) 13:55:30あ、すいません、このコードは聞きたいことの要点まとめただけの
テストプログラムなんでコード自体の目的はあんまないんです。。
ちなみにプログラム全体は
typedef struct Test{中略}Test;
Test *declare(char *name1, char *name2){中略}
int main(void)
{
char name1[10]="aaa";
char name2[10]="bbb";
Test *test1,*test2;
test1 = declare(name1,name2);
printf("test1:%s,%s\n",test1->name1,test1->name2);
test2 = declare(name2,name1);
printf("test2:%s,%s\n",test2->name1,test2->name2);
printf("test1:%s,%s\n",test1->name1,test1->name2);
return 0;
}
って感じなんです。
0956デフォルトの名無しさん
2005/05/17(火) 13:56:11実行結果が
test1:aaa,bbb
test2:bbb,aaa
test1:bbb,aaa
になったんですけどこれが
test1:aaa,bbb
test2:bbb,aaa
test1,aaa,bbb
になるようにしたいんです、てか長々とすみません・・・
あと>>950さん、なんかうちの環境ではそれそのままじゃコンパイル通んなかったです・・・
0957デフォルトの名無しさん
2005/05/17(火) 14:00:42Test *test = &t;
これを、
Test *test = malloc(sizeof (Test));
にしてみたら。
いらなくなったら free(test); で
0958デフォルトの名無しさん
2005/05/17(火) 14:09:34なんかあっさりできました・・・どうもありがとうございます。
ってかなんかすごく単純なことだったみたいですね・・・
なんか長々と書いちゃってスミマセンでした
あとレスくれたみなさんどうもありがとうございました。
0959デフォルトの名無しさん
2005/05/17(火) 14:11:13void declare(Test *t, char *name1, char *name2)
{
strcpy(t->name1,name1);
strcpy(t->name2,name2);
}
にしとけ。
0960デフォルトの名無しさん
2005/05/17(火) 14:20:43構造体の宣言はdeclare関数の中で行いたいのでちょっとそれはできないんです・・
まあでもみなさんのおかげで解決しました。
こんなことでと思われるかもしれませんけどなんだかんだで数日つまってた所なんで
解決して良かったです。ありがとうございました。
0961デフォルトの名無しさん
2005/05/17(火) 14:31:41int i=0,left=0,right=n-1, mid=0;
while(left<right){
mid=(left+right)/2;
if(goods[mid] < item) left = mid + 1;
else right = mid;
}
if(goods[left] == item)return 0;
for(i=n;i>left;i--) goods[i] = goods[i-1];
goods[left] = item;
n++;
2分探索でgoods配列を探索して同じ値が無かったら
昇順になるように、itemを配列に入れるというプログラムを作りたいのですが
配所にある程度(2つ以上?)値が入っていないと動作しませんでした。
n=0からitem追加したいのですが、どうすれば解決しますか?
頭の良いプログラマーさんお願いします。
0962961
2005/05/17(火) 14:37:290963デフォルトの名無しさん
2005/05/17(火) 14:44:230964デフォルトの名無しさん
2005/05/17(火) 14:48:190965デフォルトの名無しさん
2005/05/17(火) 15:44:43エクスプローラーみたいにウィンドウ全体にリストコントロールが
表示されるようにするにはどうすればいいのですか?
コントロールだからリソースにダイアログを作ってリストビューを貼り付けるの?
0966デフォルトの名無しさん
2005/05/17(火) 15:50:22いろいろやり方はあるけれど
置きたいWindowのWM_CREATE内でCreateWindowしてやればいい。
ってこれはWin32かVC++の領域だな。
0967デフォルトの名無しさん
2005/05/17(火) 16:26:38そこまではわかりますが、解決方法がわかりません。
10個のデータを入れたところ、最初の1個が最後の配列に入り
それ以外はソートされました。
だれかお願いします。だれかお願いします。
0968965
2005/05/17(火) 16:26:41申し訳ない
後答えていただいてありがとうございます
0969デフォルトの名無しさん
2005/05/17(火) 17:11:53↑
関数の戻り値の型が * が右に寄ってる。
0970デフォルトの名無しさん
2005/05/17(火) 17:17:13とりあえず、0,1個の時はif文で判定して別処理しといたら
動かしてからもっといい方法がみつかることもあるさ
0971デフォルトの名無しさん
2005/05/17(火) 17:18:590972デフォルトの名無しさん
2005/05/17(火) 17:19:49その話題出したら、このスレ埋まるよ
0973デフォルトの名無しさん
2005/05/17(火) 17:25:43ただ、ネタ投下としてはあまり適切ではない
プロの釣り士ならgoto論争だな。
0974デフォルトの名無しさん
2005/05/17(火) 17:32:370975デフォルトの名無しさん
2005/05/17(火) 17:33:38,,,,,,,,,,,,,,,,,,,,
/": : : : : : : : \
/-─-,,,_: : : : : : : : :\
/ '''-,,,: : : : : : : :i
/、 /: : : : : : : : i ________
r-、 ,,,,,,,,,,、 /: : : : : : : : : :i /
L_, , 、 \: : : : : : : : :i / が!したら
/●) (●> |: :__,=-、: / < 負けだと思っている
l イ '- |:/ tbノノ \ (ニート・40歳・男性)
l ,`-=-'\ `l ι';/ \
ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヾ=-' /
| |
0976デフォルトの名無しさん
2005/05/17(火) 17:58:000977デフォルトの名無しさん
2005/05/17(火) 19:09:13ぼくがレスしたらいっつもこれが出てくるんですけど、気のせいかなぁ・・・
0978デフォルトの名無しさん
2005/05/17(火) 20:17:52たとえば、これは可能ですか?
int func(void), *f2(void), *f3(void);
0979デフォルトの名無しさん
2005/05/17(火) 20:22:28乙
0980デフォルトの名無しさん
2005/05/17(火) 21:47:17立てらんなかったorz
0981デフォルトの名無しさん
2005/05/17(火) 21:48:12できる。
何ですぐ試せることを自分で試さないのか。
0982デフォルトの名無しさん
2005/05/17(火) 22:32:15この役立たず!
0983デフォルトの名無しさん
2005/05/17(火) 23:03:00その怒り方、まるで奥さんみたいだな
0984デフォルトの名無しさん
2005/05/17(火) 23:31:200985984
2005/05/17(火) 23:33:02C言語なら俺に聞け! Part 107
http://pc8.2ch.net/test/read.cgi/tech/1116340323/
0986デフォルトの名無しさん
2005/05/18(水) 20:12:020987デフォルトの名無しさん
2005/05/18(水) 20:17:240988デフォルトの名無しさん
2005/05/18(水) 20:19:450989デフォルトの名無しさん
2005/05/18(水) 21:03:420990デフォルトの名無しさん
2005/05/18(水) 23:50:300991デフォルトの名無しさん
2005/05/19(木) 00:06:290992デフォルトの名無しさん
2005/05/19(木) 00:44:480993デフォルトの名無しさん
2005/05/19(木) 00:47:340994マルチプロセス初心者
2005/05/19(木) 00:48:10それで、少し問題が・・・・・
fork()を利用して複数のプロセスを同時に起動させて
pipe()を利用して子プロセスから親プロセスへ演算結果を
返すようなプログラムを組んでおります。
それをfor文で一定以上繰り返すと、fork()自体が失敗
するようになってしまいます・・・
これの原因はどこにあるのでしょう?
ex
for( i = 1 ; i <= 100 ; i++ )
{
pid[i] = fork();
if( pid[i] == -1 ) printf("error!\n");
if( pid[i] == 0 )
{
何か色々と処理させる
exit(0);
}
}
wait();
子プロセスが1個起動して終了するまで待つのは効率が悪いので
一気に複数のプロセスを起動させて全てが終わるまで待つようにしてます。
色々と調べてみたんですが、どうしても原因がわからなかったので
どなたかご存知でしたら教えてください。
0995デフォルトの名無しさん
2005/05/19(木) 00:50:240996デフォルトの名無しさん
2005/05/19(木) 01:02:35シェルから, limit なり limits なり入力した結果を...
それ以前に, ウニ板のくだ質へ行け.
0997デフォルトの名無しさん
2005/05/19(木) 02:22:190998デフォルトの名無しさん
2005/05/19(木) 02:23:30まだあと2もあるよ?
0999デフォルトの名無しさん
2005/05/19(木) 02:24:041000デフォルトの名無しさん
2005/05/19(木) 02:37:1010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。