suchen von Elementen in einem array mit einer Funktion c++
Ich bin neu in C++ und haben gerade angefangen zu lernen-Funktionen. Ich habe ein Programm zur Suche eines Elements in einem 1-d array mit einer Funktion Suche. Aber es gibt einen logischen Fehler, die ich nicht nachvollziehen kann! Ist es wegen der Art, wie die Funktion deklariert ist ?
int pos;
using namespace std;
int search(int *a, int size, int num);
int search(int *a, int size, int num)
{
int i;
for(i=0; i<size; i++)
{
if(a[i]==num)
{
pos=i; return 1;
}
else
return 0;
}
}
int main()
{
int a[5], size, num, i;
system("cls");
cout<<"Enter size(<5) \n";
cin>>size;
cout<<"Enter the elements of the array \n";
for(i=0; i<size; i++)
cin>>a[i];
cout<<"Enter the number to be searched \n";
cin>>num;
int b = search( a, size, num);
if(b==0)
{
cout<<"Element not found!"; exit(0);
}
else
cout<<"Element found at position "<<(pos+1);
system("pause");
return 0;
}
Ausgabe:
Enter size(<5)
4
Enter the elements of the array
4
3
2
1
Enter element to be searched
4
Element not found!
- bitte formatieren Sie Ihre Frage und stellen "else return 0;" außerhalb "für"
- Auch nach dieser änderung immer noch nicht korrekt ausgeführt :- for(i=0; i<Größe; i++) { if(a[i]==num) { pos=i; return 1; } return 0; } }
- Ihre Funktion Suche soll nicht return false inside 'für' bloc. ein Beispiel nehmen und Durchlaufen Sie es manuell, du findest die Fehler selbst sicher!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Funktion immer zurück in die erste Schleife iteration. Wenn das erste element ist nicht die, die gesucht werden, wird 0 zurückgegeben sofort. Die Schleife nie geht in die zweite iteration.
müssen Sie ihn wieder nicht gefunden, wenn Sie nicht gefunden jedes Ding, mit diesem code, werden Sie immer null zurückgeben, wenn das erste element ist nicht das, was Sie suchen. so etwas wie dieses :
Es ist in Ihrer Logik
Lassen Sie uns Schritt für Schritt durch, die. Ich werde es
[1, 2, 3, 4]
,4
, und3
.So prüfen Sie die ersten, und wenn das nicht funktioniert, wird es sofort fehl.
Also versuchen Sie dies:
Jedoch der bessere Weg wäre, so etwas zu tun, und befreien Sie sich von Ihrem globalen Variablen
Dann, wenn Sie etwas bekommen
!= -1
Sie haben gefunden es.Ihre
search
Funktion nicht das tun, was Sie denken, es ist so: es wird zurück0
sobalda[i]!=num
, also nicht Rücksicht auf den rest der Elemente des Arrays.Sollten Sie besser mit etwas wie dieses, mit einem (nicht-Globale) variable zurückgegeben:
Das problem mit der else-Anweisung. Wenn das element nicht gefunden wird, sofort, es wird automatisch 0 zurückgegeben. Außerdem, Sie nutzen die ganze Zahl 0, um anzuzeigen, dass das element nicht gefunden, aber was ist, wenn das element an position 0 gefunden (ich.e es ist das erste element des Arrays)? Dann werden Sie immer noch sagen, dass das element nicht gefunden, obwohl es eindeutig, es existiert in dem array. Hier ist, wie ich es tun würde.
Ich hoffe, Sie haben gelernt, über booleans (ich.e true oder false.) Da Sie Ihre Funktion Haupt-Zweck ist zu suchen, sollte es wieder werden, ob das element gefunden wird (true) oder ob nicht (false). Daher werden wir in einer Schleife durch das array und wenn wir es finden, wir geben die position des Elements, und geben true zurück. Andernfalls, wenn wir beenden die Schleife, das bedeutet, das element wurde nicht gefunden, so dass wir Ausgabe, und geben Sie false zurück. Dieser entledigt sich der globalen variable Nutzung und die vorherigen Probleme, die ich erwähnt habe.