Repository 32bit  Forum
Repository 64bit  Wiki

[C] punto per gestire inserimento valori su array

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza dell'ultima regola porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[C] punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 18:10

salve,premetto che sono un neofita della programmazione.
volevo chiedere come fosse possibile gestire l'input in modo che alla pressione del tasto "." {punto} esso inizi a scrivere in un'altra posizione(magari la sucessiva) dell'array :?
Ultima modifica di gattino_usb il gio mar 06, 2008 18:18, modificato 1 volta in totale.
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: punto per gestire inserimento valori su array

Messaggioda Mario Vanoni » gio mar 06, 2008 18:16

gattino_usb ha scritto:salve,premetto che sono un neofita della programmazione.
volevo chiedere come fosse possibile gestire l'input in modo che alla pressione del tasto "." {punto} esso inizi a scrivere in un'altra posizione(magari la sucessiva) dell'array :?


bash/ksh/tcsh/zsh o linguaggio C?
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 21:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 18:18

scusate se non sono stato chiaro,linguaggio C ;)
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: [C] punto per gestire inserimento valori su array

Messaggioda 414N » gio mar 06, 2008 18:33

gattino_usb ha scritto:salve,premetto che sono un neofita della programmazione.
volevo chiedere come fosse possibile gestire l'input in modo che alla pressione del tasto "." {punto} esso inizi a scrivere in un'altra posizione(magari la sucessiva) dell'array :?

8-[ Di quale array stai parlando, scusa?
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2853
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 18:37

414N ha scritto: 8-[ Di quale array stai parlando, scusa?


un array dichiarato precedentemente #-o
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: [C] punto per gestire inserimento valori su array

Messaggioda 414N » gio mar 06, 2008 18:47

Beh, se disponi di una variabile indice, ti basta un if. Altrimenti si complica la faccenda.
Con una roba del genere dovresti cavartela:
Codice: Seleziona tutto
...
int array [M];                //M indica la grandezza dell'array (messa giusto per correttezza)
int index = 0;
int dotOffset = N;         //qui imposti lo scostamento da applicare quando viene letto un '.'
int car;
...
car = getchar();
if (car == '.')
  index += offset;
array[index] = X;          //X è il nuovo valore da inserire nell'array
...
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2853
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 18:50

414N ha scritto:int dotOffset = N; //qui imposti lo scostamento da applicare quando viene letto un '.'
int car;


ti ringrazio :) una piccola cosa non mi è chiara,cosa intendi per scostamento?
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: [C] punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 18:55

spiego meglio,sto scrivendo un programma che dato un indirizzo ip e una maschera di rete calcola automaticamente indirizzo di rete e indirizzo di broadcast.

vorrei quindi che all'inserimento del numero seguito da punto,il numero sucessivo venisse scritto su una cella diversa dell'array :) spero di essermi spiegato bene :) grazie ancora
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: [C] punto per gestire inserimento valori su array

Messaggioda 414N » gio mar 06, 2008 19:20

Se non ho capito male, leggi i numeri componenti gli indirizzi di rete carattere per carattere, percui aspetti di trovare il '.' per capire che è finito il numero.
Tornando a prendere il codice di esempio di prima e specializzandolo un pochino:
Codice: Seleziona tutto
...
int ipAddr [4];                //Array che conterrà le 4 cifre dell'indirizzo IP (ho messo int ma char dovrebbe essere sufficiente)
int ipIndex = 0;              //Indice di partenza dell'array (0=inizio, 3= fine)

//int dotOffset = 1;         //qui imposti lo scostamento da applicare quando viene letto un '.'
//In questo caso è un po' inutile usare una variabile per spostarsi di uno, quindi ne farei a meno.
int car;
...
car = getchar();
if (car == '.'){                   //Un numero dell'indirizzo di rete è terminato
  X = charsToInt(...);       //Qui viene effettuata la conversione da insieme di caratteri ad intero (magari controllando che il numero abbia senso)
  array[ipIndex] = X;           
  ipIndex++;                      //sarebbe opportuno controllare di non 'sbordare' dalla dimensione dell'array (quindi ipIndex non dovrà mai superare 3)
}else{
  ...                               //Il carattere viene salvato da qualche parte per poter poi essere associato ai caratteri letti precedentemente e convertito (per esempio un altro array di char)
}
...


EDIT: corretto un errore di trascrizione (array[index] ==> array[ipIndex])
Ultima modifica di 414N il dom mar 16, 2008 15:37, modificato 1 volta in totale.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2853
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: [C] punto per gestire inserimento valori su array

Messaggioda gattino_usb » gio mar 06, 2008 20:26

ti ringrazio :)
Avatar utente
gattino_usb
Linux 2.4
Linux 2.4
 
Messaggi: 205
Iscritto il: mar dic 25, 2007 12:48
Località: Cittadella (Padova)
Nome Cognome: Alberto Rosso
Slackware: Current
Kernel: 2.6.27
Desktop: Xfce
Distribuzione: Debian, XUbuntu

Re: [C] punto per gestire inserimento valori su array

Messaggioda 414N » ven mar 07, 2008 11:59

Un'ultima raccomandazione: non mischiare getchar() con scanf(), a meno di non usare un fflush(stdin) dopo ogni scanf.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2853
Iscritto il: mer feb 13, 2008 17:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite