[C++]il programma non riconosce "gets()"
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 29

Discussione: [C++]il programma non riconosce "gets()"

Cambio titolo
  1. #1
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436

    [C++]il programma non riconosce "gets()"

    sono appena agli inizi di questo linguaggio, ho scritto un semplice programmino con switch per trasformare i testi da maiuscolo a minuscolo e viceversa, ma arrivato al punto in cui io dovrei inserire il testo, il programma si chiude subito; potrei usare un semplice "cin", ma mi riconosce le scritte fino a che non digito uno spazio...
    Codice:
    #include <iostream>
    #include <cstdio>
    #include <cctype>
    #include <cstring>
    using namespace std;
    
    int main()
    {
      char str[80];
      int i; 
      int choice;
      
      cout << "1. Da minuscolo a maiuscolo" << endl;
      cout << "2. Da maiuscolo a minuscolo" << endl;
      cout << "3. Chiudere il programma" << endl;
      cout << "Selezionare l'opzione desiderata: " << endl;
      
      cin >> choice;
      
      switch(choice) {
      case 1:
      cout << "Immettere il testo da rendere maiuscolo: ";
    
      gets(str);
      
      cout << endl;
      
      for(i=0; str[i]; i++) str[i] = toupper(str[i]);
    
      cout << str;
      break;
      
      case 2:
      cout << "Immettere il testo da rendere minuscolo: ";
    
      gets(str);
      
      cout << endl;
      
      for(i=0; str[i]; i++) str[i] = tolower(str[i]);
    
      cout << str;
      break;
      
        case 3:
    
        break;
    }
    
      return 0;
    }


  2. #2
    Linux User # 477930 L'avatar di Metflar
    Registrato il
    09-06
    Località
    Anagni
    Messaggi
    2.353
    aprilo da prompt dei comandi e evitiamo di usare system("pause"); & co.

    conoscenze: C\C++, Java, PHP,Python

  3. #3
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    già aperto da prompt... non uso system("pause").


  4. #4
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    ulteriori esperimenti dimostrano che non posso usare la funzione gets() e il comando "cin" all'interno dello stesso programma... ho provato a racchiudere ciascuna funzione in una funzione creata da me e poi richiamata al momento opportuno ma ancora si rifiuta di partire... idee?


  5. #5
    MisterJack
    Ospite
    Se usi getline(cin, str)? Dovrebbe andare bene.. Controlla però come va usata, non ricordo se va messo prima lo stream e poi la stringa o viceversa.


    MJ

  6. #6
    da 3? L'avatar di Celebron
    Registrato il
    07-06
    Località
    Sotto Canestro
    Messaggi
    14.462
    in ogni caso se puoi evita di usare la gets
    apre un mucchio di falle... piuttosto fai qualcosa di controllato

  7. #7
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    come si fa a inserire nella stringa pure il carattere blank (lo spazio)? cosi com'è adesso mi mette il NULL appena metto uno spazio, mentre a me serve la frase finita...


  8. #8
    ZMachine
    Ospite
    Usa un array di char al posto della stringhe (e no, non sono proprio la stessa cosa, o almeno non sono gestiti in modo identico in c++). ovviamente le unzioni te le devi fare tu poi. Oppure usa un struct (magari dinamica) di stringhe. in caso contrario non usare gets
    Ultima modifica di ZMachine; 6-03-2010 alle 22:38:08

  9. #9
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    Citazione ZMachine Visualizza Messaggio
    Usa un array di char al posto della stringhe (e no, non sono proprio la stessa cosa). ovviamente le unzioni te le devi fare tu poi. Oppure usa un struct (magari dinamica) di stringhe.
    EXPLAIN THIS SHIT!!!
    tieni conto che ho iniziato 5 giorni fa...
    al momento ho risolto con una funzione chiamata "cin.ignore", qualcuno me la spiega?


  10. #10
    da 3? L'avatar di Celebron
    Registrato il
    07-06
    Località
    Sotto Canestro
    Messaggi
    14.462
    Citazione freeman Visualizza Messaggio
    come si fa a inserire nella stringa pure il carattere blank (lo spazio)? cosi com'è adesso mi mette il NULL appena metto uno spazio, mentre a me serve la frase finita...

    Citazione freeman Visualizza Messaggio
    EXPLAIN THIS SHIT!!!
    tieni conto che ho iniziato 5 giorni fa...
    al momento ho risolto con una funzione chiamata "cin.ignore", qualcuno me la spiega?
    potresti fare un

    i=finito=0;
    while(!finito){
    carat=getchar();

    if(carat=='\n'){
    vett[i]='\0';
    finito=1;
    }

    else{
    vett[i]=carat;
    i++;
    }

    }


    la differenza tra una stringa e un vett di char e che la prima termina sempre con un '\0' che indica la terminazione della stringa
    tutte le funzioni di libreria per le stringe funzionano solo se nel vettore trovano quel carattere... un array di char non lo ha, ma lo puoi forzare come ti ho mostrato sopra.

  11. #11
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    in che modo dichiaro un array di char?


  12. #12
    da 3? L'avatar di Celebron
    Registrato il
    07-06
    Località
    Sotto Canestro
    Messaggi
    14.462
    Citazione freeman Visualizza Messaggio
    in che modo dichiaro un array di char?
    dinamicamente crei un puntatore a char e poi lo allochi a scelta
    ma se mi fai questa domanda penso che sei agli inizi, quindi semplicemente

    char array[25+1];

    ti crea un array di 26 spazi, di cui l'ultimo è di terminazione (te lo ho scritto proprio come 25+1 perché così ti ricordi che puoi inserire testo solo per 25 caratteri, l'ultimo dovrai per forza forzarlo a \0 se vuoi usare le funzioni per le stringhe)
    ovviamente la dimensione è a scelta

    ricordati che il compilatore non ti darà mai errore se superi gli spazi allocati per l'array... questo è un problema che devi gestire tu, e devi anche gestirlo sempre sennò crei grossi bug per la sicurezza sulla memoria

    esempio, nel codice che ti ho scritto prima basta che modifichi il while con
    while (!finito && i<dimmaxarray)
    modificando poi anche la gestione del \0

  13. #13
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    al momento sto proprio studiando i puntatori; ma se faccio come tu hai detto, sono obbligato a scrivere 25 caratteri? ho notato che se sforo con gli spazi il programma funziona (apparentemente) bene.

    EDIT forse ho capito, ma con "getchar" mi prende pure i caratteri blan?!?


  14. #14
    da 3? L'avatar di Celebron
    Registrato il
    07-06
    Località
    Sotto Canestro
    Messaggi
    14.462
    Citazione freeman Visualizza Messaggio
    al momento sto proprio studiando i puntatori; ma se faccio come tu hai detto, sono obbligato a scrivere 25 caratteri? ho notato che se sforo con gli spazi il programma funziona (apparentemente) bene.

    EDIT forse ho capito, ma con "getchar" mi prende pure i caratteri blan?!?
    la getchar prende qualsiasi carattere
    quando sarai arrivato a studiare la dualità puntatori/vettori, allora potrai cominciare con la gestione dinamica della memoria

    per il resto, nel mio esempio dove ho allocato per 25+1 (potevo anche allocare per 2000+1 eh), ti ho scritto che puoi leggere quanti caratteri vuoi, il problema è che oltre i 25 non ti considera il vettore una stringa perchè occupi quello per \0, oltre il 26 poi occupi porzioni di memoria che non hai riservato -> rischi di mandare il programma in crash -> apri un botto di falle di sicurezza, che poi è il motivo per cui si consiglia di non usare la gets

  15. #15
    Utente L'avatar di freeman
    Registrato il
    04-03
    Messaggi
    1.436
    ok, mi metto subito all'opera, per il momento grazie!


Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •