1. ホーム
  2. c

[解決済み] ランタイムチェックの失敗例その3 - T

2022-02-28 13:55:34

質問

私のコードにエラーがあります

Run Time Check Failure #3 - T

何度も直そうとした。 が、失敗しました。 x, yにポインタを追加しました。 が、"Run Time Check Failure #3 - T" - 同じエラーです。 このエラーを修正するために私を助けることができますか?

#include<stdio.h>
#include<math.h>    

typedef struct {
    double x, y;
}location;
double dist(location a,location b)
{
    return sqrt(pow(b.x - a.x, 2.0) + pow(b.y -a.y, 2.0));
}
void func(location l, location e)
{
    double z;
    location a = l;
    location b = e;
    printf("enter two dots:");
    scanf("%lf %lf", a.x, a.y);
    printf("enter two dots:");
    scanf("%1",a, b);
    printf("%.2lf", z);

}

void main()
{
    location l;
    location e;
    func(l, e);
}

解決方法は?

コードの問題点はこのようなものでした。

1) scanf 変数の引数はポインタとして渡す必要があります。下記のscanfの変更点を参照してください。

2) 構造体で変数を初期化する - 実行時検査失敗の3番目の警告です。

また、少し簡略化しました。 お役に立てれば幸いです。

#include<stdio.h>
#include<math.h>    

typedef struct {
    double x, y;
}location;

double dist(location a, location b)
{
    return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}

void main()
{
    location start = { 0 };
    location end = { 0 };
    printf("Enter start x, y co-ordinates: ");
    scanf("%lf %lf", &start.x, &start.y);

    printf("Enter end x, y co-ordinates: ");
    scanf("%lf %lf", &end.x, &end.y);

    printf("The distance between start and end: %lf\n", dist(start, end));
}