Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [c]tabelline

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]tabelline

    Ciao,
    stavo scrivendo un programma per visualizzare le tabelline,
    Ho previsto un menu che consente di scegliere tra + e *.
    Il programma dovrebbe avere un output del genere:

    * | 1| 2| 3| 4| 5| 6
    -- +--+--+--+-+-- +--
    1| 1| 2| 3| 4| 5 | 6
    -- +--+--+-+--+-- +--
    2| 2| 4| 6| 8| 10| 12

    e cosi via....

    Ho scritto il ciclo for per disegnare la prima riga,ma ho gia pensato a come stampare anche le altre.

    Il codice e' il seguente:
    codice:
    #include <stdio.h>
    
    
    
    main()
    {
     int i,n;
     char car;
     printf("\n// Digitare il simbolo dell'operazione desiderata\n// per la visualizzazione della tabella\n\n\'+' per la tabella della somma\n'*' per la tabella del prodotto\n\n\t\t\t\t\t\t\tScelta:");
     scanf("%c",&car);
     printf("\ndigita un numero intero da 1 a 12: ");
     scanf("%d",&n);
     printf("\n");
     printf(" %c ",car);
     for(i=0;i<n;i++) {
         char s[12];
         int cont=0;
         sprintf(s,"%s",i);
         while(s[cont]!='\n') 
               cont++;
         if (cont==1) printf("|  %d",i);
         if (cont==2) printf("| %d",i);  
     }
    }
    L'output mi da il seguente errore:
    codice:
    // Digitare il simbolo dell'operazione desiderata
    // per la visualizzazione della tabella
    
    '+' per la tabella della somma
    '*' per la tabella del prodotto
    
    							Scelta:*
    
    digita un numero intero da 1 a 12: 3
    
    Segmentation fault

  2. #2
    Utente di HTML.it L'avatar di LexLex
    Registrato dal
    May 2008
    Messaggi
    56
    devi sostituire %s con %d per scrivere l'intero..

    Apprezzabile contare i caratteri che compongono il numero per stampare in maniera ordinata, ma puoi scrivere anche così che te li formatta a destra di uno spazio totale di 3 caratteri..

    codice:
     for(i=0;i<n;i++) {
         char s[12];
    	 sprintf(s,"%d",i);
    	 printf("|%3d",i);
     }
    "Dai Diamanti non nasce niente, dal letame nascono i fiori.. " F.De Andrè

  3. #3
    Utente di HTML.it L'avatar di LexLex
    Registrato dal
    May 2008
    Messaggi
    56
    codice:
    for(i=0;i<n;i++)
       printf("|%3d",i);
    in pratica puoi fare così..
    "Dai Diamanti non nasce niente, dal letame nascono i fiori.. " F.De Andrè

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Ecco cosa fa sprintf:
    il contenuto di i viene convertito in stringa e copiato in s

    Per il resto questa mi sembra l'unica soluzione al problema.Peccato che il programma vada in crash.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da cristianc
    Ecco cosa fa sprintf:
    il contenuto di i viene convertito in stringa e copiato in s

    Per il resto questa mi sembra l'unica soluzione al problema.Peccato che il programma vada in crash.
    Ma ti era stato detto

    "devi sostituire %s con %d per scrivere l'intero.."

    ... lo hai fatto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    il %s viene usato nel caso si voglia convertire il dato in stringa;il %d viene usato nel caso si voglia convertire il dato in numero intero.Ma siccome io il dato ce l'ho gia intero e voglio convertirlo in stringa scelgo la prima opzione.

    Ho provato anche fgets: fgets(s,12,i);

    Ma ottengo l'errore:

    tavola.c: In function ‘main’:
    tavola.c:18: warning: passing argument 3 of ‘fgets’ makes pointer from integer without a cast

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da cristianc
    il %s viene usato nel caso si voglia convertire il dato in stringa;il %d viene usato nel caso si voglia convertire il dato in numero intero.Ma siccome io il dato ce l'ho gia intero e voglio convertirlo in stringa scelgo la prima opzione.
    No ... tutto sbagliato ...

    Il %s viene usato se il dato che vuoi inserire nella stringa e' a sua volta una stringa ... mentre devi usare %d se il dato che vuoi inserire nella stringa e' un intero, come nel tuo caso.

    Quindi il %s o il %d fanno riferimento al tipo di dato della variabile che vuoi inserire ...
    Se ne usi uno sbagliato (come nel tuo caso) puoi avere un Segmentation fault ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Ok,ora ho capito.Il programma non da piu errori in compilazione.

    Purtroppo pero' non fa quello che gli avevo chiesto:
    codice:
    // Digitare il simbolo dell'operazione desiderata
    // per la visualizzazione della tabella
    
    '+' per la tabella della somma
    '*' per la tabella del prodotto
    
    							Scelta:*
    
    digita un numero intero da 1 a 12: 5
    
     *

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il programma non da piu errori in compilazione.
    Non penso che tu avessi errori in compilazione ma semmai a runtime dato che avevi un "segmentation fault" ...

    In secondo luogo, se vuoi imparare a programmare, per prima cosa devi imparare a fare il debugging dei tuoi programmi, cosa molto piu' importante anche della scrittura del codice ...

    Dici che non fa quello che vuoi ...

    Hai controllato linea per linea cosa succede ...?

    In particolare, a cosa servono queste linee

    while(s[cont]!='\n')
    cont++;

    e sei sicuro che facciano quello che ti aspetti?

    Hai controllato il valore di cont (magari con una printf) dopo l'esecuzione di quelle linee?
    Ti aspetti che sia 1 o 2 ma forse il suo valore e' diverso ... e perche'? Ma se vuoi ottenere il numero di cifre del numero, non ti basta usare la funzione strlen al posto di quelle righe ...?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Non penso che tu avessi errori in compilazione ma semmai a runtime dato che avevi un "segmentation fault" ...
    è vero

    In particolare, a cosa servono queste linee while(s[cont]!='\n') cont++; e sei sicuro che facciano quello che ti aspetti? Hai controllato il valore di cont (magari con una printf) dopo l'esecuzione di quelle linee?
    avevo provato a mettere questa:
    printf("%d",cont);
    e il risultato che ottengo è 1414141414


    non ti basta usare la funzione strlen al posto di quelle righe ...?
    non avevo pensato ad usare questa funzione.

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.