[C++] Senza endl il programma termina in anticipo

giuscri

//a,b variabili intere;
//mcm ed euclide: due funzioni che resistuiscono un intero ciascuna

	cout << "Il mcm fra " << a << " e " << b << " e' " << mcm(a,b);
	cout << "\nIl MCD fra " << a << " e " << b << " e' " << euclide(a,b); //manca l'endline!

	cin.get();

	return 0;

}



Se il codice viene scritto così, il programma viene compilato ma all'esecuzione stampa a video solo la prima riga e si conclude immediatamente. Se invece scrivo


//...

cout << "\nIl MCD fra " << a << " e " << b << " e' " << euclide(a,b) << endl;

//...



anche quest'ultima riga viene stampata a video.

Perché succede questo?

Risposte
apatriarca
Il comportamento mi sembra strano, posteresti l'intero codice in modo da permetterci di compilarlo e verifarne il comportamento?

giuscri
"apatriarca":
Il comportamento mi sembra strano, posteresti l'intero codice in modo da permetterci di compilarlo e verifarne il comportamento?




#include <iostream>

using namespace std;

int euclide(int,int);
int mcm(int,int);

int main(){

	int a,b;

	cin >> a >> b;

	cout << "MCD = " << euclide(a,b) << endl;
	cout << "mcm = " << mcm(a,b);

	return 0;

}

int euclide(int a,int b){

	int r = a%b;
	
	while(r != 0){

		a=b;
		b=r;
		r=a%b;

	}

	return b;

}

int mcm(int a,int b){

	int c = (a*b) / euclide(a,b);

	return c;

}



Per scrivo da un altro computer e m'è venuto in mente che forse sia un problema della shell.
Quì l'esecuzione del programma è stata un po' più lenta. Ho potuto vedere che l'ultima riga viene comunque stampata; poi viene subito "sovrascritta" dal solito [utente] % .

apatriarca
A me non da alcun problema il tuo programma. Su che sistemi lavori? Con quale compilatore?

giuscri
"apatriarca":
A me non da alcun problema il tuo programma. Su che sistemi lavori? Con quale compilatore?


Il compilatore è g++ 4.1.2, mentre la distribuzione di Linux è Fedora. Di più non saprei dire perché sto lavorando in remoto con una sessione ssh dal computer dell'università.

claudio862
"giuscri":
Per scrivo da un altro computer e m'è venuto in mente che forse sia un problema della shell.
Quì l'esecuzione del programma è stata un po' più lenta. Ho potuto vedere che l'ultima riga viene comunque stampata; poi viene subito "sovrascritta" dal solito [utente] % .

È sicuramente un problema della shell. std::endl scrive un carattere di newline '\n' sullo stream. Senza scrivere l'ultimo carattere di newline, il prompt dovrebbe venire stampato sulla stessa ultima linea di output del programma, qualcosa del genere:

prompt% g++ -std=c++98 -pedantic -Wall -Wextra test.cpp
prompt% ./a.out
5
6
MCD = 1
mcm = 30prompt%

Però la shell potrebbe forzare la stampa del prompt all'inizio della linea. Alla fine del programma scrivi sempre un '\n' oppure std::endl, per evitare questi problemi.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.