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

    [ C ] problema con immisione di char

    ciao
    ho creato un programma che crea un array di una grandezza specificata dall utente e legge gli elementi sotto forma di char...
    purtroppo, quando lo lancio, legge il carattere \n come un char immesso...
    qualcuno mi puo aiutare???

    Il codice:
    codice:
    #include <stdio.h>
    
    main()
    {
    	int GRANDEZZA_INSIEME;
    	char ElementoX;
    	int count = 0;
    	printf("Inserisci il numero di elementi presenti nell' insieme...\n");
    	scanf("%d", &GRANDEZZA_INSIEME);
    	printf("Creato insieme di %d elementi...\n", GRANDEZZA_INSIEME);
    	char Insieme[GRANDEZZA_INSIEME];
    	while(count <= (GRANDEZZA_INSIEME - 1))
    	{
    		printf("Inserisci l elemento numero %d dell' insieme... ", count + 1);
    		scanf("%c", &Insieme[count]);
    		printf("Inserito l elemento %c nell' insieme...\n", Insieme[count]);
    		count++;
    	}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213
    Allora a parte che ci sono parecchi errori la funzione fa al caso tuo è fflush(stdin). Però ci sono alcuni errori molto importanti tipo la funzione main prima di tutto deve ritornare qualcosa e quindi o fai int main() con un return 0 alla fine oppure void main().
    Altro errore importante è che non puoi assolutamente dichiarare un array con una lunghezza data in input come hai fatto tu. Più precisamente lo puoi fare ma devi dichiarare l'array come puntatore e dopo allocare memoria con la funzione malloc() o calloc(). Come hai fatto tu è decisamente errato.

    Ti consiglio di rivederti un pò le cose che ti ho citato e di aggiustare il programma, nel caso comunque questo è il codice ma sicuramente imparerai di più a rifarlo da solo con meno errori.

    codice:
    #include <stdio.h>
    
    int main()
    {
        int GRANDEZZA_INSIEME;
        char ElementoX;
        int count = 0;
        printf("Inserisci il numero di elementi presenti nell' insieme...\n");
        scanf("%d", &GRANDEZZA_INSIEME);
        printf("Creato insieme di %d elementi...\n", GRANDEZZA_INSIEME);
        char Insieme[GRANDEZZA_INSIEME];
        while(count <= (GRANDEZZA_INSIEME - 1))
        {
            fflush(stdin);
            printf("Inserisci l elemento numero %d dell' insieme... ", count + 1);
            scanf("%c", &Insieme[count]);
            printf("Inserito l elemento %c nell' insieme...\n", Insieme[count]);
            count++;
        }
        return 0;
    }

  3. #3
    grazie

  4. #4
    Occhio che fflush(stdin) non è standard, e infatti con gcc non funziona proprio. Il modo "portabile" per fare quel mestiere è scartare tutti i caratteri che si incontrano fino ad un newline o alla fine dello stream.
    codice:
    for(char c=0; c!=EOF && c!='\n'; c=getchar())
        ;
    Amaro C++, il gusto pieno dell'undefined behavior.

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.