Problema salvataggio stringa in C.

di il
4 risposte

Problema salvataggio stringa in C.

Salve, sono nuovo del forum e volevo chiedervi un piccolo aiuto.
Sto preparando l'esame di programmazione all'università e sto man mano andando avanti con gli argomenti, ma veniamo al dunque.
Sto svolgendo un esercizio, ovvero eseguire la ricerca completa (o sequenziale) di un elemento in un vettore di caratteri. Praticamente, inserisco singolarmente tutti i caratteri della stringa, ed ovviamente li salvo tramite una scanf. Il problema si presenta quando effettuo la ricerca solo per il primo elemento, mi spiego meglio dopo aver postato il codice:
#include <stdio.h>
#define dim 100
int main() {
    char v[dim], c;
    int i, n;
    printf("\t\t\t\t\t ESEMPIO DI RICERCA COMPLETA IN UN VETTORE.\n");
    do {
        printf("\nInserire dimensione vettore compresa tra 0 e %d: ", dim);
        scanf("%d", &n);
        if (n < 0 || n > dim) {
            printf("\n\t\t\t\t\tInserire valore corretto!");
        }
    } while (n <= 0 || n > dim);
    printf("\n");
    for (i = 0; i < n; i++) {
        printf("Inserire valore di indice %d: ", i +1);
        scanf("%1s", &v[i]);
    }

    //Inizio fase di ricerca.
    printf("\n");
    printf("Inserire elemento da cercare: ");
    scanf(" %1s", &c);
    i = 0;
    while (c != v[i] && i < n)
        i++;
        if (c == v[i]) {
            printf("\n L'elemento %c e' presente nel vettore in posizione %d!", c,  i + 1);
        } else{
            printf("\n L'elemento non e' presente nel vettore!\n");
        }
}
Se stampo la stringa prima della parte di codice che segue il commento //Inizio fase di ricerca, la stringa viene stampata correttamente.
Dopo aver inserito il carattere da ricercare, invece, magicamente il primo carattere della stringa scompare. Per esempio, se la mia stringa è: QWERTY, dopo aver inserito il carattere da ricercare, la mia stringa diventerà magicamente WERTY (verificato tramite printf). Quindi, il codice funziuona correttamente, tranne che per il primo carattere, che venendo "mangiato" da non so cosa, non lo riconosce tra i caratteri presenti nella stringa. Ringrazio anticipatamente per le risposte e chiedo scusa per la lunghezza del post, ho cercato di essere il più chiaro possibile.

4 Risposte

  • Re: Problema salvataggio stringa in C.

    Usa

    scanf(" %c", &c);
  • Re: Problema salvataggio stringa in C.

    Grandissimo! Funziona e ti ringrazio.
    Volevo però chiederti. perché in questo modo si è risolto? Cosa è cambiato usando " %c" nella scanf?
  • Re: Problema salvataggio stringa in C.

    Se usi %1s il dato viene interpretato come una stringa del C di un carattere più il terminatore NUL. Il terminatore sporca la memoria nello stack sovrascrivendo il vettore di char già inserito.
    Con " %c" viene accettato un semplice char senza terminatore e sono scartati i newline.
  • Re: Problema salvataggio stringa in C.

    Perfetto, tutto chiaro adesso. Ti ringrazio per la disponibilità e soprattutto per la velocità!
Devi accedere o registrarti per scrivere nel forum
4 risposte