[C con Clase] no entiendo porque no muestra los datos este for...

Steven Davidson srd4121 en njit.edu
Jue Abr 7 01:23:39 CEST 2011


Hola Goos,

On 4/6/2011 5:56 PM, goosfancito wrote:
> hola.
> Soy nuevo en C++ (c tampoco vi nunca)
>
> mirando los tutos me mande a hacer este bucle
>
> -------8<---------------------------
>
> #include<stdio.h>
>
> int main(){
>   	for (int nItem=0;nItem<10;nItem++) {
> 		printf("Paso por: %d\n",nItem);
> 		
> 		if (nItem=5)

Aquí tienes el error lógico. No es un error gramatical, pero no es lógico.

El problema se basa en que has usado el operador = de asiganción en 
lugar de == que es lo que quieres para comprobar si los operandos son 
iguales. Esto es,

if( 5 == nItem )

He cambiado los operandos, para que veas que si te equivocas otra vez, 
el compilador te dará un error; esto es, si escribes,

if( 5 = nitem )

el compilador te marcará un error, ya que no puedes asignar un valor a 
un valor literal, como es 5. Vamos, no puedes cambiar 5.

> 			break;
> 		else
> 			printf("sin break: %d\n",nItem);
> 	}
> }

Te falta agregar una sentencia 'return'; por convenio, se retorna 0 
(cero) para indicar que el programa terminó con éxito.


No aconsejo usar 'break'. Si hay problemas, puede ser difícil 
detectarlos al usar 'break', como también 'continue' y 'goto'. Si la 
condición '5 == nItem' puede provocar la ruptura del bucle 'for', 
entonces obviamente lo controla. Por lo tanto, esta condición debería 
pertenecer a la condición del bucle. Esto es,

// Caso particular: nItem = 0
printf( "Paso por: 0\n" );

// Caso general: 0 < nItem < 10  ó  nItem = 5
for( int nItem=1; nItem<10 && 5 == nItem; nItem++ )
{
   printf( "sin break: %d\n", nItem );
   printf( "Paso por: %d\n", nItem );
}

Entiendo que has hecho el programa a modo de ejercicio, pero te lo 
comento para que lo tengas en cuenta para los diseños de futuros programas.

> compilo asi:
>
> $ gcc -o tut01.o tut01.cpp -lstdc++
>

Sugiero usar g++ para compilar programas de C++. Por cierto, no deberías 
necesitar indicar la biblioteca estándar explícitamente.


Espero que todo esto te ayude.

Steven





Más información sobre la lista de distribución Cconclase