|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Problema in C
Ciao a tutti
sto risolvendo il seguente esercizio: Si scriva un programma che legge una sequenza di almeno 1000 interi distinti, ciascuno seguito immediatamente da una lettera. Il carattere # indica la fine della sequenza. In seguito si legge un altro intero e, sulla base della sequenza introdotta, si determini se esiste una lettera associata a quell'intero. Ho risolto così: #include <stdio.h> #include <ctype.h> typedef struct scat { int n; char c; }SCATOLA; SCATOLA *A; void CREA (int f){ SCATOLA B[f]; A=&B[0];} int main() { int l,f,e,i; char d; printf("\n"); printf("\n"); printf(" Immettere valore della lunghezza del vettore delle scatole\n"); scanf("%5d",&l); CREA(l); for(i=0;i<l;i++) { printf("Immettere lettera\n"); scanf("%c",&A[i].c); printf("\n"); if(A[i].c=='#') { printf("Se si ha intenzione di cercare la lettera associata ad un numero \n"); printf(" premere A, per uscire premere E\n"); scanf("%c",&d); if(d==97) { printf("Immettere numero associato alla lettera\n"); scanf(" 5%d ",&e); for(f=0;f!=i;f++) if (A[f].n==e) printf("La lettera associata 5%d ",A[f].c); else printf("Errore numero non esistente"); return 0; } else return 0; } printf("Immettere cifra\n"); scanf(" %5d",&A[i].n); printf("\n"); } return 0;} Dopo aver compilato il tutto senza alcun problema faccio girare il programma ma succede questo: Immettere valore della lunghezza del vettore delle scatole 2 Immettere lettera Immettere cifra a Immettere lettera Immettere cifra 4 Praticamente mi fa solo una richiesta non capisco, dovrebbe chiedermi anche il numero . Bo non saprei. Confido nel vostro aiuto. Ciao e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quello che mi stupisce è che ti abbia compilato !!!
![]() void CREA (int f){ SCATOLA B[f]; A=&B[0];} Non è possibile mettere una variabile nell dimensione del vettore... L'intero immesso deve essere prestabilito...se vuoi creare un vettore non non abbia dimensioni prestabilite devi usare malloc e per liberare la memoria free... |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' ammissibile ? Azz...non lo sapevo...
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Guarda questa funzione:
void foo(int x) { int a[x]; a[1] = 2; a[2] = 1; } gcc la compila così: pushl %ebp movl %esp, %ebp pushl %eax pushl %eax movl %esp, %edx // In %ebp+8 c'è x e viene messo in %eax movl 8(%ebp), %eax // Le 3 ricghe che seguono calcolano (x*4+15)&0xfffffff0 // (arrotondamento al frame superiore, per motivi di velocità) decl %eax leal 19(,%eax,4), %eax andl $-16, %eax // Allocazione dinamica! subl %eax, %esp // Ora %esp punta ad a[0], %esp+4 ad a[1] ecc. movl $2, 4(%esp) movl $1, 8(%esp) movl %edx, %esp movl %ebp, %esp popl %ebp ret
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ganzo...non lo sapevo...
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
In Visual C++ :
(145) : error C2057: expected constant expression (145) : error C2466: cannot allocate an array of constant size 0 (145) : error C2133: 'a' : unknown size Ovviamente la riga 145 è quella di int a[x] |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il gcc non è il Visual C++
(per fortuna) Puoi provare col Borland?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Con il Borland purtroppo non posso provare... |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Oct 2000
Messaggi: 637
|
Con il Borlnad C++ Builder non è possibile fare quello che dite
SCATOLA B[f]; Mentre con altri compilatri (ad esempio Dev C++)si, come è possibile, anche se su entrambi è settata come modalita ANSI C? |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Jun 2000
Città: Milano
Messaggi: 136
|
Scusate me non si è risolto praticamente niente mi fa solo una richiesta di scanf e basta.
Ciao e grazie
__________________
athlon xp-m 2400Mhz asus a7n8x-x ati 9800 aiw@9800pro |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:24.