Porzione di codice dallo strano output

di Anonimizzato14222 il
6 risposte
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

  • 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
  • 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)
  • Con le modifiche che ti ho indicato e inserendo

    qwerty

    il programma funziona.

    Fammi vedere il codice che usi adesso con le correzioni.
  • 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;
    			}
    		}
    	}
    }
  • Io ti avevo scritto

    cout << str1 << endl;

    che è diverso da

    cout << str1[10] << endl;
  • 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