C-不同数组的成员共享指针



我是C的新手,正在学习printf、scanf函数和变量。我制作了一个程序,从用户那里获取一些变量,并将它们存储在两个不同的数组中。但由于某种原因,不同数组的2个成员共享指针,从而共享值。这是我的代码:

setlocale(LC_ALL,"Turkish");
double odev[2];
double quiz[2];
printf("Dönem sonu not hesaplama sistemine hoş geldiniz.n");
for(short i=0;i <= 2;i++)//Ödev notunu 3 kez almasi için
{
while(true)
{
char girdi[20];
printf("%d. ödev notunu giriniz:",i+1);
scanf("%s", girdi);
bool floatKontrol = true;
int girdiuzunluk = strlen(girdi);
for(short j = 0;j < girdiuzunluk && floatKontrol;j++)
{
if(!(girdi[j] == ',' || isdigit(girdi[j])))
{
if(girdi[j] == '.')
{
girdi[j] = ',';
}
else
{
floatKontrol = false;
printf("Girmiş olduğunuz değer anlaşılamamıştır. Lütfen pozitif sayılar giriniz.n");
}
}
}
if(floatKontrol)
{
odev[i] = strtod(girdi, NULL);
printf("%fn",odev[i]);
if(odev[i]>100)
{
printf("100'ün üzerinde değer girilemez. Lütfen tekrar deneyin.n");
}
else{
break;
}
}
}
}
for(short i=0;i <= 2;i++)
{
while(true)
{
char girdi[20];
printf("%d. quiz notunu giriniz:",i+1);
scanf("%s", girdi);
bool floatKontrol = true;
int girdiuzunluk = strlen(girdi);
for(short j = 0;j < girdiuzunluk && floatKontrol;j++)
{
if(!(girdi[j] == ',' || isdigit(girdi[j])))
{
if(girdi[j] == '.')
{
girdi[j] = ',';
}
else
{
floatKontrol = false;
printf("Girmiş olduğunuz değer anlaşılamamıştır. Lütfen pozitif sayılar giriniz.n");
}
}
}
if(floatKontrol)
{
quiz[i] = strtod(girdi, NULL);
if(quiz[i]>100)
{
printf("100'ün üzerinde değer girilemez. Lütfen tekrar deneyin.n");
}
else{
break;
}
}
}
}
printf("%fn",odev[0]);
printf("%fn",odev[1]);
printf("%fn",odev[2]);
printf("%fn",quiz[0]);
printf("%fn",quiz[1]);
printf("%n",quiz[2]);

用户输入和控制台输出:

> Dönem sonu not hesaplama sistemine hoÅY geldiniz.
>1. ödev notunu giriniz:23
>23,000000
>2. ödev notunu giriniz:48
>48,000000
>3. ödev notunu giriniz:31
>31,000000
>1. quiz notunu giriniz:4
>2. quiz notunu giriniz:5
>3. quiz notunu giriniz:6  
>6,000000  
>48,000000  
>31,000000  
>4,000000  
>5,000000  
>6,000000

当我制作程序写入数组成员的指针时,输出是这样的:

>Dönem sonu not hesaplama sistemine hoÅY geldiniz.
>1. ödev notunu giriniz:23
>23,000000
>2. ödev notunu giriniz:48
>48,000000
>3. ödev notunu giriniz:31
>31,000000
>1. quiz notunu giriniz:4
>2. quiz notunu giriniz:5
>3. quiz notunu giriniz:6  
>000000000061FDD0  
>000000000061FDD8  
>000000000061FDE0  
>000000000061FDC0  
>000000000061FDC8  
>000000000061FDD0  

我的IDE:代码::块20.03

在C中,当您声明数组时,您必须指定元素的数量,而不是最大索引

您声明了double odev[2];,因此只有odev[0]odev[1]可用,并且odev[2]超出范围。CCD_ 5也在范围之外。

分配足够的元素,如

double odev[3];
double quiz[3];

或者(如果你觉得这更容易理解(

double odev[2+1];
double quiz[2+1];

以消除此错误。

最新更新