la imagen que colocas me da la razon cada vez que le dices que si le dices que entre al bucle
Cita: if(r=='s'){
printf("SI");
op=1;
r='o';
}
en donde te hic la negrita entonces el vuelve a evaluar si op=1 y r='o' como ambas son ciertas te vuelve a imprimir el mensaje
Cita: printf("Ingresar mas datos?: ");
como no has limpiado la pantalla anterior a esto cada vez que digas que si te va a mostrar esto que tienes que hacer para resolver el problema limpiar la pantalla en este momento
Código C:
Ver originalif(r=='s'){
op=1;
r='o';
system("clear");//esto limpia la pantalla en linux busca una funcion nativa de c++ para hacerlo creo que clrscr() lo hace tambien no recuerdo bien }
con eso solucionarias tu problema ya que el mensaje se imprimira tantas veces como indique que si, si no limpias la pantalla te apareceran uno debajo del otro siempre saludos