# Dubbio tokanization

**URL:** <https://forum.olinfo.it/t/dubbio-tokanization/7115>\
**Category:** Olimpiadi\
**Created:** [20 Marzo 2022, 6:22pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115 "2022-03-20T18:22:50Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [20 Marzo 2022, 6:22pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/1 "2022-03-20T18:22:50Z")

</div>

Potete dirmi come mai utilizzando questo codice

```auto
#include <iostream>
using namespace std;
int main(){
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
        string nome, cognome, etas;
        getline(cin,nome,';'); //leggo le tre variabili dallo stream usando come separatore ;
        getline(cin,cognome,';');
        getline(cin,etas,';');
        int eta = stoi(etas); //converto etas in int
        cout << nome << " " << cognome << " " << eta << endl;
}

```

Si ripete all’infinito la fase di input?

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [21 Marzo 2022, 9:12am UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/2 "2022-03-21T09:12:22Z")

</div>

Ho aggiunto:

```auto
#include <string>

```

e ha funzionato, senza la #include sulla mia macchina non compilava.

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [21 Marzo 2022, 12:00pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/3 "2022-03-21T12:00:17Z")

</div>

> [@v.bizzarri](#):
>
> `#include <string>`

Ha me mi da questo errore: terminate called after throwing an instance of ‘std::invalid\_argument’  
what(): stoi  
Aborted (core dumped)  
Sto utilizzando mouse pad di linux

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [21 Marzo 2022, 12:29pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/4 "2022-03-21T12:29:10Z")

</div>

prova a guardare la documentazione:

> [https://www.cplusplus.com/reference/string/stoi/](https://www.cplusplus.com/reference/string/stoi/)

o prova a scrivere

> [@Francesco0404](#):
>
> `int eta = stoi(etas,nullptr);`

Uso vs 2019 su macchina con SO windows10 e funziona anche aggiungendo l’argomento nullptr dentro la stoi.

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [21 Marzo 2022, 1:04pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/5 "2022-03-21T13:04:12Z")

</div>

> [@Francesco0404](#):
>
> int eta = stoi(etas,nullptr);

Ho provato quello che mi consigli ma sempre lo stesso errore mi da, vs 2019 non c’e l’ho, vorrei provare a farlo funzionare su mouse pad

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [21 Marzo 2022, 1:27pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/6 "2022-03-21T13:27:39Z")

</div>

Il file “input.txt” cosa contiene?

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [21 Marzo 2022, 2:09pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/7 "2022-03-21T14:09:03Z")

</div>

Niente, è un inizio dove si creano questi due file, ma non servono in questo caso, togliendoli l’errore scompare ma il problema di prima rimane: input infinito

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [21 Marzo 2022, 2:55pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/8 "2022-03-21T14:55:24Z")

</div>

Ma il file “input.txt” non viene creato dal nostro programma.  
Quando il programma viene mandato in esecuzione quel file deve già esistere e contenere qualcosa che verrà letto (apertura del file in “r” cioè read) con le getline()

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [21 Marzo 2022, 3:01pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/9 "2022-03-21T15:01:59Z")

</div>

Come ho detto prima, sono un aggiunta in più da me(le righe che ho formattato), però se tolte l’errore non l’ho da più. Non ho detto che il file è creato dal programma.

```auto
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);

```

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [21 Marzo 2022, 3:51pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/10 "2022-03-21T15:51:19Z")

</div>

Ho fatto un altro programma con stoi e mi sta dando sempre lo stesso errore, anche aggiungendo nullptr

```auto
terminate called after throwing an instance of 'std::invalid_argument'
  what(): stoi
Aborted (core dumped)

```

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [21 Marzo 2022, 4:09pm UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/11 "2022-03-21T16:09:05Z")

</div>

Ma quello che voglio dire è:  
hai creato, con un normale editor di testo, un file nel quale hai scritto qualcosa tipo:  
Gianni; Rossi;25;  
e poi l’hai salvato dandogli come nome “input.txrt” , mettendolo nella cartella nel quale poi il tuo programma cercherà di aprirlo in lettura con:

> [@Francesco0404](#):
>
> `freopen("input.txt","r",stdin);`

Hai fatto tutto questo? Altrimenti senza la freopen leggi da tastiera

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [22 Marzo 2022, 7:54am UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/13 "2022-03-22T07:54:49Z")

</div>

No. Non so bene come funziona il freopen, anche se penso che sia simile alla funzionalità della libreria fstream. Nel mio codice, non interessandomi di queste righe le ho tolte, ora il codice che crea il problema è questo:

```auto
#include <iostream>
#include <string>
using namespace std;
int main()
{
        string nome, cognome, etas;
        getline(cin,nome,';'); //leggo le tre variabili dallo stream usando come separatore ;
        getline(cin,cognome,';');
        getline(cin,etas,';');
        int eta = stoi(etas,nullptr,10); //converto etas in int
        cout << nome << " " << cognome << " " << eta << endl;
}

```

Deduco che il file di input sia stato creato per inserire l’input ricavato dalle getline, ma non importa questo. Quello che è strano è che togliendo i freopen non mi da più l’errore di stoi ma mi entra nel problema iniziale, cioè che si ripete all’infinito la fase di input. Grazie comunque che mi stai aiutando

---

<div class="post-metadata">

**Author:** ![v.bizzarri](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/v/7c8e57/32.png) [@v.bizzarri](https://forum.olinfo.it/u/v.bizzarri)\
**Post date:** [22 Marzo 2022, 9:15am UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/14 "2022-03-22T09:15:39Z")

</div>

Ho provato sulla mia macchina questa tua ultima versione e funziona a patto di inserire da tastiera una unica riga di testo con i tre campi separati da 3 ‘;’ ovvero tipo: paolo; rossi; 55;.  
Il problema potrebbe essere che poi il programma termina chiude e non si vede l’output prodotto dalla cout, Potresti inserire un: return 0; dopo la cout e mettere un breakpoint li, oppure lasciare

> [@Francesco0404](#):
>
> `freopen("output.txt","w",stdout);`

e vedere cosa ha scritto nel file output.txt (con un qualunque text editor)

---

<div class="post-metadata">

**Author:** ![Francesco0404](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/f/8baadc/32.png) [@Francesco0404](https://forum.olinfo.it/u/Francesco0404)\
**Post date:** [22 Marzo 2022, 9:54am UTC](https://forum.olinfo.it/t/dubbio-tokanization/7115/15 "2022-03-22T09:54:34Z")

</div>

Ah ok ora mi funziona. Dovevo digitare la variabile più il ; alla fine, non avevo capito come funziona il getline. Grazie del tuo aiuto. Ora vedo se nell’altro esercizio che non ti ho fatto vedere risolvo la questione dello stoi, sennò chiederò di nuovo aiuto. Grazie di tutto.
