|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Non stampa niente
Ciao
Molto spesso quando mi capita di fare programmi in C non stampa niente. Da quali fattori può dipendere? Ad esempio ora ho scritto questo programma che permette di fondere due array ordinati in un altro array mantenendo sempre l'ordine (una sorta di mergesort). Codice:
#include <stdio.h>
#include <stdlib.h>
int *fusione(int [], int [], int, int);
void stamparray(int []);
int main(void){
int len1,len2,i=0,j=0;
printf("Inserisci lunghezza del primo vettore: ");
scanf("%d", &len1);
int *t=(int *) malloc(sizeof(int)*len1);
for( ; i<len1; ++i)
scanf("%d", &t[i]);
printf("Inserisci lunghezza del secondo vettore: ");
scanf("%d", &len2);
int *s=(int *) malloc(sizeof(int)*len2);
for( ; j<len2; ++j)
scanf("%d", &s[j]);
printf("%s", fusione(t,s,len1,len2));
return 0;
}
int *fusione(int t[], int s[], int l1, int l2){
int *result=(int*) malloc(sizeof(int)*(l1+l2));
int i=0,j=0,k=0;
while(i<l1 && j<l2)
if(t[i]<=s[j])
result[k++]=t[i++];
else
result[k++]=s[j++];
while(i<l1)
result[k++]=t[i++];
while(j<l2)
result[k++]=s[j++];
return result;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ho trovato l'errore...
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2000
Città: prov. Olbia-Tempio; Trattative concluse: ne ho perso da tempo il conto
Messaggi: 6884
|
Quote:
Certo... il %s si usa per le stringhe (o meglio array di caratteri). La printf stampa tutto l'array di caratteri perchè l'array di caratteri termina col terminatore nullo ('\0') in C... quindi la printf è stata naturalmente implementata in grado di stampare tutto l'array perchè va avanti finchè non trova il terminatore nullo che la fa smettere (e non viene stampato). L'array di interi invece non ha terminatore e quindi la printf non è stata implementata per stampare l'array di interi passatole... cioè è in grado di stampare un intero alla volta: printf("%d ", intero[i]); se si vuole stampare un array di interi bisogna farlo "a mano", con un ciclo condizionato che cicla finchè non viene raggiunta la fine dell'array: ..... int *t, i, int_array_len, *array_int; ...... scanf("%d", &int_array_len); array_int = (int *) malloc(int_array_len*sizeof(int)); ..... t = array_int; for (i=0; i < int_array_len; i++) scanf("%d", array_int++); ..... array_int = t; for (i=0; i < int_array_len; i++) printf("%d ", *array_int++); ...... Così davrebbe funzionare, usando cioè i puntatori ad interi. Ciao |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2000
Città: prov. Olbia-Tempio; Trattative concluse: ne ho perso da tempo il conto
Messaggi: 6884
|
Azz... che compilatore usi? Io sono rimasto ai compilatori C classico (in modalità testo) che non consentivano di dichiarare variabili inframmezzatamente alle istruzioni... altri tempi...
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ora si usano (credo) prettamente compilatori conformi allo standard ANSI C.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:58.



















