プログラムが実行されないのですが・・・。 – プログラミング – Home

プログラムが実行されないのですが・・・...
 
通知
すべてクリア

プログラムが実行されないのですが・・・。


キャンピー
 キャンピー
(@キャンピー)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

このプログラムで、コンパイルしてもエラーが出ないのですが、
実行すると、バグがおきてしまいます。
理由が、はじめたばかりの初心者なものでわかりません。
おしえてください。
(ちなみに、このプログラムは、数値を入力して小さい順に
並び替えるものです)

#include<stdio.h>

void main()
{
int i;
int data[256];
while(scanf(%d,&data[i++])!=EOF);
void SelSort(int,int),Swap(int *,int *);
printf(%d,data[i++]);
}
void SelSort(int data[], int n)
{
int i,j,Midx;
void Swap(int *,int *);
for (i=0;i<n-1;i++)
{
Midx=i;
for (j=i+1;j<n;j++)
{
if(data[Midx]<data[j])
{
Midx=j;
}
}
if(Midx!=i)
Swap(&data[Midx],&data[i]);
}
}
void Swap(int *x,int *y)
{
int temp;

temp = *x;
*x = *y;
*y = temp;
}


引用解決済
トピックタグ
ハッハー
 ハッハー
(@ハッハー)
ゲスト
結合: 24年前
投稿: 2
 

???
入力して表示して終わりですか?
sortやらswapやらは定義されているだけで呼び出さないんですか?
どうなんですか?


返信引用
キャンピー
 キャンピー
(@キャンピー)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

数値を入力すると、止まってしまい、表示もされずにエラーがでて、
プログラムの内容を呼び出すまでいたっていないと思うのですが・・・。
<ハッハーさん>どこか、間違っているところがあったらおしえてください。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

エラーの内容は?

おそらくAccess Violationでしょう。iの値が初期化されていません。
#他にもおかしいところはありますけどね。

ステップ実行したり,ウォッチを使ったりして何が原因かを探し出す訓練をしておいた方が良いですよ。


返信引用
キャンピー
 キャンピー
(@キャンピー)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

エラーは、{(クラス名)原因で(クラス名).EXEにエラーが発生しました。
                       (クラス名)は終了します。}
となって、作動しないのです。
他に、おかしいところってなんですか?よければ具体的に教えてください。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

> while(scanf(%d,&data[i++])!=EOF);
とりあえず,ここでi < 0とかi >= 256の時,確保したメモリ外へのアクセスを行ってしまいます。
その為の処理を入れる必要があります。同じように,
> printf(%d,data[i++]);
も大問題ですし(%dに対応するデータが渡されていない),
ハッハーさんが書かれているように,ソートされません。
> void SelSort(int,int),Swap(int *,int *);
これはプロトタイプ宣言であることはわかっていますよね。
#SelSortの引数間違っているし……。


返信引用
たけみ
 たけみ
(@たけみ)
ゲスト
結合: 24年前
投稿: 31
 

まず初歩から説明したちゃんとした本を一冊購入してください。
「変数が箱だとっ!何言ってやがる」と突っ込みたくなるような、且つサンプルソースが多い本がいいです。
失礼ですが、このレベルなら\1200~\2000クラスの書籍一冊ですべて解決できます。
そしてC/C++では無く、C言語という本を買ってください。はじめからC++が混ざると混乱します。
いい本を探す方法?スバリ立ち読みです:笑。
解らない所があったら「開いてみようかな」と思える本がベストです。
おカタイ文章の本が必ずしも良い教材とは限りません。
また、関数集とかTips集とかがハンドブックサイズでありますが、最初のうちはお勧めしません。
関数の規則と使い方が判ってきたら購入してもいいかなぁ~って感じですね。要らないですけど。


返信引用
たけみ
 たけみ
(@たけみ)
ゲスト
結合: 24年前
投稿: 31
 

なんか補足が多いなぁ -> 私

なんでも質問はOKです。初歩的だから答えるのが面倒くさいとか言うのではなくて、
初歩だからこそちゃんとした本を読んだほうがいいと思います。

P.S.~
できればソースにコメント書いてね♪


返信引用
ハッハー
 ハッハー
(@ハッハー)
ゲスト
結合: 24年前
投稿: 2
 

とりあえず、変数iに初期値を入れとこう。
そしたら、できると思うよ。
入力が256超えたらバグるけど、そんなもんサポートせんでもいいと思う。
そんなに入力する人が悪いんやから(実際、256も入力するの大変やで)
気にする必要あらへん!
安全性も考慮したのであれば考えんこともないけど…。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました