C言語なら俺に聞け(入門篇) Part 47
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/03/27(金) 02:16:57初心者、初級者の方は他の質問スレのほうが良いかもしれません。
教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 124代目
http://pc12.2ch.net/test/read.cgi/tech/1235927586/
もしくは
C/C++の宿題片付けます 125代目
(現時点でまだ立っていません)
・C++言語はスレ違いですが、ある程度なら対応です。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 46
http://pc12.2ch.net/test/read.cgi/tech/1235918203/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0153136
2009/04/05(日) 12:52:42質問してんだろうが。
0154デフォルトの名無しさん
2009/04/05(日) 12:54:08だからそういうのは宿題スレでお願いしなさい
0155デフォルトの名無しさん
2009/04/05(日) 12:54:18暴言吐くなら鼬害。
0156デフォルトの名無しさん
2009/04/05(日) 12:55:23そうですね。
0158デフォルトの名無しさん
2009/04/05(日) 13:14:35【1】以外全部0でおk
【1】は空
べ,べつにあんたの単位なんてどうでもいいんだからね・・・///
0159デフォルトの名無しさん
2009/04/05(日) 16:49:24見苦しくしてまで一文字省略する意味がわからない
0160デフォルトの名無しさん
2009/04/05(日) 17:04:240161デフォルトの名無しさん
2009/04/05(日) 17:30:030162デフォルトの名無しさん
2009/04/05(日) 17:54:590163デフォルトの名無しさん
2009/04/05(日) 20:02:180164デフォルトの名無しさん
2009/04/06(月) 17:57:441000×1000の行列ベクトル積の計算プログラムが課題として出たのですが、デバッグするとよくわからないエラーが出て困っています。
'行列ベクトル積.exe': 'C:\Documents and Settings\管理者\My Documents\Visual Studio 2005\Projects\行列ベクトル積\debug\行列ベクトル積.exe' を読み込みました。シンボルが読み込まれました。
'行列ベクトル積.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'行列ベクトル積.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。
'行列ベクトル積.exe': 'C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_5490cd9f\msvcr80d.dll' を読み込みました。シンボルが読み込まれました。
'行列ベクトル積.exe': 'C:\WINDOWS\system32\msvcrt.dll' を読み込みました。シンボルが読み込まれていません。
行列ベクトル積.exe の 0x00411ab7 で初回の例外が発生しました: 0xC00000FD: Stack overflow
行列ベクトル積.exe の 0x00411ab7 でハンドルされていない例外が発生しました: 0xC00000FD: Stack overflow
プログラム '[10012] 行列ベクトル積.exe: ネイティブ' はコード 0 (0x0) で終了しました。
;が無いとかで怒られたことはありますけどこういう形のエラーは初めてです。
プログラムを組むのが1年ぶりくらいなので、もしかしたら基本的な見落としをしているのかもしれませんがさっぱり原因がわかりません。
どうかよろしくお願いします。
0165デフォルトの名無しさん
2009/04/06(月) 18:00:18原因は書いてあるそのまま。
Stack overflow
0166150
2009/04/06(月) 18:04:53問題はこれ
int a[1000][1000];
int x[1000];
int b[1000] = {0};
前にもスタックにdoubleの配列を大量に確保しようとしてたやついたな
メモリの確保については教えてくれないのか?>ちぇんちぇえ
0167デフォルトの名無しさん
2009/04/06(月) 18:07:03なんか名前書き込んでもた
0168デフォルトの名無しさん
2009/04/06(月) 18:34:19exeってなってるからVisualC++あたりと想定して、
デフォルトのスタックサイズは1MBだから、スタックオーバーフローですな。
スタックに置かないか、スタックサイズを大きくするかだな。
自動変数はスタックに置かれる。
0169デフォルトの名無しさん
2009/04/06(月) 18:35:42stack を使わないように static にしたり
動的確保でヒープ領域を使ったり
0170デフォルトの名無しさん
2009/04/06(月) 18:36:01static int x[1000];
static int b[1000] = {0};
とりあえずはこれでOK?
0171デフォルトの名無しさん
2009/04/06(月) 18:36:51static int b[1000];
これでいいか
0172デフォルトの名無しさん
2009/04/06(月) 19:07:59auto は関数内でしか使わない変数向き
関数内 static は関数内で静的に確保したいとき
グローバル static はプログラムが動いてる間確保したいとき
本来 auto で確保したいけど stack を無駄に大きくしたくないのであれば
緊急避難的に関数内 static を使うのがいいんジャマイカ
0173デフォルトの名無しさん
2009/04/06(月) 19:16:01で、マルチスレッド対応時に あー ってなると
0174164
2009/04/06(月) 19:45:33>>170さんの通りにしたらきちんと動くようになりました。
ところで結果表示の時に701〜999、までしか表示されないのは単に表示行数の問題でしょうか。
0175デフォルトの名無しさん
2009/04/06(月) 19:57:07コンソールアプリだとウインドウが管理できる行数がデフォルトで
決まってるので最後の方の結果だけが残ってる可能性が
コンソールウインドウの設定を変えてログ行数増やすとかしないとだめかな?
0176デフォルトの名無しさん
2009/04/06(月) 20:11:14無駄??
0177デフォルトの名無しさん
2009/04/06(月) 20:38:12わかりました。ありがとうございます。
結果の表示はしなくてもいいのでとりあえず無くすことにします。
0178デフォルトの名無しさん
2009/04/06(月) 20:47:420179デフォルトの名無しさん
2009/04/06(月) 22:44:42身長の入力をするとループして先に進めないです
どこが間違っているのか指摘をお願いします
0180デフォルトの名無しさん
2009/04/06(月) 22:46:431(one)でなくてl(ell)
0181デフォルトの名無しさん
2009/04/06(月) 22:50:02!!
ありがとうございます。目が疲れていたようですw
0182デフォルトの名無しさん
2009/04/06(月) 22:59:33これ常識
0183デフォルトの名無しさん
2009/04/07(火) 00:44:25%le とかもあるがな
0184デフォルトの名無しさん
2009/04/07(火) 10:24:37デフォルトだと2KBだったよねえ
0185デフォルトの名無しさん
2009/04/07(火) 12:26:03スタックオーバーフローしたら無闇に増やすより
真っ先にスタックから静的変数領域に追い出したな
0186デフォルトの名無しさん
2009/04/07(火) 13:39:02printf(":");
if((command = getchar()) == 'a')
addlist();
else if(command == 'b')
delete();
else if(command == 'c')
showlist();
else if(command == 'q')
exit(0);
else
puts("Illegal command");
puts("");
};
上記はmain関数内の繰り返しで、結果が以下のように出力されます。
******************************************************** <---ここから
:a <---for(;;){}内のプロンプトが表示されaddlist()を実行した
>34 <---addlist()のプロンプトが表示され34を入力した
:Illegal command <---ここが原因のわからない表示
: <---addlist()実行後に復帰してfor(;;){}内のプロンプトが再び表示される
******************************************************** <---ここまで
実行環境:cygwin gcc versin 3.4.4
どうやら実行後に復帰したプロンプトが表示される前に、一回多く繰り返しを行っているようなのですが、
なぜ繰り返しが起こるのか、原因の見当がつきません。
このようなことが起こる原因がわかる方がいたらどうぞ教えてください。
0187デフォルトの名無しさん
2009/04/07(火) 13:51:15scanfの問題点と回避方法
改行文字の取り扱い
0188デフォルトの名無しさん
2009/04/07(火) 15:05:36ありがとうございます。
解決しました:-)
0189デフォルトの名無しさん
2009/04/09(木) 01:35:45プログラム全体を一気に書き換えた後に、デバッグ工程の俺にプログラムが送られてくるわけだが動作どころかコンパイルすら通らない。
このやり方では確実に見つけにくいバグが紛れ込むと思うんだがこういう手法って一般的なんだろうか。
0190デフォルトの名無しさん
2009/04/09(木) 01:37:16日本はそうやってゼネコンが作ったシステムのまねをして分業化する。
だからIT土方と言われる
0191デフォルトの名無しさん
2009/04/09(木) 02:32:32上司の名前を使って、バグだらけのコードをわざと書いて
デバッグ工程に回すのが吉
それで上司が文句を言ってきたら、「責任を人になすり付ける会社」
としてさっさとその会社に見切りをつけることが吉。
0192デフォルトの名無しさん
2009/04/09(木) 02:43:420193デフォルトの名無しさん
2009/04/09(木) 03:01:17たとえデバッグを他人に押し付けても
自分が一番作った気になれる部分じゃん
本人はそれで満足したいんだよ
0194デフォルトの名無しさん
2009/04/09(木) 03:57:28そもそもコンパイルが通っていないなら、コーディングが済んだとは言えんだろ。
0195デフォルトの名無しさん
2009/04/09(木) 09:33:480196デフォルトの名無しさん
2009/04/09(木) 09:34:260197デフォルトの名無しさん
2009/04/09(木) 13:19:520198デフォルトの名無しさん
2009/04/09(木) 22:46:43それで仕事になっているということは、
君がすごいんじゃないか?
普通に考えて、デバッグのがしんどいだろ。
他人のデバッグなんてホントに難しいってか…(ry
0199デフォルトの名無しさん
2009/04/09(木) 23:00:010200デフォルトの名無しさん
2009/04/09(木) 23:23:490201デフォルトの名無しさん
2009/04/10(金) 02:39:44とても関心いたします
0202デフォルトの名無しさん
2009/04/10(金) 03:08:25最初からその人が書いたほうが早いんじゃねーか?
0203デフォルトの名無しさん
2009/04/10(金) 03:13:56そう思わない駄目上司がいるからIT業界は概ねブラックで
そういうシステムだからこそIT土方と言われるんだし・・・
0204198
2009/04/10(金) 07:02:09俺のレスの
>他人のデバッグなんてホントに難しいってか…(ry
この
…(ry
の部分がまさに君の
>最初からその人が書いたほうが早いんじゃねーか?
だ。同意。
0205デフォルトの名無しさん
2009/04/10(金) 09:15:370207デフォルトの名無しさん
2009/04/10(金) 20:27:13コードはプロジェクトの共有物なんだから
0208デフォルトの名無しさん
2009/04/10(金) 21:26:48#include <stdlib.h>
int main(int argc, char *argv[])
{
int sum;
int table[10]={1,2,3,4,5,6,7,8,9,10};
int i;
double ave;
i=0;
ave=0;
sum=0;
for(i=0;i<10;i++)
{
sum+=table[i];
}
ave=sum/10;
printf("%d",ave);
system("PAUSE");
return 0;
}
これをコンパイルして実行しても結果が0にしかなりません。
どこがおかしいのでしょうか?
教えてください
0209デフォルトの名無しさん
2009/04/10(金) 21:28:48書式を調べたほうが
0210デフォルトの名無しさん
2009/04/10(金) 21:29:51この辺なんか
0211デフォルトの名無しさん
2009/04/10(金) 21:32:03あと、aveをdoubleにしても、ave=sum/10.0; とかにしないと、少数が切り捨てられる。
0212デフォルトの名無しさん
2009/04/10(金) 21:38:09無事に実行できました。わからなく、モヤモヤしてたので助かりました。
ホントにありがとでした><
0213デフォルトの名無しさん
2009/04/10(金) 23:08:11そこはなかなか読んでダメになるサイトですね。前にも他のページで指摘しているけど、今回はこれを見つけた。
>\' 文字としての ' 2C
asciiの0x2cはいつからシングルクォートになったんだかw
0214デフォルトの名無しさん
2009/04/11(土) 03:33:18こんな理解力の無い奴もプログラマやってんのかな
0215デフォルトの名無しさん
2009/04/11(土) 11:34:470216デフォルトの名無しさん
2009/04/11(土) 11:36:26main(){
int a,b;
scanf("%d",&a);
scanf("%d",&b);
printf("%d + %d = %d",a,b,a+b);
return 0;
}
を実行したとき、数字以外を入力すると
1 + 256 = 257
となります。
数字以外が入力された際、エラーメッセージを表示して再入力を促すようにしたい場合
どうしたらよいでしょうか?
0217デフォルトの名無しさん
2009/04/11(土) 11:41:43main(){
int a,b;
do{
scanf("%d",&a);
scanf("%d",&b);
}while(a<'0'||'9'<a||b<'0'||'9'<b);
printf("%d + %d = %d",a,b,a+b);
return 0;
}
0218デフォルトの名無しさん
2009/04/11(土) 12:00:50printf("error\n");
continue;
}
0219デフォルトの名無しさん
2009/04/11(土) 12:05:090220デフォルトの名無しさん
2009/04/11(土) 12:08:41半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0221デフォルトの名無しさん
2009/04/11(土) 15:30:28要素数には定数しか使えないと解説書にあったのですが・・・
0222デフォルトの名無しさん
2009/04/11(土) 15:33:180223デフォルトの名無しさん
2009/04/11(土) 15:40:340224デフォルトの名無しさん
2009/04/11(土) 15:43:59スレ違い
0225デフォルトの名無しさん
2009/04/11(土) 16:01:32あれ?いまどきのCは変数で配列のサイズ確保できたんじゃね?
ttp://seclan.dll.jp/c99d/c99d04.htm#dt19990719
0226デフォルトの名無しさん
2009/04/11(土) 16:05:15C99なら
0227デフォルトの名無しさん
2009/04/11(土) 16:06:27それが使えない環境が広く普及してる
0228デフォルトの名無しさん
2009/04/11(土) 16:11:21って何?古い環境で保守、ってこと?
0229デフォルトの名無しさん
2009/04/11(土) 16:11:44ぐぐり方が足りないようでした
DOOMすいませんでした
0230デフォルトの名無しさん
2009/04/11(土) 16:21:59VCが対応していないしな。
いまだに新規開発でもC90を使っているところが多いんじゃないかな。
0231デフォルトの名無しさん
2009/04/11(土) 16:23:120232デフォルトの名無しさん
2009/04/11(土) 16:29:350233デフォルトの名無しさん
2009/04/11(土) 16:38:45それだけ使いやすい言語だという事だよ、ワトソン君。
0234デフォルトの名無しさん
2009/04/11(土) 16:51:010235デフォルトの名無しさん
2009/04/11(土) 20:22:42それやったら無限ループだな。
0236デフォルトの名無しさん
2009/04/11(土) 20:28:31それと>>217もひどすぎるw
0237デフォルトの名無しさん
2009/04/11(土) 20:36:270238デフォルトの名無しさん
2009/04/11(土) 20:38:45Cは使うな
0239デフォルトの名無しさん
2009/04/11(土) 20:44:010240デフォルトの名無しさん
2009/04/12(日) 15:14:430241デフォルトの名無しさん
2009/04/12(日) 15:23:48そりゃまあ使い方次第だが。。。
そんな言い方したらgoto文も同じだよね。
0242デフォルトの名無しさん
2009/04/12(日) 15:27:390243デフォルトの名無しさん
2009/04/12(日) 15:29:13どう違う?
0244デフォルトの名無しさん
2009/04/12(日) 15:49:160246デフォルトの名無しさん
2009/04/12(日) 15:55:29アドバイスするときに添える理由。
・他の入力関数にくらべて挙動に癖があって初心者には使いにくい。
・がんばって挙動に精通しても実践の場で使うことはほとんどない。
0247デフォルトの名無しさん
2009/04/12(日) 16:01:070248デフォルトの名無しさん
2009/04/12(日) 16:09:10キーボードとは相性が悪い
0249デフォルトの名無しさん
2009/04/12(日) 16:12:570250デフォルトの名無しさん
2009/04/12(日) 16:16:18入力と数値の変換を同時にやるから、説明が簡単だっておもっちゃうのかね。
教わる側からすると、エラーリカバリとかやろうとするととたんに難しくなるな。
0251デフォルトの名無しさん
2009/04/12(日) 16:19:58素人乙。お前みたいな固定概念しかない奴は応用力がない。
一生あれもこれも欠点を持ち出して駄目だといい続けてな。
現に、お前が使っている言語もOSさえも、完璧なものはない。
0252デフォルトの名無しさん
2009/04/12(日) 16:21:21まったく説明ができないくせに、駄目だとされるものがあれば
もうそれは駄目。自動車で悲惨な事故が起こる、航空機は墜落したら
大惨事、人間は生きているだけで老化してやがて死ぬから駄目
といっているようなもの。進歩のない奴はいつまでも発展しないまま
情報弱者のくせして知ったかぶりでこの世を去るんだろう。
■ このスレッドは過去ログ倉庫に格納されています