PDA

Visualizza la versione completa : [C] Eliminare spazi e tabulazioni presenti al termine di una riga


shiichi
18-06-2013, 23:37
Come da titolo,vorrei creare un programma che elimini tutti i caratteri di spaziatura alla fine di una riga.Ne ho scritto uno,però quando lo vado ad eseguire mi segnala che il programma smette di funzionare... :bhò:

oregon
18-06-2013, 23:41
Magari è meglio di quale linguaggio si parla ...

E sarebbe ancora meglio che tu postassi il tuo codice così si corregge ...

shiichi
18-06-2013, 23:45
Giusto...ho dimenticato di specificare,parlo della programmazione in C...
ed ecco il codice:


#include <stdio.h>
#define MAX 1000 //massima lunghezza di una stringa
int copy(char to[], char from[]);
void cstring(int from,char to[]);
main()
{
char string[MAX];
char str[MAX];
int i,c,s;
c=getchar();
cstring(c,str); /*n=lunghezza della linea;c-string-str=input*/
int n;
while(c!=EOF)
{
n=copy(string,str);
for(i=0;i<=n;++i)
{
if(str[i]!=' ' && str[i]!='\t')
printf("%s",str[i]);
else if(str[i]==' ' || str[i]=='\t')
{
s=i;
while(i<=n)
{
++i;
if(str[i]!=' '&&str[i]!='\t')
{
printf("%s",str[s]);
i=s++;
break;
}
}
}
}
}
}

// Trasferisce l'input "da" nell'output "ad"
void cstring(int da,char ad[])
{
int i;
i=0;
while ((to[i]=from[i])!='\n')
++i;
}
// Copia "from" in "to" e ne calcola la lunghezza
int copy(char to[], char from[])

{
int i;
for (i=0;;++i)
ad[i]=da;
return i;
}

oregon
18-06-2013, 23:55
Scusa ma come funziona?

Cosa fai con

c=getchar();

?

La getchar acquisisce un solo carattere da tastiera ...

shiichi
18-06-2013, 23:58
Mi sto rendendo conto ora degli errori...comunque io volevo fare in modo che prendesse un'input,lo trasferisse in un array di char e dall'array farebbe tutte le modifiche

Alex'87
19-06-2013, 00:01
Per l'input puoi usare tranquillamente scanf/fscanf/fgets.

shiichi
19-06-2013, 00:03
Non ci avevo pensato...provo subito :D

oregon
19-06-2013, 00:05
Mi pare che siano le funzioni giuste ...

shiichi
19-06-2013, 00:15
Sono arrivato a questo...


#include <stdio.h>
#define MAX 1000 //massima lunghezza di una stringa
int cstring(char from[],char to[]);
main()
{
char string[MAX];
char str[MAX];
int i,s;
scanf(&string);

while(string!=EOF)
{
int n=cstring(string,str);
for(i=0;i<=n;++i)
{
if(str[i]!=' ' && str[i]!='\t')
printf("%s",str[i]);
else if(str[i]==' ' || str[i]=='\t')
{
s=i;
while(i<=n)
{
++i;
if(str[i]!=' '&&str[i]!='\t')
{
printf("%s",str[s]);
i=s++;
break;
}
}
}
}
}
}

// Trasferisce l'imput "from" nell'output "to" e ne calcola la lunghezza
int cstring(char from[],char to[])
{
int i;
for (i=0;from!='\n';++i)
from[i]=to[i];
return i;
}


Il problema però persiste.

oregon
19-06-2013, 00:29
Ma tu il codice lo compili e non ci sono errori? Sicuro?

Come hai usato la scanf ?

http://www.cplusplus.com/reference/cstdio/scanf/

Cosa vuol dire quella while usata in quel modo?

Comunque è meglio che utilizzi la fscanf

fscanf(string, MAX, stdin);

per l'input al posto della scanf

Loading