Как изменить глобальные переменные на локальные переменные в C?

Я выполнил свое задание, и все работает так, как я хочу, но дело в том, что мне не разрешено иметь глобальные переменные в этом проекте, поэтому все должно быть в функциях. Поскольку я новичок в C, я действительно не знаю, как получить эту работу, я имею в виду, как изменить мои глобальные переменные на локальные.

Ценю вашу помощь!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int tal[99] = { -1 };
int bubbles, byte, c, d, val;

/* Function for number gen*/
int talserie() {
    srand(time(NULL));
    for (c = 0; c < 100; c++) {

        tal[c] = rand() % 901;
        printf(" %d ", tal[c]);

        if ((c + 1) % 10 == 0)
            printf("\n");
    }
}
/* Funktion för bubble sort*/
int bubbel() {
    for (c = 0; c < (99); c++)
    {
        for (d = 0; d < 99 - c; d++)
        {
            if (tal[d] > tal[d + 1])
            {
                byte = tal[d];
                tal[d] = tal[d + 1];
                tal[d + 1] = byte;
            }
        }
    }

    for (c = 0; c < 100; c++) {
        printf(" %d ", tal[c]);
        if ((c + 1) % 10 == 0)
            printf("\n");
    }
}

/* Funktion för median-, max/min- och medelvärde*/
int varde() {
    printf("\nMaxvärdet är: %d", tal[99]);
    printf("\nMinvärdet är: %d", tal[0]);

    int total = 0;
    for (c = 0; c < 100; c++) {
        total = total + tal[c];
    }

    printf("\nMedelvärdet är: %d", total / 100);
    printf("\nMedianvärdet är: %d", ((tal[49] + tal[50]) / 2));
}

/*Funktion leta siffra*/
int siffra() {
    printf("\nSkriv in en siffra: ");
    scanf("%d", &val);
    d = 0;
    for (c = 0; c < 100; c++) {
        if (tal[c] == val) {
            d = 1;
            printf("\nFinns i talföljden på plats: ");
            if (c <= 9)
                printf(" Rad 1 och Kolumn %d\n", c + 1);
            else if (c > 9 && c <= 19)
                printf(" Rad 2 och Kolumn %d\n", (c + 1) - 10);
            else if (c > 19 && c <= 29)
                printf(" Rad 3 och Kolumn %d\n", (c + 1) - 20);
            else if (c > 29 && c <= 39)
                printf(" Rad 4 och Kolumn %d\n", (c + 1) - 30);
            else if (c > 39 && c <= 49)
                printf(" Rad 5 och Kolumn %d\n", (c + 1) - 40);
            else if (c > 49 && c <= 59)
                printf(" Rad 6 och Kolumn %d\n", (c + 1) - 50);
            else if (c > 59 && c <= 69)
                printf(" Rad 7 och Kolumn %d\n", (c + 1) - 60);
            else if (c > 69 && c <= 79)
                printf(" Rad 8 och Kolumn %d\n", (c + 1) - 70);
            else if (c > 79 && c <= 89)
                printf(" Rad 9 och Kolumn %d\n", (c + 1) - 80);
            else if (c > 89 && c <= 99)
                printf(" Rad 10 och Kolumn %d\n", (c + 1) - 90);
            break;
        }
    }
    if (d == 0);
    {
        printf("\n%d Finns inte i talföljden", val);
    }
}
/* Main funktion med switch meny*/
int main()
{
    while (val != 5) {
        printf("\n1. Generera en talföljd med 100 tal mellan 0-900.");
        printf("\n2. Sortera talföljden i storleksordning.");
        printf("\n3. Räkna ut medelvärde, median och maxvärde.");
        printf("\n4. Sök efter valfritt tal.");
        printf("\n5. För att avsluta\n");
        printf("Skriv in ett val (1-5): ");



        scanf("%d", &val);

        switch (val) {

        case 1:
            talserie();
            break;

        case 2:
            if (tal[0] == -1)
                printf("\nFel! Generera en talföljd först!\n");
            else
                bubbel();
            break;

        case 3:
            if (tal[0] == -1) /* Arrayen innehåller -1 i [0] innan talföljden genereras"*/
                printf("\nFel! Generera en talföljd först!\n");
            else if (tal[0] <= tal[1] && tal[1] <= tal[2] && tal[2] <= tal[3])

                varde();
            else
                printf("\nFel! Sortera talföljden i storleksordning först!\n");
            break;

        case 4:
            if (tal[0] == -1)
                printf("\nFel! Generera en talföljd först!\n");
            else if (tal[0] <= tal[1] && tal[1] <= tal[2] && tal[2] <= tal[3])
                siffra();
            else
                printf("\nFel! Sortera talföljden i storleksordning först!\n");
            break;

        }
    }
    return 0;
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я говорю в общем, а потом вы внесете в свою программу частные изменения.

Допустим, вы используете одну из своих глобальных переменных в функции foo(). Если вы хотите, чтобы ваша переменная больше не была глобальной, вам нужно передать ее в foo() в качестве одного из аргументов.

Таким образом, вы должны объявить переменную как локальную переменную в функции, которая будет вызывать foo()

void caller( void )
{
    int local;
   
    foo( local );
}

void foo( int var )
{
...Some code...
}

Это была передача по значению, если вам нужно foo() изменить переменную, вам нужно передать по ссылке

void caller( void )
{
    int local;
   
    foo( &local );
}

void foo( int *pointerToVar )
{
...Some code...
}

Обновлено: вот пример, чтобы ответить на ваш комментарий. В основном у вас будет

int main()
{
    int tal[99], c;

    talserie(tal, c);
    ...
}

И ваша функция будет

talserie(int tal[99], int c)
{
    ...
}

Но если вам не нужно использовать c в main, вы можете объявить его прямо в talserie и передать только tal

Да, я пробовал это, но потом получаю ошибки при использовании функций в переключателе. Он говорит, что я должен написать функцию int, и после записи int я получаю сообщение об ошибке int.

Masih MK 12.12.2020 20:38

В моем примере я поставил возвращаемый тип void, но вы должны поставить все, что вам нужно.

anotherOne 12.12.2020 20:44

Спасибо за ваше время, но я не понимаю, потому что я новичок в программировании и впервые работаю с функциями.

Masih MK 12.12.2020 20:53

Возможно, это поможет вам лучше понять stackoverflow.com/questions/176118/… и, похоже, вам нужно разъяснение о передаче и перенастройке аргументов для работы. Гугли эти вещи

anotherOne 12.12.2020 21:07

Я попытался записать свои переменные в функцию, которая выглядит так: void talserie(int tal[99], int c); В основном у меня есть переключатель, в котором я использовал функции, и, изменяя переменные, я получаю ошибку в этих функциях. Я также пытался объявить переменные в main, но не работает.

Masih MK 12.12.2020 21:41

Неважно, поправили сейчас. Я забыл записать свои переменные в круглые скобки функций в main, используя их для переключения

Masih MK 12.12.2020 21:55

@Masih MK Я рад, что вы решили проблему. В любом случае, я написал кое-что еще в ответе, если вам интересно

anotherOne 12.12.2020 21:59

Спасибо, это помогло мне понять, что я должен был сделать.

Masih MK 17.12.2020 19:27

Поскольку я нашел ваш ответ полезным, не могли бы вы взглянуть на другой вопрос, который я задал? Примерно такое же задание.

Masih MK 17.12.2020 23:20

@MasihMK Я сделал это :)

anotherOne 18.12.2020 00:06

Другие вопросы по теме