Programmino stringhe

SalvatCpo
#include
#include
#include
int main()
{
char parola[7], c;
int i=0;
while (i<7)
{
printf ("dammi un carattere: \n");
scanf ("%c", &c);
parola=c;
i=i+1;
}
printf ("parola digitata: ", parola);
system ("PAUSE");
return 0;
}

Non funziona. Come mai? Cosa dovrei cambiare?
Per caso il problema è il fatto che prenda l'INVIO come carattere? Che sia questo o no il problema, come si risolve questa cosa?

Grazie in anticipo per le risposte.

Risposte
apatriarca
No, il problema è che una stringa deve sempre terminare con il terminatore '\0'. Tu hai un array di 7 caratteri che leggi da stdin e che saranno quindi certamente diversi dal terminatore. Se vuoi 7 caratteri devi avere un array di 8 caratteri in modo da avere il terminatore di stringa.

SalvatCpo
Ho apportato la correzione da te indicatami, ma ancora non va... Anche lasciando libera l'ultima cella, comunque non va...

apatriarca
Mostra la modifica che hai fatto. Hai settato a '\0' l'ultimo carattere dell'array?

SalvatCpo
#include
#include
#include
int main()
{
char parola[7], c;
int i=0;
while (i<6) //non riempamo l'ultima cella pke dobbiamo lasciar spazio al terminat di stringa
{
printf ("dammi un carattere: \n");
scanf (" %c", &c);
parola=c;
i=i+1;
}
printf ("parola digitata: ", parola);
system ("PAUSE");
return 0;
}




SE SCRIVO
parola[7]='0\';
OPPURE parola[7]=0\;
MI DA' ERRORE.

apatriarca
È \0 non 0\

SalvatCpo
Ok, così non mi dà errori. Il programma parte.

PERO' non fa ciò che dovrebbe, cioè non funziona. Ancora non stampa la parola digitata.
Il problema vero è altrove.

#include
#include
#include
int main()
{
char parola[7], c;
int i=0;
parola[7]='\0';
while (i<6) //non riempamo l'ultima cella pke dobbiamo lasciar spazio al terminat di stringa
{
printf ("dammi un carattere: \n");
scanf (" %c", &c);
parola=c;
i=i+1;
}
printf ("parola digitata: ", parola);
system ("PAUSE");
return 0;
}

apatriarca
Ho appena notato che la stringa di formato nel printf non contiene alcun %s e quindi la stringa non viene stampata.

SalvatCpo
Grazie mille... ora è ok...
che errore brutto che ho fatto!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.