Ciao a tutti, il problema chiede di inserire 10 caratteri da tastiera e di stampare la lista in senso inverso. Il codice è pressochè finito, ma al momento della stampa mi visualizza degli antipatici spazi che nessuno ha mai introdotto, vi posto il codice e l'esempio, se qualcuno può aiutarmi a individuare l'errore ve ne sarei grato.
#include <stdio.h>
#include <stdlib.h>
//definisco la struttura
struct charList{
char value;
struct charList *next;
};
//sinonimo di intList
typedef struct charList CharList;
typedef CharList *chList;
//prototipi di funzione
void insert (chList sPtr, char car);
void printList (chList l);
void printInverseList (chList l);
int main(int argc, char **argv){
int i = 0;
char value;
chList l1;
l1 = malloc(sizeof(struct charList));
printf("*** FILL THE LIST WITH 10 CHAR ***\n\n");
//ciclo che mi fa inserire 10 caratteri da tastiera
for(i = 0; i < 10; i++){
printf("Enter a char: ");
scanf("\n%c", &value);
insert(l1, value);
}
printList(l1);
printf("\n*** THE REVERSE LIST ***\n\n");
printInverseList(l1);
return 0;
}
//inserisce elementi nella lista
void insert(CharList *sPtr, char car){
chList newPtr, currPtr, prevPtr;
newPtr = malloc(sizeof(struct charList));
if(newPtr != NULL){
newPtr -> value = car;
newPtr -> next = NULL;
prevPtr = NULL;
currPtr = sPtr;
while(currPtr != NULL){
prevPtr = currPtr;
currPtr = currPtr -> next;
}
if(prevPtr == NULL){
newPtr -> next = sPtr;
sPtr = newPtr;
}
else{
prevPtr -> next = newPtr;
newPtr -> next = currPtr;
}
}
else{
printf("Not inserted. Memory not avalaible\n\n");
}
}
//stampa la lista
void printList(chList l){
if(l == NULL){
printf("List is empty.\n");
}
else{
while(l != NULL){
printf(" %c -->", l -> value);
l = l -> next;
}
printf("NULL\n\n");
}
}
//ordina in senso inverso
void printInverseList (chList l){
if(l == NULL){
return;
}
else{
printInverseList(l->next);
printf(" --> %c ", l-> value);
}
}
Immettendo i caratteri A, B, C, D, E, F, G, H, I, J visualizzo normalmente:
(spazio) --> A --> B --> C --> D --> E --> F --> G --> H --> I --> J --> NULL, ed è esattamente quello che vorrei, se non ci fosse quel fastidioso spazio.
Mentre per quanto riguarda la stampa inversa della lista visualizzo:
J --> I --> H --> G --> F --> E --> D --> C --> B --> A --> (spazio), nel secondo caso vorrei che al posto dello spazio stampasse un NULL, per far vedere che è finito il percorso inverso nella lista.
Spero di essere stato più chiaro possibile, grazie dell'aiuto.