@tostr007

Возникает ошибка Ошибка C4700 использована неинициализированная локальная переменная как исправить?

#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#pragma warning(disable : 4996)

// do when win
double winWay(double a, double b)
{
	return a + b;
}
// do when lose
double loseWay(double a, double b)
{
	return a - b;
}
// randomizer
double dr(double zb)
{
	return zb = (rand() % 100) / (100 * 1.0);
}

// Program
void main()
{
	printf("make a stake 100 on 1, or 0, your money 1000");
	double a, b, e, d;
		scanf("%lf", &e);
		a = 1000;
		b = 100;
		printf("%lf", dr(double zb));
		if (d == e)
		{
			printf("Win! your cash:%lf", winWay(a, b));
			double a = winWay(a, b);
		}
		else
		{
			printf("Lose your cash:%lf", loseWay(a, b));
			double a = loseWay(a, b);
		}
	system("pause");
}
  • Вопрос задан
  • 704 просмотра
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
#include "stdio.h"
#include "stdlib.h"

Лучше это писать в угловых скобках.

double dr(double zb)
{
    return zb = (rand() % 100) / (100 * 1.0);
}

Присваиваем параметру zb что-то, чтобы его похѣрить? Параметр будет жить до конца функции и НЕ ВЕРНЁТСЯ в вызвавшую программу (параметры передаются по копии).
Кстати, параметр zb ни на что не используется: что бы вы ни передали туда снаружи, подпрограмма в этот параметр не посмотрит.

printf("%lf", dr(double zb));
На G++ не скомпилировалось. Ну, написал dr(0), благо параметр не используется ни на что.

if (d == e)
{
    printf("Win! your cash:%lf", winWay(a, b));

C:\TestApps\ErrUninitLocal\main.cpp|30|warning: 'd' may be used uninitialized in this function [-Wmaybe-uninitialized]|
А действительно, переменная d нигде никому не присваивается.

И ещё одно. Я не знаю, как действует Visual C, но модификатор l для формата %f нужен для scanf, но не нужен для printf. Вот так-то всё это дело устроено.

double a = winWay(a, b);
}

Что мы делаем? Присваиваем локальной переменной, чьё имя пересекается с более ранней переменной, чтобы её сразу же похѣрить? Она доживёт до ближайшей закрытой скобки.

C:\TestApps\ErrUninitLocal\main.cpp|33|warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]|
Тут вообще забавно работает. double a — считаем, что a определилась. = winWay(a, b) — считаем, что используется ОНА ЖЕ, а не более ранняя a. Естественно, неинициализированная.

(аналогично с loseway)
C:\TestApps\ErrUninitLocal\main.cpp|38|warning: 'a' may be used uninitialized in this function [-Wmaybe-uninitialized]|
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час