Y para finalizar en los for entonces hacer un for de esta manera esta mal cierto
for(i=0;i=9;i++){
}
Sí, sería incorrecto, en primer lugar porque el segundo campo del <for> que debería ser una condición, no lo es, es una asignación. El funcionamiento de ese <for> es el siguiente: entras en el <for> y se asigna el valor inicial <i = 0>. Se llega a la condición que como no es una condición sino una asignación se ejecuta entonces ahora <i = 9>. Se ejecuta el interior del bucle. Termina una iteración y se produce el incremento <i = 10>, se llega a la condición de nuevo y... <i = 9>. Se vuelve a ejecutar el bucle.
Conclusión: tenemos un bucle infinito en el que i siempre vale 9.
Resumen: <a = b> asignas a <a> el valor de <b>
<a == b> comparas que el valor de <a> y el de <b> sean iguales
Quieres probarlo? Simple, ejecuta esto (no hace falta que modifiques nada) y podrás ver los valores de i por pantalla (no esperes que acabe):
#include <iostream>
using namespace std;
int main(){
for(int i = 0; i = 9; i++)
cout << i << endl;
}
En todo caso la otra opción (haciendo correctamente una condición y no una asignación) sería usando dos iguales, tal que así:
#include <iostream>
using namespace std;
int main(){
for(int i = 0; i == 9; i++)
cout << "El bucle se ha ejecutado" << endl;
}
Resultado de este código: NINGUNO. Empieza el bucle <i = 0>, llegamos a la condición... ¿<i == 9>? No, <i = 0>; entonces sale del bucle. Nunca llegará a ejecutarse lo que haya dentro del bucle.