Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - perchè non funziona su Linux ?
Forum - C/C++ - perchè non funziona su Linux ?

Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 20:33
Venerdì, 16/07/2010
Ragazzi mi sapreste dire il perchè questo codice funziona su windows e non su linux ?

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2.  
  3. typedef struct {
  4.         char disponibile;
  5.         char nome[20];
  6. } biblioteca;
  7.  
  8. int main (void) {
  9.         biblioteca libro[100];
  10.         char ch;
  11.         while (1) {
  12.                 scanf("%c", &ch);
  13.                 switch (ch) {
  14.                         case 'a': fflush(stdin); scanf("%c", &libro[0].disponibile); fflush(stdin); scanf("%s", libro[0].nome); break;
  15.                         case 'b': printf("Disponibilita' %c, nome %s", libro[0].disponibile, libro[0].nome); break;
  16.                         case 'c': return 0;
  17.                 }
  18.                 fflush(stdin);
  19.         }
  20.         return 0;
  21. }




Ultima modifica effettuata da Pitagora il 16/07/2010 alle 20:34
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6388
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:42
Venerdì, 16/07/2010
Presumo perché la

fflush(stdin);

non è standard e il suo funzionamento non è definito.

Solo con MS Visual C++ si può utilizzare per cancellare il buffer di input.



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 9:28
Sabato, 17/07/2010
come posso risolvere ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6388
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:47
Sabato, 17/07/2010
Svuota il buffer di input con un ciclo e la getchar


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 11:43
Sabato, 17/07/2010
mi faresti un esempio ?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6388
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:54
Sabato, 17/07/2010
while(getchar() != '\n');


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 12:41
Sabato, 17/07/2010
diventerebbe così ?

Codice sorgente - presumibilmente C++

  1. #include  <stdio.h>
  2.  
  3. typedef struct {
  4.     char disponibile;
  5.     char nome[20];
  6. } biblioteca;
  7.  
  8. int main (void) {
  9.     biblioteca libro[100];
  10.     char ch;
  11.     while (1) {
  12.         scanf("%c", &ch);
  13.         while(getchar() != '\n');
  14.         switch (ch) {
  15.             case 'a': scanf("%c", &libro[0].disponibile); while(getchar() != '\n'); scanf("%s", libro[0].nome); break;
  16.             case 'b': printf("Disponibilita' %c, nome %s", libro[0].disponibile, libro[0].nome); break;
  17.             case 'c': return 0;
  18.         }
  19.        while(getchar() != '\n');
  20.     }
  21.     return 0;
  22. }


Ultima modifica effettuata da Pitagora il 17/07/2010 alle 12:42
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6388
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:48
Sabato, 17/07/2010
Riscriverei il codice

1) usando una funzione per quel ciclo

2) indentando correttamente il codice perché sia leggibile

3) correggendo "logicamente" la struttura (quello è un libro non una biblioteca ... semmai il vettore è una biblioteca in quanto insieme di libri)

Codice sorgente - presumibilmente C++

  1. #include  <stdio.h>
  2.  
  3. typedef struct
  4. {
  5.     char disponibile;
  6.     char nome[20];
  7. } libro;
  8.  
  9. void ff()
  10. {
  11.         while(getchar() != '\n');
  12. }
  13.  
  14. int main (void)
  15. {
  16.     libro biblioteca[100];
  17.  
  18.         char ch;
  19.  
  20.         while (1)
  21.         {
  22.         scanf("%c", &ch);
  23.         ff();
  24.  
  25.         switch (ch)
  26.                 {
  27.             case 'a':
  28.                                 scanf("%c", &biblioteca[0].disponibile);
  29.                                 ff();
  30.                                 scanf("%s", biblioteca[0].nome);
  31.                                 ff();
  32.                                 break;
  33.             case 'b':
  34.                                 printf("Disponibilita' %c, nome %s\n", biblioteca[0].disponibile, biblioteca[0].nome);
  35.                                 break;
  36.             case 'c':
  37.                                 return 0;
  38.         }
  39.         }
  40.  
  41.         return 0;
  42. }



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote