PDA

Visualizza la versione completa : [c] Semplice programma, scopriamo l'errore..


playbasfa
09-12-2007, 23:51
Ciao ragazzi, scusate se continuo a disturbarvi, avrei bisogno di un vostro parere;
Sto cercando di creare un programma che restituisca in uscita il medesimo testo che rieceve in entrata con la differenza di sostituire piu' spazi bianchi consecutivi con un singolo spazio bianco.
Ovvero qualora io scrivessi "ciao mondo" in input, cio' che dovrebbe essere restituito in output dovrebbe essere "ciao mondo"

Il programma viene compilato, ma purtroppo non funziona come io vorrei:

[CODE]
#include <stdio.h>

void cut (char line[],int);

main()

{

int c,i,j;
[
char vett[100];

{

for (i=0;(c=getchar())!=EOF;i++,j++) //nel for ho inizializzato il vettore e l'ho riempito

vett [i]=c;



vett[i]='\0';

}





while (vett[i]!= '\0') // analizza il vettore finch╦ questo non finisce

{ i=j=0;

if ( vett [i]!= ' ') // se la prima cella del vettore ╦ diversa dalo spazio incrementa le variabili e quindi ricominica il ciclo

{i++; j++;}



else if (vett[i]==' ') // se ╦ uguale allo spazio incrementa l'altro puntatore

{

j++; // se la posizione successiva cui punta j ╦ anch'essa uno spazio elimina quest spazio ramite la funzione cut del collega dell'altro giorno

if (vett [j]== ' ')

cut(vett,j);

j--; //decrementa j in modo che punti di nuovo laddove punta i;

} // il tutto si ripete finche il vett [i] non incontra il tappo

}

printf("%d", vett); // una volta incontrato il tappo, stampa il vettore

}



void cut(char line[],int i){

while(line[i]!='\0'){

line[i]=line[i+1];

i++;} }

[/ CODE]

Spero qualcuno mi possa aiutare.

oregon
10-12-2007, 00:01
Hai riletto quello che hai scritto? Non si capisce cosa debba fare il programma ne' cosa invece fa di sbagliato ...

E poi devi usare i tag CODE per inserire il codice altrimenti non si legge bene e DIFFICILMENTE ti viene data una risposta ...

Ifrit
10-12-2007, 03:51
Da quello che ho capito leggendo un po il codice te vuoi far si che qualsiasi la stringa inserita essa venga restituita in out con l'accortezza di eliminare gli spazi multipli consecutivi e sostituirli con uno spazio singolo.


spiego alla femminile:

siano definito %20 come se fossero uno spazio

In <--- "Ciao%20%20%20%20Mondo!"

Out ---> "Ciao%20Mondo!"



cmq, ecoti un po di domande sul codice che hai postato, li ho messi fra i commenti:



#include <stdio.h>

void cut (char line[],int);

main()
{
int c,i,j;
[ // questo non permette la compilazione, vabe si deduce ke Ŕ scappato mentre postavi
char vett[100];

{ // a cosa servono queste parentesi? ** Idem sotto
for (i=0;(c=getchar())!= EOF;i++,j++) // La variabile j non Ŕ stata inizializzata
vett [i]=c // la variabile c e di tipo intero non char
//Quello spazio fra vett e [i] non nuoce?
vett[i]='\\0';
} // ** Idem Sopra


while (vett[i]!= '\\0')
{
i=j=0; // a cosa serviva inizializzare incrementare la variabile per poi riazzerarla?
// ogni volta ke il ciclo reinizio vengono settate a 0 queste variabili... meglio metterle fuori

if ( vett [i]!= ' ')
{i++; j++;}
else if (vett[i]==' ') // Se viene fuori FALSE dal primo test e' ovvio che questo venga TRUE
{ j++;
if (vett [j]== ' ')
cut(vett,j);
j--;
}
}

printf("%d", vett); // bisogna stampare una stringa, quindi devi dare l'out di tipo stringa -> %s non %d

}



void cut(char line[],int i)
{
while(line[i]!='\\0')
{
line[i]=line[i+1];
i++;
}
}




cmq bella idea, fra 6 ore ho l'esame...eserciziotto simpatico :-)

Ifrit
10-12-2007, 04:19
Ecco a te :-)
Spero che domani mi vada bene l'esame :cry:
magari e' un esercizio come questo :yuppi:



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

void cut (char line[],int);

main()
{
system("color 0a");

int i;
char vett[100],c;

printf("\n\n\tPrego digitare la frase da elaborare:");
printf("\n\t[Invio per terminare la frase]\n\n");

for (i=0 ;(c=getch())!= 13 ; i++) // Preferisco l'invio al Ctrl+D
vett[i]=c; // Anche xke quando scrivo EOF non funiona

vett[i]='\\0'; // Qui la prassi, terminatore e azzeramento contatore
i=0;

printf("\n\tLa stringa inserita e\': %s", vett);

while (vett[i]!= '\\0')
{

if ( vett [i]!= ' ') // si testa l'eventiale spazio
{
i++; // se esso non c'Ŕ viene incrementato il contatore
continue; // e si forza il riavvio del while
};

if (vett[++i]==' ') // si testa l'eventuale spazio che non vogliamo
{
cut(vett,i); // lo si taglia
i--; // si reimposta il contato alla posizione che era situato lo spazio eliminato
}

};

printf("\n\tLa stringa ripulita e\': %s\n\n", vett);
system("pause");

};



void cut(char line[],int i)
{
while(line[i]!='\\0')
{
line[i]=line[i+1];
i++;
}
};

Loading