Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-04-2009, 19:59   #1
danixxx89
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 13
[C] Problema con programma

Qualcuno mi aiuti per piacere
L'output di questo programma non mi convince... Il do/while non mi da il risultato che credevo mi dovesse dare: cioè subito dopo "Inserire il carattere di End of File per terminare, altrimenti premere Invio:" mi esce scritto anche
"Inserire operatore aritmetico: " (cosa che non dovrebbe succedere, in quanto deve permettere la chiusura della lista) e non riesco a capire il motivo.
Come dovrei fare per eliminare questo problema?!?


Codice PHP:
#include <stdio.h>  
#include <stdlib.h>

#define SIZE 10

typedef struct arithmetic_op{
char operation[0];
int num_of_op;
double operands[SIZE];
struct arithmetic_op *next;
}
arithmetic_op;

void struct_data_storage(arithmetic_op *nptr);

int main()
{
   
arithmetic_op *head=NULL;

   
struct_data_storage(head);
   
   
system ("pause");
   return 
0;
}


void struct_data_storage(arithmetic_op *nptr)
{
   
int n=0, a;
   
nptr=(arithmetic_op*)malloc(sizeof(arithmetic_op));
       
   if(
nptr!=NULL){
                           
      do
         {
            
printf("Inserire operatore aritmetico: ");
            
scanf("%c", &nptr->operation);
            
            
printf("Inserire il numero di operandi: ");
            
scanf("%d", &nptr->num_of_op);
            
            while(
n!=nptr->num_of_op){
               
printf("Inserire gli operatori: ");
               
scanf("%f", &nptr->operands);
               
               
n++;
               }
            
            
printf("\n");
            
n=0;
            
            
printf("Inserire il carattere di End of File per terminare,\n"
            "altrimenti premere Invio: "
);
         } while(
a=getchar()!=EOF);
      }
      else {
         
printf("Memoria non sufficiente\n");     
      }
   
   
nptr->next=NULL; 
   
free(nptr);
   
   return;
} 
P.s.: Il programma non è ancora finito, ma è solo un abbozzo.

Ultima modifica di danixxx89 : 22-04-2009 alle 20:04.
danixxx89 è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 20:16   #2
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Dai un'occhiata a fflush().
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 21:03   #3
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
probabilmente ti rimane nel buffer un \n che ti "annulla" lo scanf. Non usare fflush perchè è una funzione che serve unicamente sugli stream di output e il comportamento su quelli di input è indefinito. Ti consiglio di usare getc, fgets e non scanf!
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 21:15   #4
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da Torav Guarda i messaggi
probabilmente ti rimane nel buffer un \n che ti "annulla" lo scanf. Non usare fflush perchè è una funzione che serve unicamente sugli stream di output e il comportamento su quelli di input è indefinito. Ti consiglio di usare getc, fgets e non scanf!
È vero... in effetti fflush è controindicata per gli stream di input ma alla carlona la si usa... e mi era uscito di mente il fatto che questo suo uso è deprecato...
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 21:29   #5
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
Quote:
Originariamente inviato da _Claudio Guarda i messaggi
È vero... in effetti fflush è controindicata per gli stream di input ma alla carlona la si usa... e mi era uscito di mente il fatto che questo suo uso è deprecato...
in un certo senso sono d'accordo, un paio di volte l'ho usata anche io per fare fix "al volo" e vedere se era lì il problema , però secondo me conviene sempre sottolineare cosa è standard e cosa no
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 22:04   #6
_Claudio
Senior Member
 
L'Avatar di _Claudio
 
Iscritto dal: Aug 2005
Messaggi: 579
Quote:
Originariamente inviato da Torav Guarda i messaggi
in un certo senso sono d'accordo, un paio di volte l'ho usata anche io per fare fix "al volo" e vedere se era lì il problema , però secondo me conviene sempre sottolineare cosa è standard e cosa no
Totalmente d'accordo con te, anche io sono un purista e preferisco usare linguaggi e architetture per come sono state concepite evitando il più possibile un uso approssimativo... che spesso poi genera errori inattesi e peggiora le performance.
_Claudio è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 17:35   #7
danixxx89
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 13
Quote:
Originariamente inviato da Torav Guarda i messaggi
probabilmente ti rimane nel buffer un \n che ti "annulla" lo scanf. Non usare fflush perchè è una funzione che serve unicamente sugli stream di output e il comportamento su quelli di input è indefinito. Ti consiglio di usare getc, fgets e non scanf!
Grazie mille problema risolto. Ho inserito come hai detto una getc alla fine del ciclo while.

Codice PHP:
printf("Inserire il carattere di End of File per terminare,\n"
            "altrimenti premere Invio: "
);
a=getc(stdin); 
Adesso l'unico problema è che non mi memorizza nella struttura i dati. Ho messo delle printf subito dopo le scanf per visualizzare cosa veniva realmente salvato, ma i dati non vengono salvati. Come mai?
danixxx89 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 17:51   #8
Torav
Senior Member
 
Iscritto dal: Dec 2005
Messaggi: 558
a occhio ci sono almeno 2 errori. Scusa per curiosità, che compilatore e che sistema operativo usi? Se usi gcc ti conviene utilizzare il flag -Wall per visualizzare i warning, perchè questi errore ti verrebbero segnalati. Ad ogni modo:

Codice:
scanf("%c", &nptr->operation);
perchè hai definitio operation come un char[0]? Definiscilo come char senza aggiungere altro!

Codice:
scanf("%f", &nptr->operands);
qui invece mi sa che ti sei scordato un [n] dopo operands.
Torav è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 18:22   #9
danixxx89
Junior Member
 
Iscritto dal: Apr 2009
Messaggi: 13
Quote:
Originariamente inviato da Torav Guarda i messaggi
a occhio ci sono almeno 2 errori. Scusa per curiosità, che compilatore e che sistema operativo usi? Se usi gcc ti conviene utilizzare il flag -Wall per visualizzare i warning, perchè questi errore ti verrebbero segnalati. Ad ogni modo:

Codice:
scanf("%c", &nptr->operation);
perchè hai definitio operation come un char[0]? Definiscilo come char senza aggiungere altro!

Codice:
scanf("%f", &nptr->operands);
qui invece mi sa che ti sei scordato un [n] dopo operands.
che scemo che sono ... grazie per avermi fatto notare gli errori.
Comunque come os uso windows e per scrivere i programmi in c uso dev-c++.

p.s.: ho definito operation come un char[0] perchè inizialmente avevo un'altra intenzione. Grazie ancora
danixxx89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
Il satellite spia russo Kosmos 2612 si t...
Blue Origin continua l'espansione: nuove...
Intel prepara un SoC da 700 TOPS: Razor ...
I nuovi Xreal 1 Pro+ arrivano in Europa ...
La GeForce RTX 5090 non è morta: ...
HONOR Win2 si mostra online: potenza da ...
Clamoroso dietrofront di Sony: cancellat...
GeForce NOW, tante novità con l'u...
Il mercato smartphone rallenta nel Q3 20...
Addio al Valve Index: fine della produzi...
Seggiolini auto i-Size da 0 a 12 anni in...
Amazon determina i prezzi di tutto il we...
Robot aspirapolvere ECOVACS in offerta s...
Bodywel F20PRO o DEEPOWER A5? Due fat bi...
Gli agenti AI non diventano pazzi, sono ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v