こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

c++について

以下のプログラムをコンパイルしてみたのですが、うまく作動しません。
どこかに欠陥があるのでしょうか?
分かる方、よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#pragma warning(disable : 4996)
#define N 3

typedef struct Shop {
char name[10];
int sale;
} Shop;

void pp(Shop*a)
{
int i;
printf("\n");
for(i=0; i<N; i++,a++)
printf("Name , Sale = %s ,\t%d\n",a->name,a->sale);
printf("\n");
}

int main(void)
{
double sum; //売上高合計
double ave; //売上高平均
double hensa1;
/* double hensa2; */
/* double sd; //標準偏差 */
Shop*data,*t;
int i,j;

data=t=malloc(sizeof(Shop)*N);
for(i=0; i<N; i++,t++) {
printf("店舗名を入力してください\n");
scanf("%s", &t->name);
printf("売上高を入力してください。\n");
scanf("%d", &t->sale);
sum += t->sale;
}
ave = sum/N;

for(i=0; i<N; i++,t++)
hensa1 += (pow(ave-t->sale, 2));

t=malloc(sizeof(Shop));
for(i=0; i<N-1; i++) {
for(j=i+1; j<N; j++) {
if(data[i].sale > data[j].sale) {
t[0]=data[i];
data[i]=data[j];
data[j]=t[0];
}
}
}
printf("\n");
printf("%g\t:Sum\n%g\t:Average\n%g\t:Standard deviation\n", sum,ave,sqrt(hensa1)/N);
pp(data);

return 0;
}

投稿日時 - 2011-09-04 05:08:09

QNo.6988028

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

Visual Studioで作成しているのならDOSプロンプト画面を開いてから実行したら?
それにしても標準偏差の計算の仕方は正しいですか?

投稿日時 - 2011-09-05 14:30:36

ANo.2

>エンターキーを押すと強制的にプロンプトが閉じてしまいます。
アドバイスの通り変数を初期化しましたが結果は同じでした。
一体何がダメなのでしょうか?

それはそうでしょう。
最後に、何かキーを押すまでプログラムの終了を
待つという処理を入れてください。

投稿日時 - 2011-09-05 08:37:33

補足

いえ、自分の言いたいのは、プロンプト上で

店舗名を入力してください
tanaka
売上高を入力してください。
10
店舗名を入力してください
yamada
売上高を入力してください。
20

の、「20」を入力し、平均、合計、標準偏差、並び替えを実行させるためにエンターを押すと画面が消えてしまうと言うことです。

投稿日時 - 2011-09-05 21:55:25

ANo.1

コンパイルが通らないのでしょうか
または、意図した通りに実行されないのでしょうか
もしそうなら、どのような挙動をするのか、どう動いて欲しいか、
示していただけるとアドバイスしやすいです

とりあえず、double型のsumとhensa1が初期化されていませんね
+=を使うときは、変数が初期化されているかどうかに注意すべきです
宣言時に
double sum=0;
double hensa1=0;
とすると良いでしょう

投稿日時 - 2011-09-04 06:47:19

補足

説明不足でした、すみません。
コンパイル時にとりあえずデバッグは完了し、コマンドプロンプトが現れます。
期待する動作としては、ご覧の通り任意の店舗名、売上高を入力すると売り上げ順に店舗を並び替え、表示されるというものなのですが、自分のコンパイラ(vc++2008)では2つ目の店舗の売上高を入力し、エンターキーを押すと強制的にプロンプトが閉じてしまいます。
アドバイスの通り変数を初期化しましたが結果は同じでした。
一体何がダメなのでしょうか?

投稿日時 - 2011-09-04 09:18:40

あなたにオススメの質問