[C] Ricerca sequenziale all'interno di un array

di il
2 risposte

[C] Ricerca sequenziale all'interno di un array

Salve a tutti!
Mi state aiutando tantissimo nel capire e imparare e ve ne sono davvero grato, ma purtroppo mi ritrovo ancora qui a crearvi fastidio
Ho scritto un programma che mi permetta, dopo aver inserito un array di 10 elementi e di avermi trovato il massimo tra questi, di farmi inserire un nuovo numero (in un'altra variabile) e trovare se questo numero fa parte o meno dell'array.
#include <stdio.h>
#include <stdlib.h>

int main(){
int a[10], i=0, massimo, max_i, appartiene=0,n;
printf("Inserisci %d-simo elemento dell'array\n",i);
scanf("%d",&a[i]);
massimo = a[i];
max_i = i;
for(i=1; i<10; i++){
    printf("Inserisci %d-simo elemento dell'array\n",i);
    scanf("%d",&a[i]);
    if(massimo<a[i]){ massimo = a[i];
                      max_i = i;}
    }
printf("Il massimo dell'array e' %d di indice %d\n",massimo, max_i);
printf("Inserisci il numero da cercare all'interno dell'array\n");
scanf("%d",n);
i=0;
for(i=1; i<10; i++){
    if(n==a[i]){appartiene=1;
                if(appartiene==1) printf("Il numero appartiene all'array\n");
                return 0;
                }
    }
if(appartiene==0) printf("Il numero non appartiene all'array\n");
return 0;
    }
La prima parte funziona bene, ma quando parte la ricerca all'interno dell'array, il programma va in crash. Cos'ho sbagliato (ancora)?

Grazie ancora per la pazienza

2 Risposte

  • Re: [C] Ricerca sequenziale all'interno di un array

    i=0;
    for(i=1; i<10; i++){
        if(n==a[i]){appartiene=1;
                    if(appartiene==1) printf("Il numero appartiene all'array\n");
                    return 0;
                    }
        }
    if(appartiene==0) printf("Il numero non appartiene all'array\n");
    return 0;
    Alcuni punti (ma che non portano ad un crash):
    - il settaggio i=0 non serve, tanto poi ci pensa il for;
    - il for fallo partire da i=0 non da i=1, altrimenti non testi il primo elemento
    - settare appartiene=1 non serve a niente, fai solo il printf() e poi return; oppure lascialo e al posto di return ci metti un break.
    Per capire il crash ti suggerisco di mettere una printf() così:
    
    for(i=0; i<10; i++){
        printf( "elemento %d valore %d\n", i, a[i] );
        ...
    
    per capire cosa succede
  • Re: [C] Ricerca sequenziale all'interno di un array

    candaluar ha scritto:


    i=0;
    for(i=1; i<10; i++){
        if(n==a[i]){appartiene=1;
                    if(appartiene==1) printf("Il numero appartiene all'array\n");
                    return 0;
                    }
        }
    if(appartiene==0) printf("Il numero non appartiene all'array\n");
    return 0;
    Alcuni punti (ma che non portano ad un crash):
    - il settaggio i=0 non serve, tanto poi ci pensa il for;
    - il for fallo partire da i=0 non da i=1, altrimenti non testi il primo elemento
    - settare appartiene=1 non serve a niente, fai solo il printf() e poi return; oppure lascialo e al posto di return ci metti un break.
    Per capire il crash ti suggerisco di mettere una printf() così:
    
    for(i=0; i<10; i++){
        printf( "elemento %d valore %d\n", i, a[i] );
        ...
    
    per capire cosa succede

    Innanzitutto, grazie per la risposta!
    scanf("%d",&n)

    Non avevo aggiunto la &.
    Infatti il ciclo partiva, stampava i numeri, all'inserimento andava in crash.

    Grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte