| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  24-06-2012, 17:27 | #1 | 
| Junior Member Iscritto dal: Jun 2012 
					Messaggi: 5
				 | 
				
				[C] Problema programma conta spazi, caratteri e cifre
			 
		Buongiorno a tutti... Sto imparando da autodidatta il C dal manuale K&R e studiando gli array il testo mi presenta il seguente codice Codice: #include <stdio.h>
/* count digits, white space, others */
main()
{
  int c, i, nwhite, nother;
  int ndigit[10];
  nwhite = nother = 0;
  for (i = 0; i < 10; ++i)
       ndigit[i] = 0;
  while ((c = getchar()) != EOF)
       if (c >= '0' && c <= '9')
           ++ndigit[c-'0'];
       else if (c == ' ' || c == '\n' || c == '\t')
           ++nwhite;
       else
           ++nother;
  printf("digits =");
  for (i = 0; i < 10; ++i)
       printf(" %d", ndigit[i]);
  printf(", white space = %d, other = %d\n",nwhite, nother);
}Vi ringrazio anticipatamente per il vostro aiuto. | 
|   |   | 
|  25-06-2012, 09:16 | #2 | 
| Senior Member Iscritto dal: Jan 2009 Città: Milano 
					Messaggi: 449
				 | 
		Se non sbaglio non hai inizializzato bene le variabili nwhile e nother.
		 
				__________________ Intel i5 2500k | Arctic Cooling Freezer i30 | Asrock Z68 Extreme 3 Gen 3 | Lancool PC-K62 | Corsair TX750M | MSI nVidia GTX 560 Ti Twin Frozr II | Corsair Vengeance LP Black 1600MHz 2x4GB | Crucial M4 128GB | Western Digital Elements 1TB | Seagate 500GB | Cooler Master Spawn | Logitech G110 Concluso positivamente con: massimo3550! Ultima modifica di Filly95 : 25-06-2012 alle 09:23. | 
|   |   | 
|  25-06-2012, 14:29 | #3 | 
| Junior Member Iscritto dal: Jun 2012 
					Messaggi: 5
				 | |
|   |   | 
|  25-06-2012, 21:13 | #4 | 
| Member Iscritto dal: Oct 2010 Città: Savona 
					Messaggi: 194
				 | 
		Prova questo: Codice: #include <stdio.h>
/* count digits, white space, others */
main()
{
  int c, i, nwhite, nother;
  int ndigit[10];
  nwhite = nother = 0;
  for (i = 0; i < 10; i++)
       ndigit[i] = 0;
  while ((c = getchar()) != EOF)
       if (c >= '0' && c <= '9')
           ++ndigit[c-'0'];
       else if (c == ' ' || c == '\n' || c == '\t')
           ++nwhite;
       else
           ++nother;
  printf("digits =");
  for (i = 0; i < 10; i++)
       printf(" %d", ndigit[i]);
  printf(", white space = %d, other = %d\n",nwhite, nother);
}
				__________________ AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb | 
|   |   | 
|  25-06-2012, 21:43 | #5 | |
| Junior Member Iscritto dal: Jun 2012 
					Messaggi: 5
				 | Quote: 
 Ultima modifica di stevanovic73 : 25-06-2012 alle 21:46. | |
|   |   | 
|  26-06-2012, 09:53 | #6 | 
| Member Iscritto dal: Oct 2010 Città: Savona 
					Messaggi: 194
				 | 
		si perché l'incremento postfisso esegue l'operazione successivamente all'uscita dalla sequenza di istruzioni che sono coinvolte nella linea di codice, mentre l'incremento prefisso la esegue immediatamente prima di eseguire la riga di codice. Almeno se mi ricordo bene. Correggetemi se sbaglio. Ecco la documentazione: http://msdn.microsoft.com/en-us/libr...(v=VS.60).aspx potrebbe però non essere questo, dovresti usare il debugger e provare a controllare lo stato delle variabili mettendo un breakpoint quando ti deve stampare il vettore dei tasti numerici. Controllando come te lo ha popolato.   
				__________________ AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb | 
|   |   | 
|  26-06-2012, 11:05 | #7 | |
| Junior Member Iscritto dal: Jun 2012 
					Messaggi: 5
				 | Quote: 
 E' come se si interrompesse al primo printf. Per il debug sono un po' nuovo in materia e non lo so so usare bene, ma l'inizializzazione dell' array tramite il for avviene correttamente. | |
|   |   | 
|  26-06-2012, 11:17 | #8 | 
| Member Iscritto dal: Oct 2010 Città: Savona 
					Messaggi: 194
				 | 
		Dipende da che ide usi, se e' Visual Studio 2010 Express o superiori, il breakpoint lo puoi inserire visivamente cliccando in fondo a sinistra della riga del codice, poi una volta che lo hai intercettato nell'eseguire il programma basta portare il cursore sulla variabile da analizzare per ottenere una preview o uno specchietto del contenuto della variabile nella finestra del controllo in basso chiamata Watch (o in italiano credo sia osserva).  Comunque se devi utilizzare il compilatore per esercitarti, è quasi fondamentale che impieghi un po di tempo a studiare il debugger e' vitale per capire se stai facendo degli errori per causa di dimenticanze.   
				__________________ AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb Ultima modifica di AllerITA : 26-06-2012 alle 11:22. | 
|   |   | 
|  26-06-2012, 11:43 | #9 | 
| Member Iscritto dal: Oct 2010 Città: Savona 
					Messaggi: 194
				 | 
		Ho provato in Visual Studio con una piccola modifica a me funziona: Codice:  #include <stdio.h>
int  main()
{
	int c, i, nwhite, nother;
	int ndigit[10];
	nwhite = nother = 0;
	for (i = 0; i < 10; i++)
		ndigit[i] = 0;
	while (((c = getchar()) != EOF) && (c!='\n'))
	   if (c >= '0' && c <= '9')
		++ndigit[c-'0'];
	  else if (c == ' ' || c == '\n' || c == '\t')
                ++nwhite;
	  else
                ++nother;
	printf("digits =");
	for (i = 0; i < 10; i++)
               printf(" %d", ndigit[i]);
	printf(", white space = %d, other = %d\n",nwhite, nother);
	getchar();
        return 0;
}  
				__________________ AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb Ultima modifica di AllerITA : 26-06-2012 alle 11:47. | 
|   |   | 
|  26-06-2012, 17:34 | #10 | |
| Junior Member Iscritto dal: Jun 2012 
					Messaggi: 5
				 | Quote: 
 Ti ringrazio di nuovo, "C" si becca sul forum   | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 01:43.









 
		 
		 
		 
		








 
  
 



 
                        
                        










