La llamada a exec*() reemplazan la imagen del proceso actual con una nueva del que indicas.
Es decir, para que lo entiendas mejor, el programa original "desaparece" si todo sale bien, por lo que no se sigue ejecutando.
Lo mejor que puedes hacer si sólo quieres ejecutar un comando que vuelva, es usar system(). De hecho, system() hace algo similar a lo que tú tratas de hacer a mano. Puedes resumir tu código con:
Código:
if (system("experimento") == 0)
cout << "El experimento terminó bien" << endl;
else
cout << "El experimento terminó mal o no se pudo iniciar, con código " << result << endl;
O algo del estilo.