Problema in c/c++ argh - Pag 3
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 3 di 5 PrimoPrimo 12345 UltimoUltimo
Visualizzazione risultati da 31 a 45 di 67

Discussione: Problema in c/c++ argh

Cambio titolo
  1. #31
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Mi fai un'esempio anzichè darmi il prototipo con i parametri formali (che non mi aiutano di solito a capire)?
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  2. #32
    janky
    Ospite
    al posto di stampare a video memorizza quello che vuoi scrivere in un array

  3. #33
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Ah...e l'array lo devo dichiarare prima e dev'essere del tipo appropriato, giusto? Cmq utile...nell'ultima prova di laboratorio che ho fatto la parte facoltativa (che non ho avuto tempo di fare) dovevo concatenare 10 stringhe in una sola stringa gigante. A casa ho provato ma l'ho fatto solo utilizzando un file.
    Dici che sprintf avrebbe funzionato? Ti posto il programma:
    Codice:
    #include <stdio.h>
    #include <string.h>
    #define M 100
    #define N 10
    #define BIG 1000
    typedef char str100[M];
    typedef char str1000[BIG];
    
    int findMinS(str100 v[], int l, int s){
    	int i, pos;
    	str100 min;
    
    	strcpy(min, v[s]);
    	pos=s;
    
    	for(i=s; i<l; i++){
    		if(strcmp(v[i], min)==-1){
    			strcpy(min, v[i]);
    			pos=i;
    		}
    	}
    
    	return pos;
    }
    
    void selSort(str100 v[], int l){
    	int i, min;
    	str100 t;
    
    	for(i=0; i<l-1; i++){
    		min=findMinS(v, l, i);
    
    		strcpy(t, v[i]);
    		strcpy(v[i], v[min]);
    		strcpy(v[min], t);
    	}
    
    	return;
    }
    
    int main(){
    	str100 vect[N];
    	int i;
    
    	for(i=0; i<N; i++){
    		printf("Inserisci la stringa %d: ",i);
    		scanf("%s",&vect[i]);
    	}
    
    	printf("\n");
    
    	selSort(vect, N);
    
    	for(i=0; i<N; i++)
    		printf("%s \n",vect[i]);
    
    	printf("\n");
    
    	str1000 all;
    	FILE *concatena;
    
    	concatena=fopen("Concatena.txt", "w");
    
    	for(i=0; i<N-1; i++)
    		fprintf(concatena, "%s#", vect[i]);
    	fprintf(concatena, "%s", vect[N-1]);
    
    	fclose(concatena);
    
    	concatena=fopen("Concatena.txt", "r+");
    
    	fscanf(concatena, "%s", all);
    
    	fclose(concatena);
    
    	printf("%s",all);
    
    	return 0;
    }
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  4. #34
    janky
    Ospite
    ma... sinceramente in quel caso avrei usato una più semplice strcat(string1,string2) che attacca string2 alla fine di string1.

  5. #35
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Ecco, questa non la sapevo, e a lezione non ce l'ha spiegata ._.
    Il fatto è che le 2 stringhe concatenate devono essere separate da # (se non l'hai eseguito, l'output deve essere del tipo a#pippo#pluto#topolino), come si fa con strcat? ^^
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  6. #36
    janky
    Ospite
    ti crei un'altra stringa dove ci metti # e ad ogni passaggio del ciclo concateni lei seguita da quella che ti interessa

  7. #37
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Cioè devo fare

    Codice:
    for(i=0; i<N-1; i++){
          strcat(all, vect[i]);
          all[strlen(all)+1]=#;
    }
    
    strcat(all, vect[N-1]);
    ?

    all deve essere inizializzata? Cioè, alla iterazione 0 se faccio strcat(all, vect[i]) senza aver inizializzato all non funge? Non so inizializzare una stringa ora che ci penso
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  8. #38
    janky
    Ospite
    mi sorge un dubbio: non mi ricordo se si può usare strcat tra una stringa e un singolo carattere, perchè alla fine quello che devi fare non è una stringa contenente #, ma una singola variabile char contenente '#'.

    cmq le stringhe sono array di char, quindi le inizializzi con
    Codice:
     char all[DIM];
    più semplicemente io avrei fatto
    Codice:
     strcat(all,vect[0]);
     for(i=1;i<N;i++)
     {
         strcat(all,variabileCheContiene#); 
         strcat(all,vect[i]);
     }

  9. #39
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Ah allora all è automaticamente inizializzata nel typedef in alto!

    Cmq forse si può fare strcat(all, #) perchè ci ha detto di usare come unica variabile all, appunto. Boh ora provo
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  10. #40
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Boh...strcat(all, #) non funziona, e nemmeno strcpy(variabile, #) per mettere sto benedetto cancelletto nella stringa di supporto.
    E neanche se faccio variabile[0]=#...

    edit: idea, ora provo a fare *variabile=#, vediamo se funge :9
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  11. #41
    janky
    Ospite
    Io l'ho fatto con iostream, modificalo con stdio tu
    Codice:
      #include <iostream.h>
      #include <string.h>
      #include <stdio.h>
      
      #define MAX 100
      #define BIG 1000
      void main()
      {
      	char all[BIG]="",string1[MAX],string2[MAX],sharp[2]="#";
      
      	cout<<"Inserisci una stringa: ";
      	gets(string1);
      	cout<<"Inseriscine un'altra: ";
      	gets(string2);
      
      	strcat(all,string1);
      	strcat(all,sharp);
      	strcat(all,string2);
      
      	cout<<endl<<endl<<endl<<all;
      
      }
    cmq nel programma che hai scritto prima, cosa servono le funzioni che hai messo?
    Ultima modifica di janky; 8-12-2004 alle 12:04:54

  12. #42
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Codice:
    strcat(all, "#");
    man is your friend

  13. #43
    Thrash 'til deth L'avatar di Drizzt
    Registrato il
    05-03
    Località
    Lissone (MB)
    Messaggi
    8.057
    Citazione janky
    cmq nel programma che hai scritto prima, cosa servono le funzioni che hai messo?
    Quelle due funzioni servono per trovare il minimo nel vettore di stringhe (in questo caso, la stringa che viene prima delle altre in ordine alfabetico, visto che usiamo strcmp) e per scambiare il minimo con l'elemento i del vettore. Alla fine del ciclo gli elementi del vettore sono ordinati in ordine crescente. Praticamente usiamo la selSort unita alla findMinS per realizzare il metodo detto di Bubble-Sorting per ordinare degli insiemi finiti di elementi (vettori nel nostro caso).

    Codice:
    strcat(all, "#");
    Nooooo ho pure tentato strcat(all, '#'); ma gli apici trasformano # nel suo corrispondente valore ascii...

    Cmq non va:

    Codice:
    str1000 all;
    
    	for(i=0; i<N-1; i++){
    		strcat(all, vect[i]);
    		strcat(all, "#");
    	}
    
    	strcat(all, vect[N-1]);
    Mi da un output stranissimo, tipo ogni stringa ripetuta 2 volte immersa in un mare di Z (esempio: ZZZZZZa#aZZZZZZZpluto#plutoZZZZZ ecc)...ci rinuncio e aspetto la soluzione che mette il prof online ._.
    Citazione Kelvan Visualizza Messaggio
    Io sono contro i biclasse perché non servono a niente.

  14. #44
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Codice:
    strcat(all, "#");
    E' corretto.
    Sei sicuro che le stringhe siano ASCIIZ (cioe' che terminano con uno 0)?
    Perche' altrimenti strcat non funziona, e potrebbe dare risultati simili a quelli da te indicati (lo 0 e' il terminatore di fine stringa. Se non lo trova, continua a leggere oltre la fine della stringa finche' non incontra casualmente uno 0).
    Un altra possibilita' e' che tu abbia provocato un buffer overflow, cioe' non hai dimensionato adeguatamente gli array di char e sei andato a sovrascrivere lo 0 finale, con i risultati sopra descritti.

    N.B.
    0 <- zero
    man is your friend

  15. #45
    janky
    Ospite
    Citazione 3y34|v|31337
    Codice:
     strcat(all, "#");
    E' corretto.
    Sei sicuro che le stringhe siano ASCIIZ (cioe' che terminano con uno 0)?
    Perche' altrimenti strcat non funziona, e potrebbe dare risultati simili a quelli da te indicati (lo 0 e' il terminatore di fine stringa. Se non lo trova, continua a leggere oltre la fine della stringa finche' non incontra casualmente uno 0).
    Un altra possibilita' e' che tu abbia provocato un buffer overflow, cioe' non hai dimensionato adeguatamente gli array di char e sei andato a sovrascrivere lo 0 finale, con i risultati sopra descritti.

    N.B.
    0 <- zero
    le stringhe terminano con \0 non con 0 soltanto.

    cmq come avevo già detto prima avevo il dubbio che strcat(all, "#"); non funzionasse, invece funziona. Drizzt stai sbagliando qualcosa...

Pag 3 di 5 PrimoPrimo 12345 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •