Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design
OnePlus 15 nasce per alzare l'asticella delle prestazioni e del gaming mobile. Ma non solo, visto che integra un display LTPO 1,5K a 165 Hz, OxygenOS 16 con funzioni AI integrate e un comparto foto con tre moduli da 50 MP al posteriore. La batteria da 7.300 mAh con SUPERVOOC 120 W e AIRVOOC 50 W è la ciliegina sulla torta per uno smartphone che promette di offrire un'esperienza d'uso senza alcun compromesso
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media
Vediamo come si comporta il Ryzen 5 7500X3D, nuovo processore di casa AMD che fonde 6 core Zen 4 con la tecnologia 3D V-Cache, particolarmente utile in scenari come il gaming. Annunciato a un prezzo di listino di 279€, il nuovo arrivato sarà in grado di diventare un riferimento per i sistemi budget? Ecco cosa ne pensiamo.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-05-2006, 14:17   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
[C] Errore in semplice programma sulle liste

Ciao,
devo scrivere un programma che fà le seguenti cose:
immessa una stringa con una funzione mette in una lista ogni carattere della stringa fino alla fine della stringa.

Poi con un'altra funzione stampa i caratteri cntenuti nel membro apposito di ogni nodo e stampa di quanti nodi è formata la stringa....la prima funzione dovrebbe funzionare correttamente...la seconda sbrocca....come mai?

Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct lista{
	char carattere;
	struct lista *next;
};

struct lista *StringToList(char *);
void stampalista(struct lista *);

int main(){

	char stringa[100];
	struct lista *head; 

	printf("Inserire una stringa: ");
	scanf("%s", stringa);
	head = StringToList(stringa);
	stampalista(head);
	
	return 0;
}

struct lista *StringToList(char *s){
	
	struct lista *head = NULL;     // Crea il puntatore al primo nodo e impostalo a NULL
	struct lista *a;		     //	Puntatore a nodo generico
	int i;
	
	if(s[0] != '\0'){	     // Se il primo carattere della stringa non è nullo
		head = malloc(sizeof(struct lista));	// alloca memoria per il primo nodo della lista
		head->carattere = s[0];
		head->next = NULL;
		a = head;
	
		for(i=1; s[i] != '\0'; i++){
			a->next = malloc(sizeof(struct lista));
			a->carattere = s[i];
			a = a->next;
		}
	}
		a->next = NULL;		
		return(head);
	
}

void stampalista(struct lista *i){

		int counter = 0;
		while(i->next != '\0'){
			printf("%c", i->carattere);
			counter ++;
		}
		printf("\nIl numero di nodi della lista corrisponde a: %d\n\n", counter);
}
Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2006, 14:23   #2
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
leggendo il codice sembra che tu non inserisca lo \0 nella lista, poi quando stampi lo usi come controllo.
prova a sostituire il controllo di \0 con NULL nel controllo di i->next
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2006, 14:41   #3
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
non và...sostituendo il \0 con NULL dà esattamente lo stesso problema...booo
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2006, 14:56   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Ecco le parti di codice corrette:
Codice:
struct lista *StringToList(char *s){
    struct lista *head = NULL;
    struct lista *o = NULL;
    struct lista *a;

    while (*s != '\0')
    {
        a = malloc(sizeof(struct lista));
        a->carattere = *s++;
        a->next = NULL;

        if (head == NULL)
            head = a;
        if (o != NULL)
            o->next = a;

        o = a;
    }

    return head;
}
Nella stampalista():
Codice:
while(i != NULL){
    printf("%c", i->carattere);
    counter ++;
    i = i->next;
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 10-05-2006, 16:58   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da D4rkAng3l
Ciao,
devo scrivere un programma che fà le seguenti cose:
immessa una stringa con una funzione mette in una lista ogni carattere della stringa fino alla fine della stringa.

Poi con un'altra funzione stampa i caratteri cntenuti nel membro apposito di ogni nodo e stampa di quanti nodi è formata la stringa....la prima funzione dovrebbe funzionare correttamente...la seconda sbrocca....come mai?

Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct lista{
	char carattere;
	struct lista *next;
};

struct lista *StringToList(char *);
void stampalista(struct lista *);

int main(){

	char stringa[100];
	struct lista *head; 

	printf("Inserire una stringa: ");
	scanf("%s", stringa);
	head = StringToList(stringa);
	stampalista(head);
	
	return 0;
}

struct lista *StringToList(char *s){
	
	struct lista *head = NULL;     // Crea il puntatore al primo nodo e impostalo a NULL
	struct lista *a;		     //	Puntatore a nodo generico
	int i;
	
	if(s[0] != '\0'){	     // Se il primo carattere della stringa non è nullo
		head = malloc(sizeof(struct lista));	// alloca memoria per il primo nodo della lista
		head->carattere = s[0];
		head->next = NULL;
		a = head;
	
		for(i=1; s[i] != '\0'; i++){
			a->next = malloc(sizeof(struct lista));
			a->carattere = s[i];
			a = a->next;
		}
	}
		a->next = NULL;		
		return(head);
	
}

void stampalista(struct lista *i){

		int counter = 0;
		while(i->next != '\0'){
			printf("%c", i->carattere);
			counter ++;
		}
		printf("\nIl numero di nodi della lista corrisponde a: %d\n\n", counter);
}
Grazie
Andrea
A dirla tutta, sembrerebbe la prima funzione, invece, ad avere problemi.
Quando scrivi:
Codice:
		for(i=1; s[i] != '\0'; i++){
			a->next = malloc(sizeof(struct lista));
			a->carattere = s[i];
			a = a->next;
		}
a->carattere e' il posto sbagliato. La funzione seguente (quella che pensavi fallisse) pertanto scrivera' dei valori sbagliati.

Sara' una mia fissazione: quando si usa la malloc() e' imperativo controllare il valore di ritorno. Non fidarti del fatto che sono pochi byte da allocare: la funzione puo' fallire comunque e ti ritrovi a perdere giorni per cercare un errore, probabilmente che si verifica in maniera casuale in parti diverse dell'applicazione


High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
SONY BRAVIA 8 II e BRAVIA Theatre System 6: il cinema a casa in formato compatto SONY BRAVIA 8 II e BRAVIA Theatre System 6: il c...
KTC H27E6 a 300Hz e 1ms: come i rivali ma a metà prezzo KTC H27E6 a 300Hz e 1ms: come i rivali ma a met&...
Grazie ai dati di ESA il calcolo della t...
Rilasciati nuovi video e immagini della ...
Gli astronauti cinesi di Shenzhou-20 son...
Mai così tanti gas serra: il 2025...
Google condannata in Germania: favorito ...
Ubisoft rimanda i risultati finanziari e...
ADATA porta i primi moduli DDR5 CUDIMM 4...
Bob Iger anticipa le novità AI di...
Microsoft Teams 'spierà' i dipend...
Michael Burry chiude Scion e fa di nuovo...
Huawei prepara i nuovi Mate 80: fino a 2...
Una e-Mountain Bike di qualità ma...
Tutte le offerte Amazon Black Friday pi&...
DJI Mini 4K Fly More Combo con 3 batteri...
Crollo di prezzo sui nuovissimi iPhone A...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:44.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v