Porzione di codice dallo strano output

di il
6 risposte

Porzione di codice dallo strano output

Salve!

Qualcuno di buona volontà può aiutarmi a capire perché questa porzione di codice

#include <iostream>
#include <cstring>
using namespace std;

void ordine (char str1[10]);

int main (){
	
	char str1[10], temp; //str2[20];
	int i;

	cout << "Inserisci la prima stringa di caratteri(al più 10 lettere): \n";
	cin.getline(str1, 10);

	ordine (str1);

	cout << "La stringa messa in ordine è: \n";
	for (i=0; i<10; i++){
		cout << temp << endl;
	}
	return 0;
}

void ordine (char str1[10]){
	int i, j;
	char temp;
	for (i=0; i<10; i++){
		for (j=0; j<10; j++){
			if (str1[i]<str1[j]){
				temp=str1[j];
				str1[j]=str1[i];
				str1[i]=temp;
			}
		}
	}
}
mi da questo out?
Inserisci la prima stringa di caratteri(al più 10 lettere): 
qwertyuiop
La stringa messa in ordine è: 
?
?
?
?
?
?
?
?
?
?
cioè, perché le lettere sono dei punti interrogativi? dov'è che sbaglio?

Grazie mille in anticipo!

6 Risposte

  • Re: Porzione di codice dallo strano output

    Nelle for non devi indicare

    i<10

    perché non è detto che la stringa non sia più piccola ... metti

    i<strlen(str1)

    E nella for finale cosa c'entra temp? Semmai devi indicare

    cout << str1 << endl;

    Infine fai attenzione perché in C esiste il terminatore degli array di char e quindi hai spazio per 9 caratteri non 10
  • Re: Porzione di codice dallo strano output

    Provato con tutte le modifiche, nada..anzi ora al posto degli interrogativi c'è il vuoto...

    (il temp lo uso perché vorrei stampare l'array ordinato dalla procedura)
  • Re: Porzione di codice dallo strano output

    Con le modifiche che ti ho indicato e inserendo

    qwerty

    il programma funziona.

    Fammi vedere il codice che usi adesso con le correzioni.
  • Re: Porzione di codice dallo strano output

    Pensando che il problema fosse del delimitatore ho provato anche a scrivere solo qwerty ma la stringa ordinata è vuota...
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    void ordine (char str1[10]);
    
    int main (){
    	
    	char str1[10], temp; //str2[20];
    	int i;
    
    	cout << "Inserisci la prima stringa di caratteri(al più 10 lettere): \n";
    	cin.getline(str1, 10);
    
    	ordine (str1);
    
    	cout << "La stringa messa in ordine è: \n";
    	for (i=0; i<strlen(str1); i++){
    		cout << str1[10] << endl;
    	}
    	return 0;
    }
    
    void ordine (char str1[10]){
    	int i, j;
    	char temp;
    	for (i=0; i<strlen(str1); i++){
    		for (j=0; j<strlen(str1); j++){
    			if (str1[i]<str1[j]){
    				temp=str1[j];
    				str1[j]=str1[i];
    				str1[i]=temp;
    			}
    		}
    	}
    }
  • Re: Porzione di codice dallo strano output

    Io ti avevo scritto

    cout << str1 << endl;

    che è diverso da

    cout << str1[10] << endl;
  • Re: Porzione di codice dallo strano output

    Oh, vero, scusa mi sono addormentato un secondo! comunque ora è ok, grazie mille per l'aiuto
Devi accedere o registrarti per scrivere nel forum
6 risposte