Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    1

    [C++] doppio invio printf

    codice:
    // programma che accetta in input una stringa di caratteri e ritorni quante vocali ci sono
    #include<stdlib.h>
    #include<stdio.h>
    int main ()
    {
        int dim=0;
        printf ("inserire il numero di caratteri\n");
        scanf ("%d/n",&dim); //%d perchè è un intero
        char a[dim];
      
       
        
        for(int i=0;i<dim;i++) 
        { 
         printf ("inserisci il carattere in posizione %d\n",i);
        scanf ("%c", &a[i]);
           
          }
          
     system ("pause");
     return 0; 
    }

    premettendo che non è finito...
    Perhè nell'esecuzione visualizza due volte il printf del for?
    Ultima modifica di LeleFT; 11-11-2014 a 17:15 Motivo: Corretti tag QUOTE con appositi tag CODE

  2. #2
    Il problema dipende, per l'ennesima volta, dall'uso della deprecatissima scanf().

    Dopo ogni acquisizione, è necessario fare pulizia del buffer di tastiera, invocando una funzione come la seguente:
    codice:
    void clearKeyboardBuffer() 
    {
        char ch;
        do 
        {
            ch = getchar();
        } while (('\n' != ch) && (EOF != ch));
        /* In sintesi: while ((ch = getchar() != '\n') && (ch != EOF)); */
    }
    Inoltre il tuo codice andrebbe reingegnerizzato, anche se probabilmente ti sono stati impoosti dei vincoli didattici. Il metodo più razionale e robusto per acquisire una stringa da tastiera consiste infatti nell'uso di fgets(). Inoltre il dimensionamento dinamico dell'array da te usato
    codice:
    char a[dim];
    è altamente deprecato e va evitato accuratamente. In casi del genere le uniche due alternative corrette sono l'allocazione statica o una vera allocazione dinamica con malloc(). Anche se al momento hai degli obblighi didattici, per il futuro tieni ben presenti queste nozioni.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.