pburgio / IndInf20

This is official repository of the course Industrial Informatics LT, Year 2019/20, at University of Modena and Reggio Emilia, held at Fondazione Universitaria di Mantova
https://hipert.unimore.it/people/paolob/pub/Industrial_Informatics/index.html
GNU General Public License v3.0
0 stars 0 forks source link

Problema su raspberry con la libreria conio.h #12

Closed DangithubA closed 3 years ago

DangithubA commented 3 years ago

Ho provato ad interrompere un ciclo while con la pressione di un qualsiasi tasto sulla tastiera, quando compilo sul PC va tutto bene ed anche mettendo in esecuzione il programma funziona tutto.

Esempio di codice

include

include

using namespace std;

int main(){ while(1){ if(kbhit()){ break; } } }

Invece nella compilazione sul raspberry la libreria conio.h non viene accettata e mi da questo errore

fatal error: conio.h: File o directory non esistente

include // used for kbhit function

      ^~~~~~~~~

compilation terminated.

Qualcuno conosce o ha trovato alternative compatibili con il raspberry ? Grazie DAN

tobiapoppi commented 3 years ago

Ciao Dan, Consultando documentazioni trovo che "conio.h" è un Header file utilizzato solo da compilatori per MS-DOS. Quindi è incompatibile con Linux. Ho letto che al suo posto consigliano o "ncurses.h" o "stdio.h" in base a quello che devi fare.

DangithubA commented 3 years ago

Ciao Devo interrompere il ciclo while con la sola pressione della tastiera indipendentemente dal tasto premuto Avevo trovato indicazioni su "ncourses.h" o "course.h" ma non ho trovato la funzione equivalente a "kbhit()" di "conio.h"

tobiapoppi commented 3 years ago

Ciao @DangithubA , mi ha fatto tribolare questa cosa, ma alla fine con ncurses sono riuscito:

#include <iostream>
#include <ncurses.h>
using namespace std;
int main(){
    initscr();
    cbreak();
    while(1){
        cout << "premi qualsiasi tasto per uscire" << endl;
        if(getchar()){
            break;
        }
    }
    endwin();
    return 0;
}

"initscr" fondamentale per avviare la modalità curses, e endwin per terminarla. serve un -l curses sulla riga di compilazione per la libreria. è probabile che non sia installato su raspberry, quindi serve: sudo apt-get install libncurses5-dev libncursesw5-dev

DangithubA commented 3 years ago

Grazie Tobi1 Confermo tutto quanto hai indicato. Aggiungo inoltre da prove svolte sul Rasoterra ( Raspberry ), che se metti initscr(), il ciclo while si interrompe con la sola pressione di un tasto qualsiasi, viceversa se ometti la riga initscr(), lanciando il programma il while si interrompe se oltre a premere un qualunque tasto dopo premi anche enter. Ultima cosa ho provato lasciando cbreak() e commentandolo e funziona ugualmente, sembra ininfluente. Grazie Buona serata