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

    [C]o io o il compilatore..

    ragazzi sono le prime cose che scrivo in c quindi...un po di pazienza e scusate l'ignoranza...
    sto cercando di capire il ciclo do-while e while...ma nn è un gran ke come riuscita...

    ho scritto questo:

    codice:
    #include <stdio.h>
    
    main()
    {
    int c,i,n=1;
      while (n<10)
        { printf("quanti utenti vuoi inserire?\n");
          scanf("%d",i);
          printf("stai inserendo %d utenti\n",i);
          }
    
    
    }
    avvio il programma...se inserisco il valore 5, la riga successiva mi dice: stai inserendo 65536 utenti!!xè??? e poi il tutto non dovrebbe finire nel momento in cui n>10???xè va in loop???????????????

  2. #2
    i titoli

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Perchè i lo devi passare come riferimento alla scanf:
    codice:
    scanf("%d", &i);
    E non esci mai dal loop perchè non incrementi mai n all'interno del loop!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    A parte che non capisco il senso del tuo codice ...
    Nella scanf devi usare &i e non i ...

    Questo perchè la funzione scanf non vuole che tu metta la variabile direttamente, ma il reference a quella variabile.

    per cui modifica il codice mettendo
    scanf("%d",&i);

    In ogni caso non ha molto senso quello che hai scritto ... io allora farei così:

    codice:
    #include <stdio.h>
    
    void main(void)
    {
    int c,i,n=0;
    printf("quanti utenti vuoi inserire?\n");
    scanf("%d",&i);
      while (n<i)
        { 
          printf("stai inserendo l'utente %d \n",n);
          n++;
          }
    }
    Ovvero ... setto un indice a zero (l'indice sarebbe n).
    Chiedo all'utente quante volte vuole fare l'azione nel ciclo ("inserire un utente" ... ovviamente in questo caso l'azione è solamente scrivere che l'ho inserito).

    Poi faccio il ciclo mettendo una condizione (n<i): finchè questa è vera, eseguo l'azione nel ciclo (inserire l'utente), contemporaneamente ogni volta che eseguo l'azione incremento il contatore del ciclo (n++, che equivale a scrivere n=n+1.

    Quindi se io scelgo di inserire 10 utenti
    Il ciclo verrà eseguito finchè n < 10
    Siccome parte da zero (n=0 quando lo definisco), è ovvio che la condizione sarà vera per 10 volte (0<10,1<10,...9<10). Spero di aver spiegato bene....

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    1 - Con scanf(), devi passare l'indirizzo delle variabili, quindi metti:
    codice:
    scanf("%d", &i);
    2 - Se non incrementi n, non finirà mai!
    codice:
    while (n<10)
    {
          printf("quanti utenti vuoi inserire?\n");
          scanf("%d", &i);
          printf("stai inserendo %d utenti\n",i);
          n++;
    }
    3 - Puoi usare anche un ciclo for
    codice:
    int c, i, n;
    // Chiede 10 volte
    for(n=0; n<10; n++)
    {
          printf("quanti utenti vuoi inserire?\n");
          scanf("%d", &i);
          printf("stai inserendo %d utenti\n",i);
    }
    4 - Metti tutto tra [ code] e [/ code], come nel regolamento.



    [EDIT]
    Oops... sono arrivato terzo
    [/EDIT]

  7. #7
    allora....ok il passaggio con &...sta bene...solo ke non capisco na cosa.....
    xè devo incrementare n???
    scusate l'ignoranza ma se io devo fare

    QUANTI UTENTI vuoi inserire?
    (e in questo caso si può specificare min1 max 10)
    l'utente digita 11...e il ciclo si ripete...
    se digita 4 il ciclo finisce...


    utilizzando una vecchia implementazione cioè il pascal

    codice:
    repeat
    begin 
    writeln('quanti utenti vuoi inserire? ');
    readln(n)
    unitl n>1 and n<10;
    iguana non capisco ke vuol dire "4 - Metti tutto tra [ code] e [/ code], come nel regolamento. " visto ke è già tutto nei tag..bha...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Anche nel ciclo repeat...until del Pascal, viene valutata
    ad ogni iterazione la condizione di uscita|ciclo.
    Fintanto che, nell'esempio, n sarà tra 1 e 10, il ciclo
    verrà ripetuto; se n non lo modifichi in qualche modo,
    tutto ciò si traduce in un ciclo infinito.
    Quindi aggiungi "n := n + 1" (è corretto?)
    Idem in C++, dove n++ corrisponde ad "n = n + 1".

    Ah, del pascal ne ho sentito parlare a scuola.
    Quasi 15 anni fa, sigh.

    Slack? Smack!

  9. #9
    15 anni fa il pascal?
    l'ho fatto a PROGRAMMAZIONE lo scorso semestre...blwaaaaaaaaa

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Hai notato la differenza fra quello che hai scritto tu in C e quello che hai scritto (sempre tu) in Pascal?

    In Pascal effettui il controllo del loop sulla variabile N e la stessa N la leggi dall'utente (quindi varia a seconda di quello che digita l'utente)

    In C fai il controllo del loop sulla variabile N, ma dall'utente leggi la variabile I... quindi N non viene mai modificata ==> LOOP INFINITO!

    Hai due soluzioni, a questo punto: o fai leggere N anzichè I modificando l'istruzione scanf(), oppure, come ti è stato suggerito, fai incrementare N all'interno del ciclo.

    Le due soluzioni sono diverse e portano a risultati diversi: con la prima rimani nel loop finchè l'utente non inserisce un valore maggiore o uguale a 10 (mi riferisco al codice C);
    nel secondo caso, invece, fai esattamente 9 iterazioni.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.