Ecco il codice corretto, ti ho messo i commenti dove avevi sbagliato, l'errore principale è che hai messo una chiamata di funzione dentro la condizione del ciclo, cosa c'è di sbagliato? che ogni volta che il tuo while verifica la condizione chiama anche la funzione e tu non ne esci più
il codice è disordinatissimo tanto che mi sono permesso di fare alcune modifiche(cose appiccicate tremila ridichiarazioni di stessi tipi...cerca di essere ordinato, se lo sei riuscirai a leggere meglio il tuo codice e quindi a correggerlo più velocemente)....
non fare caso ai postincrementi, ho cambiato i tuoi preincrementi perchè mi stanno un po antipaici per leggere il codice
ah!!! ho cambiato anche il ciclo while della funzione con un ciclo for...non ho verificato se il tuo è corretto, ma se fai come l'ho messo io non devi passare neanche la stringa....altre piccole accortezze te l'ho scritte nel codice.
per il resto, ecco quà:
Codice:
#include <stdio.h>
#include <stdlib.h>
#define MAXC 1000
int detab (int);
int main()
{
char s[MAXC];
int i, c, m;
printf("Inserire stringa con tab:\n");
for(i=0; i<MAXC-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i]=c;
if(c=='\n') //questa non serve
s[i]='\0';
for(i=0; s[i]!='\0'; ++i)
{
if(s[i]=='\t')
{
m=detab(i);
while(m!=0)//se metti detab() nel while la richiama all'inifinito
{
putchar(' ');
m--;
}
}
printf("%c", s[i]);
}
printf("\n");
system("PAUSE");
return 0;
}
int detab (int i)
{
int n=0;//questa la devi inizializzare a 0 se stai per sommarla
int b;
for(; i>=0;i--)
n++;
if(n>=8)
b=8-(n%8);
else
b=8-n;
return b;
} ok ho ricontrollato, il tuo ciclo while in funzione detab(), è sbagliato...perchè mettere questa condizione s[i] != ' ' ?? Tu stai cercando di contare quanto è lungo il tab non hai nessun ' ' in stringa fra una parola e l'altra
dato che mi andava di sprecare un po del mio tempo ( invece di continuare a studiare gli alberi
) mi sono permesso di modificare ulteriormente il codice in modo da renderlo più conciso, vedi se anche a te convince di più, in ogni caso sia chiaro anche il tuo che ho rimesso apposto è corretto:
Codice:
#include <stdio.h>
#define MAXC 500
int detab (int);
int main()
{
char s[MAXC];
int i, m;
printf("Inserire stringa con tab:\n");
fgets(s, 500, stdin);
for(i=0; s[i]!='\0'; i++)
{
if(s[i]=='\t')
{
m=detab(i);
while(m!=0)
{
putchar(' ');
m--;
}
}
printf("%c", s[i]);
}
printf("\nFine del programma....");
getch();
return 0;
}
int detab (int i)
{
int n=0;//questa la devi inizializzare a 0 se stai per sommarla
int b;
for(; i>=0;i--)
n++;
if(n>=8)
b=8-(n%8);
else
b=8-n;
return b;
}
Segnalibri