Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [C]Inizializzare/confrontare variabili char e/o stringhe

    Salve a tutti, come sicuramente si intuirà dal titolo ho un problema con un listato in C.
    Praticamente sto provando a rifare in C (per impararne la sintassi) alcuni programmi fatti a scuola in Pascal e, mentre con quest'ultimo fila tutto liscio, in C il listato mi genera un errore su un ciclo do ... while.

    codice:
    #include <stdio.h>
    #include <conio.h>
    
    int somma, max_num, i, somma1, wh;
    
    main(){
    do {
        printf("Inserire il numero di quadrati da sommare.\n");
        scanf("%i",&max_num);
        
        if (max_num <= 0) {
           printf("Non e' possibile inserire numeri negativi o zero.\n");
           scanf("%i");
        }
        
        i = 0;
        somma = 0;
        do {
            somma = (i * i) + somma;
            printf("    %d",i);
            printf(")   La somma e':  %d\n",somma);
            i++;
        } while (i <= max_num);
           
        
        printf("Continuare? S/N.\n");
        scanf("%i",&wh);
    
    } while (wh != 1);
    }
    Così come lo vedete il listato, una volta compilato, funziona benissimo, ma se invece provo a farlo come era l'originale in Pascal (dove, al posto di dichiarare/leggere wh come un intero, lo dichiaravo e leggevo come stringa) mi genera un errore di questo genere:

    29 [Warning] comparison between pointer and integer

    questo è il listato che genera l'errore:
    codice:
    #include <stdio.h>
    #include <conio.h>
    
    char wh[2];
    int somma, max_num, i, somma1;
    
    main(){
    do {
        printf("Inserire il numero di quadrati da sommare.\n");
        scanf("%i",&max_num);
        
        if (max_num <= 0) {
           printf("Non e' possibile inserire numeri negativi o zero.\n");
           scanf("%i");
        }
        
        i = 0;
        somma = 0;
        do {
            somma = (i * i) + somma;
            printf("    %d",i);
            printf(")   La somma e':  %d\n",somma);
            i++;
        } while (i <= max_num);
           
        
        printf("Continuare? S/N.\n");
        scanf("%s",&wh);
    
    } while (wh != "s");
    }
    Il programmino è relativamente semplice, e non fa altro che prendere un intero in input e calcolarne la somma di tutti i quadrati fino a quell'intero (e questo lo fa); ma ha la pecca di avere questo ciclo do ... while ribelle.
    Sono io che non ho capito come leggere/dichiarare le variabili char e string, o sbaglio la sinstassi da qualche parte?
    Per il resto, ci sono altri errori di qualsiasi genere? (anche se sono errori di stile, mi interessa anche imparare a scrivere programmi ben formati)


    Grazie a tutti anticipatamente.
    SELECT neuroni FROM cervello
    WHERE status = 'funzionante';

    La query ha restituito: 0 risultati.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    In C non puoi confrontare le stringhe con i normali operatori ma devi usare la funzione di libreris

    strcmp

    (o altre simili). Inoltre considera che per una stringa il nome del vettore rappresenta il puntatore all'inizio della stringa. Quindi dovrai scrivere

    codice:
    
        scanf("%s", wh);
    
    } while (strcmp(wh, "s") == 0);
    
    Leggi l'help

    http://www.cplusplus.com/reference/c...ng/strcmp.html

    e tieni presente che esiste una differenza tra s e S ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Inoltre considera che per una stringa il nome del vettore rappresenta il puntatore all'inizio della stringa.
    Mmmh, se ho capito bene, nel mio caso, wh, preso da solo, rappresenta il puntatore che contiene l'indirizzo del primo blocco di memoria occupato dalla stringa?
    Quindi dovrai scrivere
    ...
    ...
    Leggi l'help

    http://www.cplusplus.com/reference/c...ng/strcmp.html
    Una domanda su questo manuale: cliccando su una libreria, nella colonna sotto riporta tutte le funzioni di quella libreria? O solo le più importanti?
    Per uno come me che è agli inizi mi sembra decisamente utile un manuale del genere.
    e tieni presente che esiste una differenza tra s e S ...
    Beh si, lo sapevo che il C è case sensitive :P

    Grazie per l'aiuto
    SELECT neuroni FROM cervello
    WHERE status = 'funzionante';

    La query ha restituito: 0 risultati.

  4. #4
    Originariamente inviato da Hirakeydos
    Mmmh, se ho capito bene, nel mio caso, wh, preso da solo, rappresenta il puntatore che contiene l'indirizzo del primo blocco di memoria occupato dalla stringa?

    Una domanda su questo manuale: cliccando su una libreria, nella colonna sotto riporta tutte le funzioni di quella libreria? O solo le più importanti?
    Tutte.
    Per uno come me che è agli inizi mi sembra decisamente utile un manuale del genere.
    Ad uno che è agli inizi serve un manuale cartaceo di apprendimento, più che uno online di riferimento
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Originariamente inviato da MItaly
    Ad uno che è agli inizi serve un manuale cartaceo di apprendimento, più che uno online di riferimento
    Concordo in pieno, ma per il momento preferisco aspettare di fare in Pascal anche gli aspetti avanzati della programmazione (Liste, Record, allocazione dinamica e statica della memoria ecc.), per poi passare a farli col C e comprare qualcosa tipo "The C Programming Language", se non è di apprendimento quello... (o non lo è?)
    SELECT neuroni FROM cervello
    WHERE status = 'funzionante';

    La query ha restituito: 0 risultati.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Hirakeydos
    per poi passare a farli col C e comprare qualcosa tipo "The C Programming Language", se non è di apprendimento quello... (o non lo è?)
    "The C Programming Language" (magari in lungua madre!) è IL libro di C
    every day above ground is a good one

  7. #7
    In ogni caso fin d'ora ti consiglio piuttosto di imparare il C++: hai la stessa possibilità del C di lavorare a basso livello, ma le classi e i template ti forniscono quell'astrazione indispensabile per programmare agevolmente (un esempio a caso: la classe string).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    "The C Programming Language" (magari in lungua madre!) è IL libro di C
    I know
    Originariamente inviato da MItaly
    In ogni caso fin d'ora ti consiglio piuttosto di imparare il C++: hai la stessa possibilità del C di lavorare a basso livello, ma le classi e i template ti forniscono quell'astrazione indispensabile per programmare agevolmente (un esempio a caso: la classe string).
    Non vorrei rischiare di aprire un dibattito sull'argomento trito e ritrito di "quale linguaggio di programmazione è meglio per cominciare" (perché dal canto mio sono fermamente convinto che per iniziare il migliore sia il Pascal), però vedi, il C++ è ad oggetti (anche se permette di lavorare in modo modulare) e per questo motivo avevo pensato di passare prima dal C (e impararlo bene) per arrivare poi al C++ (e imparare l'OOP). E' solo una "mappa" (chiamiamola così) che mi sono fatto in testa, nel caso mi sia sbagliato posso sempre cambiare progetti.
    SELECT neuroni FROM cervello
    WHERE status = 'funzionante';

    La query ha restituito: 0 risultati.

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E' come voler imparare l'italiano partendo dal latino. Non fa male ma ci si impiega più tempo.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  10. #10
    Opinabile, ma penso sia meglio partire dal C.
    Quando poi si incominciano a mettere puntatori a funzione in campi di strutture, nel tentativo (non vano) di programmare ad oggetti in C puro... il passaggio al C++ diventa quasi una "liberazione".

    Certo il percorso è un po' arduo, ma certamente appagante ;-)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.