Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti
Il Lenovo LOQ 15i Gen 10 (15IRX10) offre prestazioni convincenti grazie al Core i7-13650HX e alla RTX 5060 Laptop a 100W, mantenendo un prezzo competitivo tra 1100 e 1300 euro. Costruzione solida, buon display e ampia espandibilità lo rendono una scelta equilibrata per chi cerca un notebook gaming accessibile ma moderno.
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
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


Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
L'uscita HDMI 2.1 su Steam Machine &egra...
ECOVACS MINI da 10.000Pa a 199€ e Lefant...
realme GT 7T per la prima volta a soli 3...
SpaceX: l'offerta pubblica iniziale del ...
La NASA prova i droni marziani nella Dea...
IBM acquisisce Confluent, leader nella g...
La Commissione Europea indaga AWS e Azur...
Sonda spaziale ESA JUICE: rilasciata una...
PS5 PRO a 698€? L'offerta che nessuno si...
L'equipaggio di Shenzhou-21 ha completat...
Dal milione di download alla rimozione f...
Legno, pelle naturale e socket AM5: la G...
Attenti a X-GPU: la piattaforma sospetta...
La Lotus Eletre Plug-in esiste davvero, ...
Garanzia estesa su Pixel 9 Pro e 9 Pro X...
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: 08:20.


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