Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26

    [C] Variabile ciclo for, esegue contenuto ogni due iterazioni.

    Salve a tutti,
    come da titolo, mi ritrovo con un ciclo for che esegue il suo contenuto ogni 2 iterazioni.
    La cosa strana è che accade la stessa cosa per due cicli for,in due funzioni diverse e che all'eseguire dell'una, non viene eseguita l'altra. Detto questo, si può pensare che il problema sia del main,ma non vedo niente di errato nel mio codice:

    main.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char *a_din(short);
    void a_sta(short,char[]);
    
    void main()
    {
        short n,x;
        char s_sta[100], *s_din;
    
    
        puts("1.Allocazione dinamica;");
        puts("2.Allocazione statica;");
        puts("3.Chiudi.");
    
    
    
        while(x!=3)
        {
            fflush(stdin);
            printf("\nInserire scelta:\n");
            scanf("%hd",&x);
    
            switch(x)
            {
    
            case 1:     printf("\nInserire il size della stringa\n");
                        scanf("%hd",&n);
                        puts("Allocazione dinamica:");
                        s_din=a_din(n);
                        printf("\nLa stringa è:\t %s",s_din);
                        break;
    
            case 2:     printf("\nInserire il size della stringa\n");
                        scanf("%hd",&n);
                        puts("Allocazione statica:");
                        a_sta(n,s_sta);
                        printf("La stringa è: %s",s_sta);
                        break;
    
            default:    break;
            }
        }
    }
    a_din.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char *a_din(short n)
    {
        char *str;
        short i;
    
        str=(char*)malloc(n+1);
    
        if(str!=NULL)
        {
            for(i=0;i<n-1;i++)
            {
                fflush(stdin);
                printf("\nInserisci il %hd^ carattere:\t",i+1);
                str[i]=getchar();
            }
    
            str[i]='\0';
    
            return str;
        }
    }
    a_sta.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void a_sta(short n,char str[])
    {
        short i=0;
        char ch;
    
        for(i=0;i<n;i++)
        {
            fflush(stdin);
            printf("\nInserisci il %hd^ carattere:",i+1);
            str[i]=getchar();
        }
    
        str[i]='\0';
    }
    Output 1:
    Schermata del 2014-02-13 14:10:19.jpg
    Output 2:
    Schermata del 2014-02-13 13:48:09.jpg

    Grazie.
    Ultima modifica di darth89; 13-02-2014 a 15:13

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Probabile che la funzione fflush(stdin)
    non sia supportata dal tuo sistema operativo e compilatore, che dalle immagini il tuo OS non è windows .
    cosa strana che il compilatore non ti dia messaggi ?? prova a sostituire fflush con while(getchar()!='\n');
    occhio al punto e virgola dopo il while , che termina l'istruzione .
    Ultima modifica di torn24; 13-02-2014 a 17:16
    Tecnologia

  3. #3
    fflush si può solo applicare a stream di output, su stream di input è undefined behavior. È praticamente solo VC++ che ne consente l'uso per svuotare il buffer di input.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2014
    Messaggi
    26
    ah ecco... infatti l'ho appena provato su windows e gira... termina con un errore,ma almeno si prende i caratteri della stringa uno ad uno e me la stampa per bene.

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551
    Ho dato la soluzione giusta , con una spiegazione totalmente sbagliata (: è quello che succede quando si impara a fare le cose senza sapere il perchè si fa così , sapevo solo che fflush(stdin) non è portabile , mia culpa .
    Tecnologia

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.