Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    C sostituire char all'interno di un vettore

    #include<stdio.h>
    #include<stdlib.h>
    #include<limits.h>


    int main (void)
    {
    const MAX_DIM=100;
    int n,i;
    char car1, car2;
    do{
    printf("\nQuanti elementi vuoi che contenga il tuo vettore?\t");
    scanf("%d", &n);
    if((n<=0)||(n>MAX_DIM))
    printf("\nerrore");
    }while((n<=0)||(n>MAX_DIM));
    char vett[MAX_DIM];
    for(i=0; i<n; i++)
    {
    printf("\nInserisci il carattere %d:\t", i+1);
    scanf("%s", &vett[i]);
    }
    printf("\nInserisci il carattere che verra sostituito:\t");
    scanf("%s", &car1);
    printf("\nInserisci il carattere sostituto:\t");
    scanf("%s", &car2);
    for(i=0; i<n; i++)
    {
    if(vett[i]==car1)
    vett[i]=car2;
    }
    for(i=0; i<n; i++)
    printf("\t %c", vett[i]);
    }

    ciao a tutti, scusate ma non capisco perchè il programma non mi legge l'ultimo ciclo for.. sono impazzita io?? dove sbaglio?? il programma deve sostituire all'interno di un vettore tutte le occorrenze di car1 con car2.. perchè alla fine non riesco a visualizzare il vettore??

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Per quanto il tuo codice potrebbe funzionare in specifici casi (tutta fortuna), è certamente sbagliato. Infatti dovresti usare %s solamente per la lettura di parole intere. Per l'input di singoli caratteri è preferibile usare tecniche diverse.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    certamente hai ragione ma con il %c vengono visualizzate a due a due le istruzioni all'interno del for.. es: nel primo ciclo mi appare: inserisci elemento 1:
    inserisci elemento 2:_

    non capisco.. che dovrei mettere??

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Il problema è che scanf lascia sporco il buffer. Utilizza il seguente codice
    codice:
    void clear_buffer(void) {
     while(getchar() != '\n');
    }
    char char_in(void) {
     char tmp = getchar();
     clear_buffer();
     return tmp;
    }
    Aggiungi un clear_buffer(); dopo il ciclo che legge n e sostituisci le letture dei caratteri con variabile = char_in();
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Se vuoi creare un array di dimensioni dipendenti da un input , dovresti usare un puntatore e allocazione dinamica .
    in c le variabili dovrebbero essere dichiarate a inizio funzione , compilatori meno permissivi di quello che stai usando genererebbero un
    errore .

    }while((n<=0)||(n>MAX_DIM));
    char vett[MAX_DIM];
    Tecnologia

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Se vuoi creare un array di dimensioni dipendenti da un input , dovresti usare un puntatore e allocazione dinamica .
    Non è necessario se prevede un massimo come lei ha fatto e controlla di non sforare questo massimo. Certo, così il programma è soggetto ad alcune limitazioni, ma è pienamente corretto.
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    in c le variabili dovrebbero essere dichiarate a inizio funzione , compilatori meno permissivi di quello che stai usando genererebbero un
    errore .

    }while((n<=0)||(n>MAX_DIM));
    char vett[MAX_DIM];
    Scorretto: in C99 puoi dichiarare variabili (quasi) in ogni luogo. In C89 dovrebbero essere dichiarate solo all'inizio del blocco, ma praticamente tutti i compilatori supportano una dichiarazione a metà blocco (sebbene non tutti nella prima clausola del for).

    Edit: notare comunque che si parla di blocco, non funzione.

    Se avessi tempo ti cercherei i passi dello standard, ma questi due thread su SO vanno bene pure:
    http://stackoverflow.com/questions/2...ariable-in-c99
    http://stackoverflow.com/questions/2...placement-in-c
    Ultima modifica di Scara95; 19-06-2014 a 06:42
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    In visual studio "non so che standard adotti ", non è eseguibile quel codice .....


    Poi mio parere personale "discutibile" , se si adotta lo standard ansi c89 , il programma sarà sempre compilato correttamente .


    ma poi accetto , quello che dicono i professionisti , ci mancherebbe.
    Ultima modifica di torn24; 19-06-2014 a 07:08 Motivo: Considerazioni
    Tecnologia

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    In realtà il modo migliore per avere supporto è scrivere ne subset C dato dall'intersezione C/C++ (Chiamato anche clean C alcune volte). In questo modo puoi sfruttare la maggioranza dei compilatori.

    In ogni caso Visual Studio supporta le difinizioni a metà blocco se non compili con pedantic (almeno a quanto mi risulta).
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.