Das Hauptproblem besteht darin, dass Sie aufgrund von i<=5
auf Ihr Array außerhalb der Grenzen zugreifen. Diese Überprüfung erlaubt i
zu 5
, aber Indizes von Arrays mit c beginnen von 0
bis size-1
. Der maximal zulässige Index ist 4
.
#include <stdio.h>
int main(void)
{
int numbers[] = { 2, 10, 20, 60, 40 };
int search = 60;
for (size_t i = 0; i < sizeof(numbers)/sizeof(numbers[0]); i++)
{
printf("%d ", numbers[i]);
if (numbers[i] == search)
{
printf("Index[%zu] : Found\n", i);
//break;
}
else
{
printf("Index[%zu] : Not Found\n", i);
}
}
return 0;
}
Wie Sie ich änderte auch die for
mit sizeof(numbers)/sizeof(numbers[0]);
sehen kann, die diesen Code gewährt die Schleife auf die reale Größe der Array-Auto-Anpassung, wenn Sie es ändern.
Schließlich änderte ich i
Typ aufgrund sizeof
Rückgabetyp, die size_t
ist: das richtige Format printf
Formatspezifizierer von size_t
Typ %zu
ist.
EDIT
Der Versuch, zu erklären, warum "Found"
in diesem speziellen Fall gedruckt wird, können wir
-----------------------------------------------------------------
| array[0] | array[1] | array[2] | array[3] | array[4] | search |
-----------------------------------------------------------------
^
|
------------
| array[5] |
------------
So sehen Sie, wie zugewiesene Variable sind, wenn Sie array[5]
zuzugreifen, werden Sie tatsächlich Zugriff Wert von search
Variable, das ist 60
. So
if(numbers[i]==search)
als
if(search==search)
die offensichtlich true
ist zu sehen.
Die Indizes der Array-Elemente sind 0,1,2,3,4. Ihre Schleife liest über die Array-Grenze, indem Sie auf Index 5 gehen. Ändern Sie die Bedingung in < – StoryTeller
'i <=5' ----->' i <5' .... am besten mit 'für (size_t i = 0; sizeof (numbers)/sizeof (Zahlen [0]); i ++) '....' printf ("Index [% zu]: Gefunden \ n", i); ' – LPs
' int Zahlen [5] 'deklariert ein Array von ** 5 ** Elementen . Sie versuchen, ** 6 ** Elemente zu lesen, und das letzte ('Zahlen [5]') wird von außerhalb des Arrays gelesen. – axiac