如何在C中将全局变量更改为局部变量?
How to change the globale variables to local variables in 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;
}
我说的是一般情况,然后您将在程序中进行特定的更改。
假设您在函数 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)
{
...
}
但是如果你不需要在main中使用c
,你可以直接声明到talserie
中,你只传递tal
我完成了我的任务,一切都按我想要的方式工作,但问题是我不允许在这个项目中使用全局变量,因此每件事都应该在函数中。由于我是 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)
{
...
}
但是如果你不需要在main中使用c
,你可以直接声明到talserie
中,你只传递tal