Allora facciamo così, andiamo con ordine e consideriamo un attimo quello che ho definito come "esercizio precedente", altrimenti ho paura che non ci capiamo e ti faccio pure perdere tempo inutilmente.
Io l'ho implementato così: ho stabilito che ogni 10 colonne (cioè ogni 10 posizioni) ci fosse questa sorta di "marker", di "linea virtuale" o punto di riferimento (questa sarebbe la mia interpretazione di tab-stop, è corretta?) e ho associato questa dimensione ad una macro (DIM_TAB). Ho stabilito anche il numero di questi "stop", in modo da far concludere la riga in corrispondenza di uno di essi (l'ho messo a 15). Si trattava poi semplicemente di mettere al posto dei caratteri di tab il numero di spazi che fossero serviti a raggiungere lo "stop" successivo (che ho impostato ogni 10 posizioni).
Il codice di seguito.
#include <stdio.h>
#define DIM_TAB 10
#define MAX_RIGA 15*DIM_TAB
int main(void)
{
int ch, posizione, spazio;
posizione = 0;
while ((ch=getchar()) != EOF) {
if (ch=='\t') {
for (spazio = 0; spazio<(DIM_TAB-(posizione%DIM_TAB)); ++spazio)
putchar(' ');
posizione += spazio;
}
else if (ch != '\n') {
putchar(ch);
++posizione;
}
if (posizione == MAX_RIGA)
ch = '\n';
if (ch == '\n') {
putchar(ch);
posizione = 0;
}
}
return 0;
}
Ora, nel secondo esercizio, mi chiede di sostituire un certo numero di spazi con caratteri di tabulazione e spazi, usando gli stessi tab-stop che ho usato nel primo (nel mio caso ogni 10 colonne). I tab-stop sono impostati di default, li posso mica cambiare a mio piacimento senza fare come ho fatto nel primo esercizio (cioè sostituendo il carattere di tabulazione con degli spazi)? Nel senso che, io definisco una macro per indicare dove vorrei che fossero i tab-stop, ma è semplicemente una scritta che mi da un'indicazione, se poi inserisco il carattere '\t' (di tabulazione) mi porta il cursore al tab-stop impostato di default, non alla decima colonna come vorrei io! Per far spostare il cursore alla decima colonna dovrei fare in pratica quello che ho fatto nell'esercizio di prima e cioè sostituire il carattere di tabulazione con una serie di spazi che mi portano al tab-stop definito da me (in pratica sostituire '\t' con una tabulazione "fai da te"), ma si tratta sempre di una serie di spazi inseriti da me. Allora quest'interpretazione non dovrebbe essere corretta, in quanto l'ampiezza dei tab-stop può non coincidere.