Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98

    Perché non fa quello che voglio io?

    Raga questo è il codice:
    codice:
    #include "func.h"
    #include <iostream.h>
    
    void main()
    {
        int a,b;
        double c,d;
        char e[20],f[20];
        cout << "Esempio swap" << endl;
        cout << "Inserisci valore primo intero:" << endl;
        cin >> a;
        cout << "Inserisci valore secondo intero:" << endl;
        cin >> b;
        cout << "Valori prima dello scambio \n"
             << "a:" << a << "\tb:" << b << endl;
        scambia(&a,&b);
        cout << "Valori dopo lo scambio \n"
             << "a:" << a << "\tb:" << b << endl;
       
        cout << "Inserisci valore primo double:" << endl;
        cin >> c;
        cout << "Inserisci valore secondo double:" << endl;
        cin >> d;
        fflush(stdin);
        cout << "Valori prima dello scambio \n"
             << "c:" << c << "\td:" << d << endl;
        scambia(&c,&d);
        cout << "Valori dopo lo scambio \n"
             << "c:" << c << "\td:" << d << endl;
        cout << "Inserisci prima stringa:" << end;
        cin.getline(f,20);
        cout << "Inserisci seconda stringa:" << endl;
        cin.getline(e,20);
        cout << "Valori prima dello scambio \n"
             << "e:" << e << "\tf:" << f << endl;
        scambia(&a,&b);
        cout << "Valori dopo lo scambio \n"
             << "e:" << e << "\tf:" << f << endl;
    
    }
    Quando lo mando in esecuzione va tutto bene fin dove chiede di inserire la prima stringa. Arrivato a quel punto è come se prendesse in ingresso il carattere invio e mi chiede direttamente di inserire la seconda stringa. Come posso risolvere? Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Perché non fa quello che voglio io?

    Originariamente inviato da sccc
    Quando lo mando in esecuzione va tutto bene fin dove chiede di inserire la prima stringa. Arrivato a quel punto è come se prendesse in ingresso il carattere invio e mi chiede direttamente di inserire la seconda stringa. Come posso risolvere? Grazie
    È il solito noto, stranoto, famoso e conosciuto problema della libreria di I/O del C/C++, relativo a come la libreria tratta l'input non riconosciuto per un certo tipo di dato in input.

    E fare fflush(stdin) non è nemmeno corretto e non risolve universalmente il problema.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    Hai ragione a sottolineare che è noto, stranoto e quant'altro...ma se conoscevo bene questo linguaggio sicuramente avrei conosciuto anche questo tipo di errore e non avrei quindi avuto bisogno di chiedere come poterlo risolvere. Ti pare?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Hai provato a fare una funzione che prende l'input e, se trova invio, continua a leggere dall'input?

    Magari funziona..

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Per ovviare al problema sottolineato da Andbin basta mettere

    std::cin.ignore(std::numeric_limits<std::streamsiz e>::max(), '\n');

    al posto di fflush(stdin) che tra parentesi non centra nulla con gli stream del C++

    inoltre nella penultima riga c'è un errore (a te scoprire quale)

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    ho provato ad usare l'istruzione che mi hai postato ma mi da una serie di errori...non dirmi che non ho saputo fare nemmeno "copia-incolla"

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Pardon.

    #include <limits>

    std::cin.ignore(std::numeric_limits<std::streamsiz e>::max(), '\n');

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    ho dovuto togliere std:: in quanto mi veniva dato l'errore che cin non appartiene al namespace std...cmq ora funziona correttamente, grazie mille

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E' perché usi <iostream.h>
    L'header corretto è <iostream>

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    98
    uff...ancora devo capire sta differenza tra .h e senza

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.