Я выполнил свое задание, и все работает так, как я хочу, но дело в том, что мне не разрешено иметь глобальные переменные в этом проекте, поэтому все должно быть в функциях. Поскольку я новичок в 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;
}
Я говорю в общем, а потом вы внесете в свою программу частные изменения.
Допустим, вы используете одну из своих глобальных переменных в функции 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
В моем примере я поставил возвращаемый тип void
, но вы должны поставить все, что вам нужно.
Спасибо за ваше время, но я не понимаю, потому что я новичок в программировании и впервые работаю с функциями.
Возможно, это поможет вам лучше понять stackoverflow.com/questions/176118/… и, похоже, вам нужно разъяснение о передаче и перенастройке аргументов для работы. Гугли эти вещи
Я попытался записать свои переменные в функцию, которая выглядит так: void talserie(int tal[99], int c); В основном у меня есть переключатель, в котором я использовал функции, и, изменяя переменные, я получаю ошибку в этих функциях. Я также пытался объявить переменные в main, но не работает.
Неважно, поправили сейчас. Я забыл записать свои переменные в круглые скобки функций в main, используя их для переключения
@Masih MK Я рад, что вы решили проблему. В любом случае, я написал кое-что еще в ответе, если вам интересно
Спасибо, это помогло мне понять, что я должен был сделать.
Поскольку я нашел ваш ответ полезным, не могли бы вы взглянуть на другой вопрос, который я задал? Примерно такое же задание.
@MasihMK Я сделал это :)
Да, я пробовал это, но потом получаю ошибки при использовании функций в переключателе. Он говорит, что я должен написать функцию int, и после записи int я получаю сообщение об ошибке int.