Allocazione dinamica...
Salve a ttt raga, vi presento un pezzo del mio codice x spiegarvi il problema...Vorrei acquisire dinamicamente delle lettere e poi semplicemente visualizzarle...ma nn ci riesco...
Il problema è che se sostituisco il tipo int del ciclo for con un tipo char, l'acquisizione e la stampa nn avvengono correttamente...cm mai????...sapreste spiegarmi o correggere in qualke modo qst implementazione...grazie...ciao!!!!
#include
int main()
{
int *a;
int b, i, N, s, h;
double m, e;
if(h == 0)
{
printf("\nDigitare un numero alla volta, compresi segni e variabili, dell'espressione!\n");
scanf("%d",
&N);
/* array dinamico allocazione */
a = (int *) malloc( N * sizeof(int));
/* acquisizione elementi array */
for (i=0; i < N; ++i)
{
printf("\n%d^ numero, segno o variabile ", i+1);
scanf("%d",
a+i);
}
printf("\nEspressione acquisita\n");
for(i = 0; i < N; ++i)
printf("%d", *a+i);
}
return 0;
}
Il problema è che se sostituisco il tipo int del ciclo for con un tipo char, l'acquisizione e la stampa nn avvengono correttamente...cm mai????...sapreste spiegarmi o correggere in qualke modo qst implementazione...grazie...ciao!!!!
#include
int main()
{
int *a;
int b, i, N, s, h;
double m, e;
if(h == 0)
{
printf("\nDigitare un numero alla volta, compresi segni e variabili, dell'espressione!\n");
scanf("%d",
&N);
/* array dinamico allocazione */
a = (int *) malloc( N * sizeof(int));
/* acquisizione elementi array */
for (i=0; i < N; ++i)
{
printf("\n%d^ numero, segno o variabile ", i+1);
scanf("%d",
a+i);
}
printf("\nEspressione acquisita\n");
for(i = 0; i < N; ++i)
printf("%d", *a+i);
}
return 0;
}
Risposte
Mi lascia un po' perplesso come hai strutturato il programma, comunque, prova a sostituire tutti gli int con char, ad eccezione delle variabili i, N, h (quest'ultima andrebbe anche inizializzata a 0...).
P.S. Se racchiudi il tuo codice tra
[/code]
risulta un po' più leggibile qui sul forum.
P.S. Se racchiudi il tuo codice tra
[code] QUI IL TUO CODICE C
[/code]
risulta un po' più leggibile qui sul forum.

"anonymous_be1147":
scanf("%c", a + i);
Mi spiace, ma temo che così non potrebbe proprio funzionare: il carriage return ("invio") dell'input precedente andrebbe a "ingozzare" la scanf successiva, "saltandone" di fatto una su due (tutte quelle la cui printf stampa un ordinale dispari sarebbero saltate in questo caso, perché c'è la scanf iniziale per l'acquisizione della dimensione).
Esistono estensioni della stringa argomento di scanf (più o meno standard) che introducono anche semplici regexp, come [^\n], per eliminare i caratteri extra: nel caso di cui si parla, una semplice espressione come "\n%c" potrebbe già funzionare.
Però direi che qui è totalmente sbagliato l'impianto logico e l'approccio all'I/O interattivo, per quanto si tratti (presumo) di un semplice esercizio. In una situazione più plausibile, all'utente verrebbe richiesto di immettere l'espressione algebrica letterale (se ho ben compreso, questo è lo scopo) in una singola stringa. In una seconda fase si provederebbe ad analizzare i singoli "token", con una normalissima scansione.
grazie andrea 69....
ma volevo kiedervi cm faccio ad acquisire sulla stessa riga + di una cifra????....posso solo una cifra x volta...cm anke una lettera x volta...
alla fine andrebbe anke bene...ma se si può meglio è!!!!...cmq nn è una esercitazione o compito....è solo x divertirmi un po' ed imparare soprattutto...ciao...grazie...aspetto risp...grazie ancora!
alla fine andrebbe anke bene...ma se si può meglio è!!!!...cmq nn è una esercitazione o compito....è solo x divertirmi un po' ed imparare soprattutto...ciao...grazie...aspetto risp...grazie ancora!
"Andrea69":
Mi spiace, ma temo che così non potrebbe proprio funzionare
Certamente, quel listato riporta solo la correzione per il problema della stampa dei dati acquisiti indicato da giocala88, nulla di più; altrimenti avrei ad esempio aggiunto una chiamata a free() per liberare la memoria allocata alla fine e riscritto in maniera completamente differente il programma.

Non c'è problema stan: l'osservazione era intesa come una nota didscalica per l'amico giocala88, non certo come un appunto nei confronti del codice che hai scritto.
Bene o male sono in giro per mailing list e forum tecnici da due decenni, una cosa che non ci si deve mai far mancare quando si leggono brani di codice "di esempio" è il principio di benevolenza interpretativa: perfino nelle più accanite discussioni talmudiche sugli standard vs le "feature" dei vari compilatori.
Bene o male sono in giro per mailing list e forum tecnici da due decenni, una cosa che non ci si deve mai far mancare quando si leggono brani di codice "di esempio" è il principio di benevolenza interpretativa: perfino nelle più accanite discussioni talmudiche sugli standard vs le "feature" dei vari compilatori.
