@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, а в остальные функции передать указатель на эту переменную.

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

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

Похожие вопросы