@viktor_kond

Что надо поменять чтобы переменные стали локальными вместо глобальных?

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <locale.h>
#include <string.h>
struct detail { char name[50]; int price; int col; };
detail mas[5];
void v(int s) {
for (int i = 0; i < s; i++) {
		printf_s("Деталь №%d\n", i + 1);
		printf_s("Введите название детали:");
		scanf_s("%s", &mas[i].name, 50);
		printf_s("Введите цену детали:");
		scanf_s("%d", &mas[i].price);
		printf_s("Введите количество деталей:");
		scanf_s("%d", &mas[i].col);
	}
}

int maximum(int s) {
	int max;
	int n = 0;
		max = mas[0].price;
	for (int i = 0; i < s; i++) {
		if (mas[i].price > max) {
			max = mas[i].price;
			n = i;
		}
	}
		return n;
}

void f(const char *z){
	int c = 0;
		int x = 0;
	for (int i = 0; i < 5; i++) {
		x = strcmp(mas[i].name, z);
		if (x == 0) c = i;
	}
		printf_s("Цена указаннной детали: %d\n", mas[c].price);
	printf_s("Количество штук указанной детали: %d\n", mas[c].col);
}

int main()
{
	setlocale(LC_ALL, "Rus");
		v(5);
	int z = maximum(5);
	printf_s("Самая дорогая деталь это %s\n", mas[z].name);
	printf_s("Цена самой дорогой детали %d\n", mas[z].price); \
	printf_s("Количество деталей %d\n", mas[z].col);
	char y[10];
	while (getchar() != '\n');
	gets_s(y);
		f(&y[0]);
}
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Adamos
@Adamos
Перекинуть код объявления и заполнения mas внутрь main.
Передавать mas как аргумент по ссылке в каждую из функций, его использующих.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@DmitrySolomennikov
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <locale.h>
#include <string.h>
struct detail { char name[50]; int price; int col; };

void v(int s, detail const (*mas)[5]) {
    for (int i = 0; i < s; i++) {
        printf_s("Деталь №%d\n", i + 1);
        printf_s("Введите название детали:");
        scanf_s("%s", (*mas)[i].name, 50);
        printf_s("Введите цену детали:");
        scanf_s("%d", &(*mas)[i].price);
        printf_s("Введите количество деталей:");
        scanf_s("%d", &(*mas)[i].col);
    }
}

int maximum(int s, detail const (*mas)[5]) {
    int max;
    int n = 0;
    max = (*mas)[0].price;
    for (int i = 0; i < s; i++) {
        if ((*mas)[i].price > max) {
            max = (*mas)[i].price;
            n = i;
        }
    }
    return n;
}

void f(const char* z, detail const (*mas)[5]) {
    int c = 0;
    int x = 0;
    for (int i = 0; i < 5; i++) {
        x = strcmp((*mas)[i].name, z);
        if (x == 0) c = i;
    }
    printf_s("Цена указаннной детали: %d\n", (*mas)[c].price);
    printf_s("Количество штук указанной детали: %d\n", (*mas)[c].col);
}

int main()
{
    detail mas[5];

    setlocale(LC_ALL, "Rus");
    v(5, &mas);
    int z = maximum(5, &mas);
    printf_s("Самая дорогая деталь это %s\n", mas[z].name);
    printf_s("Цена самой дорогой детали %d\n", mas[z].price);
    printf_s("Количество деталей %d\n", mas[z].col);
    char y[10];
    while (getchar() != '\n');
    gets_s(y);
    f(&y[0], &mas);
}

Переменную detail mas[5]; нужно перенести внутрь функции main, а в остальные функции передать указатель на эту переменную.

(Обсуждение вида указателей оставим за скобками этого вопроса)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы