Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    82

    [C] Errore di compilazione

    Ciao a tutti, ho un problma nella compilazione di una semplice calcolatrice a 4 operazioni, ecco il codice:
    codice:
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
    	int a, b, addizione, sottrazione, moltiplicazione, divisione;
    	char operatore;
    	
    	printf("Inserisci il primo numero: ", a);
    	scanf("%d", &a);
    	
    	printf("\n\nInserisci il secondo numero: ", b);
    	scanf("%d", &b);
    	
    	printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);
    	scanf("%d", &operatore);
    	
    	addizione = a + b;
    	sottrazione = a - b;
    	moltiplicazione = a * b;
    	divisione = a / b;
    	
    	if (operatore==+){
    		printf("\nRISULTATO: %d", addizione);}
    	if (operatore==-){
    		printf("\nRISULTATO: %d", sottrazione);}
    	if (operatore==*){
    		printf("\nRISULTATO: %d", moltiplicazione);}
    	if (operatore==/){
    		printf("\nRISULTATO: %d", divisione);}
    
    	return 0;
    }
    Quando lo compilo mi da degli errori, ma non riesco a capire quali.

    Errori:
    codice:
    nome_file.c:25:18: error: expected expression before ‘)’ token
    nome_file.c:27:18: error: expected expression before ‘)’ token
    nome_file.c:29:18: error: expected expression before ‘)’ token
    nome_file.c:31:17: error: expected expression before ‘/’ token
    Compilazione fallita.
    Come IDE uso Geany (Ubuntu)

  2. #2

    Re: [C] Errore di compilazione

    Originariamente inviato da jackazz
    Ciao a tutti, ho un problma nella compilazione di una semplice calcolatrice a 4 operazioni, ecco il codice:
    codice:
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
    	int a, b, addizione, sottrazione, moltiplicazione, divisione;
    	char operatore;
    	
    	printf("Inserisci il primo numero: ", a);
    	scanf("%d", &a);
    	
    	printf("\n\nInserisci il secondo numero: ", b);
    	scanf("%d", &b);
    	
    	printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);
    	scanf("%d", &operatore);
    	
    	addizione = a + b;
    	sottrazione = a - b;
    	moltiplicazione = a * b;
    	divisione = a / b;
    	
    	if (operatore==+){
    		printf("\nRISULTATO: %d", addizione);}
    	if (operatore==-){
    		printf("\nRISULTATO: %d", sottrazione);}
    	if (operatore==*){
    		printf("\nRISULTATO: %d", moltiplicazione);}
    	if (operatore==/){
    		printf("\nRISULTATO: %d", divisione);}
    
    	return 0;
    }
    Quando lo compilo mi da degli errori, ma non riesco a capire quali.

    Errori:
    codice:
    nome_file.c:25:18: error: expected expression before ‘)’ token
    nome_file.c:27:18: error: expected expression before ‘)’ token
    nome_file.c:29:18: error: expected expression before ‘)’ token
    nome_file.c:31:17: error: expected expression before ‘/’ token
    Compilazione fallita.
    Come IDE uso Geany (Ubuntu)
    è un errore già apparso qua

    devi capire la differenza tra
    + - / *
    che sono OPERATORI del linguaggio e
    '+' '-' '/' '*'
    che invece sono char, e sono quelli che fanno al caso tuo e devono finire negli if


    inoltre nella scanf devi usare il %c per leggere i char, non il %d

    in aggiunta mi chiedo perché hai messo quei parametri aggiuntivi nelle printf. Non servono ne c'è motivo per inserirli. Anche perché, pur volessi stamparli (e devi usare la notazione apposita) in quel momento non sono nemmeno inizializzati, quindi avresti risultati di visualizzazione non prevedibili
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    82

    Re: Re: [C] Errore di compilazione

    Originariamente inviato da Celebron
    è un errore già apparso qua

    devi capire la differenza tra
    + - / *
    che sono OPERATORI del linguaggio e
    '+' '-' '/' '*'
    che invece sono char, e sono quelli che fanno al caso tuo e devono finire negli if


    inoltre nella scanf devi usare il %c per leggere i char, non il %d

    in aggiunta mi chiedo perché hai messo quei parametri aggiuntivi nelle printf. Non servono ne c'è motivo per inserirli. Anche perché, pur volessi stamparli (e devi usare la notazione apposita) in quel momento non sono nemmeno inizializzati, quindi avresti risultati di visualizzazione non prevedibili
    Adesso compila correttamente, con qualche warning, ma compila, adesso però quando lo avvio, dopo "Inserisci un operatore (+ - * /)" il programma finisce, perchè? Poi volevo sapere che paramentri aggiuntivi avrei messo nelle printf()

    Ecco le modifiche cho ho apportato:
    codice:
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
    	/*Dichiarazione delle variabili di tipo intero.*/
    	int a, b, addizione, sottrazione, moltiplicazione, divisione;
    	char operatore;
    	
    	/*Con %d intendiamo spcificare la conversione 
    	 * per numeri interi*/
    	printf("Inserisci il primo numero: ", a);
    	scanf("%d", &a);
    	
    	printf("\n\nInserisci il secondo numero: ", b);
    	scanf("%d", &b);
    	
    	printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);
    	scanf("%c", &operatore);
    	
    	addizione = a + b;
    	sottrazione = a - b;
    	moltiplicazione = a * b;
    	divisione = a / b;
    	
    	if (operatore=="+"){
    		printf("\nRISULTATO: %d", addizione);}
    	if (operatore=="-"){
    		printf("\nRISULTATO: %d", sottrazione);}
    	if (operatore=="*"){
    		printf("\nRISULTATO: %d", moltiplicazione);}
    	if (operatore=="/"){
    		printf("\nRISULTATO: %d", divisione);}
    
    	return 0;
    }

  4. #4
    metti un

    while(getchar()!='q');

    alla fine, ma prima del return, in modo che il programma aspetti che l'utente prema il tasto q prima di uscire dal programma

    nelle printf:
    printf("Inserisci il primo numero: ", a);
    printf("\n\nInserisci il secondo numero: ", b);
    printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);

    questi in grassetto, a che ti servono? Perché li hai messi? Sai che non svolgono alcuna funzione messi così?


    Probabilmente i warning ti segnalavano proprio questo
    leggili sempre e non ignorarli MAI
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    82
    Originariamente inviato da Celebron
    metti un

    while(getchar()!='q');

    alla fine, ma prima del return, in modo che il programma aspetti che l'utente prema il tasto q prima di uscire dal programma

    nelle printf:
    printf("Inserisci il primo numero: ", a);
    printf("\n\nInserisci il secondo numero: ", b);
    printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);

    questi in grassetto, a che ti servono? Perché li hai messi? Sai che non svolgono alcuna funzione messi così?


    Probabilmente i warning ti segnalavano proprio questo
    leggili sempre e non ignorarli MAI
    Infatti anche io mi sono sempre chiesto a che cosa servono, visto che la variabile si mette nello scanf, ma io ho imparato così con le varie guide, e mi sembrava opportuno metterle. Comunque i warning rimangono. Lo avvio ma dopo che metto l'operatore e premo enter, non succede nulla, non dice che il programma è terminato e neanche il risultato, posso premere enter quanto voglio, ma non succede niente.

  6. #6
    due cose:

    i warning ce li hai perché hai messo i caratteri tra "" e non tra ' ' come io li avevo messi
    " " <- si usa per le variabili stringhe statiche
    ' ' <- per i caratteri

    il warning ti dice che stavi confrontando un char con un char*.


    seconda cosa:
    il problema per il quale non ti stampa nulla è colpa degli "invio" che rimangono nello stdin quando leggi i dati con la scanf.
    Questo fa si che il carattere '\n' venga letto dalla tua scanf%c al posto del carattere che tu inserisci
    E' un problema classico del c purtroppo

    risolvilo mettendo while(getchar()!='\n'); dopo ogni scanf e tutto funzionerà

    codice:
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
    	/*Dichiarazione delle variabili di tipo intero.*/
    	int a, b, addizione, sottrazione, moltiplicazione, divisione;
    	char operatore;
    	
    	/*Con %d intendiamo spcificare la conversione 
    	 * per numeri interi*/
    	printf("Inserisci il primo numero: ", a);
    	scanf("%d", &a);
    	while(getchar()!='\n');
    	
    	printf("\n\nInserisci il secondo numero: ", b);
    	scanf("%d", &b);
    	while(getchar()!='\n');
    	
    	printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);
    	scanf("%c", &operatore);
    	while(getchar()!='\n');
    	
    	addizione = a + b;
    	sottrazione = a - b;
    	moltiplicazione = a * b;
    	divisione = a / b;
    	
    	if (operatore=='+'){
    		printf("\nRISULTATO: %d", addizione);}
    	if (operatore=='-'){
    		printf("\nRISULTATO: %d", sottrazione);}
    	if (operatore=='*'){
    		printf("\nRISULTATO: %d", moltiplicazione);}
    	if (operatore=='/'){
    		printf("\nRISULTATO: %d", divisione);}
    
    	return 0;
    }
    ti consiglio di imparare ad usare GDB come debugger. Ti assicurò che questi problemi diventano banali e facilmente rilevabili
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    82
    Originariamente inviato da Celebron
    due cose:

    i warning ce li hai perché hai messo i caratteri tra "" e non tra ' ' come io li avevo messi
    " " <- si usa per le variabili stringhe statiche
    ' ' <- per i caratteri

    il warning ti dice che stavi confrontando un char con un char*.


    seconda cosa:
    il problema per il quale non ti stampa nulla è colpa degli "invio" che rimangono nello stdin quando leggi i dati con la scanf.
    Questo fa si che il carattere '\n' venga letto dalla tua scanf%c al posto del carattere che tu inserisci
    E' un problema classico del c purtroppo

    risolvilo mettendo while(getchar()!='\n'); dopo ogni scanf e tutto funzionerà

    codice:
    #include <stdio.h>
    
    int main(int argc, char **argv)
    {
    	/*Dichiarazione delle variabili di tipo intero.*/
    	int a, b, addizione, sottrazione, moltiplicazione, divisione;
    	char operatore;
    	
    	/*Con %d intendiamo spcificare la conversione 
    	 * per numeri interi*/
    	printf("Inserisci il primo numero: ", a);
    	scanf("%d", &a);
    	while(getchar()!='\n');
    	
    	printf("\n\nInserisci il secondo numero: ", b);
    	scanf("%d", &b);
    	while(getchar()!='\n');
    	
    	printf("\n\n Inserisci l'operatore (+ - * /): ", operatore);
    	scanf("%c", &operatore);
    	while(getchar()!='\n');
    	
    	addizione = a + b;
    	sottrazione = a - b;
    	moltiplicazione = a * b;
    	divisione = a / b;
    	
    	if (operatore=='+'){
    		printf("\nRISULTATO: %d", addizione);}
    	if (operatore=='-'){
    		printf("\nRISULTATO: %d", sottrazione);}
    	if (operatore=='*'){
    		printf("\nRISULTATO: %d", moltiplicazione);}
    	if (operatore=='/'){
    		printf("\nRISULTATO: %d", divisione);}
    
    	return 0;
    }
    ti consiglio di imparare ad usare GDB come debugger. Ti assicurò che questi problemi diventano banali e facilmente rilevabili
    Quindi da ora in poi, anche se dovessi programmare un elaboratore di immagini 3D dopo ogni scanf() va messo un while(getchar()!='\n');? Comunque adesso mi funziona alla grande, grazie dell'aiuto e dei consigli (utilissimi).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.