Duda en sintaxis de C

Iniciado por the_jocker, 3 Abril 2012, 00:06 AM

0 Miembros y 1 Visitante están viendo este tema.

the_jocker

Buenas, Empiezo hace horas con el lenguaje C, se ve picante, pero empeze a familiarizarme con la sintaxis, pero qui la duda, resulta que edito con nano, en ubuntu, compilo con gcc, todo bien, pero vi codigo de ejemplo y por ejemplo esto no compila:

#include <stdio.h>

int main()
{
     int a;
     for(a=0;a<=10;a++)
     {
          printf("no molestar en clase\n");
          return 0;
     }
}


No entiendo el programa esta bie escrito, pero esto si toma perfecto:

#include <stdio.h>

int main()
{
     int a;
     for(a=0;a<=10;a++)
          printf("no molestar en clase\n");
          return 0;
}


Es decir el segundo esta sin los corchetes del for y lo toma perfecto, puede que pase o asi es la sintaxis del lenguaje. Gracias.

Ferno

¿No compila? ¿O no funciona? ¿Qué error aparece?
A mí me compila perfecto (sin embargo, puede que dependa de los parámetros que utilices para compilar). En todo caso, puede que chille por el hecho de que main no estaría devolviendo un int en su ámbito más general (sino que está dentro del for).
Es decir, la gran diferencia entre ambos códigos, es que en el segundo caso, el return NO ESTÁ dentro del for (si no se explicitan corchetes, entonces las instrucciones solo toman una sentencia dentro de su ámbito, en este caso, solo el printf).

the_jocker

#2
Los 2 funcionan, pero el segundo cumple con lo que quiero mostrar, es decir la cantidad de veces del for, pero el primero muestar una sola vez el mensaje y termina la ejecucion, yo vi en todos lados que los ciclos estan entre llaves en todos lo lenguajes, es mas probe solo con main(), y lo mismo, int main(void), tampoco, por eso mi duda, que es lo que estaria mal para que no haga lo que le pido.

farresito

Te explico. No se si conocias previamente un lenguaje, pero la funcion main, la principal, al ser una funcion int, debe retornar algo. Siempre (debería). Cuando retornas 0, le estas diciendo al programa que este termino correctamente. Si hubiera un error y no finalizase el programa, obviamente no llegariamos a la ultima linea, que es la que confirma que hemos acabado al programa sin errores, y retornaria otro valor.

La sintaxis de un loop (bucle) for es: todo lo que quieres que pase en una iteracion debe ir incluido entre llaves. Si no pones llaves, en cada iteracion solo ocurrira la primera linea despues del for, nada mas, aunque lo tengas situado a la misma altura en cuanto a espaciado,

En el primer ejemplo, el return 0 lo haces en CADA iteracion. El programa terminara mal, porque el return solo deberia ocurrir una vez. En el segundo ejemplo, despues del for, la unica linea que ocurre en cada iteracion al no haber llaves es el printf. El return solo ocurrira despues de que finalice el for. Esto de no usar siempre llaves se hace porque a veces solo interesa mostrar un simple printf, o en los if-else solo retornar algo, y asi nos ahorramos tiempo.

durasno

Hola! en instrucciones como for, while, do while, if se abre llaves cuando su bloque de codigo tiene mas de una sentencia, es decir:
for(; ; )
{
sentencia1;
sentencia2;
sentencian;
}
Ahora cuando solo hay una sentecia se puede omitir las llaves:
for(; ; )
 sentencia1;

Vallamos a tu codigo: en el primer caso lo que estarias haciendo es entrar al for, imprimir una sola vez con el printf y luego salir(por el return) ya que el return se encuentra dentro del for. Return termina con el main
En el segundo caso se ejecutan las 10 veces los printf ya que return esta afuera del for. La unica sentencia q tiene el for es el printf y no return

Saludos
Ahorrate una pregunta, lee el man

the_jocker

Ya lo probe al codigo con el return fuera del for, y anduvo perfecto.
Recien empiezo con C,en realidad en la facultad estamos viendo C++ y lei por ahi que si aprendo bien c++ despues cuesta mucho acomodarse a C,entonces quiero aprender C junto a C++, nose si es correcto esto, el codigo me quedo asi:

#include <stdio.h>

main()
{
     int a;
     for(a=0;a<=10;a++)
     {
           printf("No molestar en clase\n");
     }
     return 0;
}


Muchas gracias,es importante que consideren mi pregunta del orden en que deberia aprender un lenguaje deacuerdo a sus propias experiencias, para poder tomar una decision. Gracias desde Argentina

farresito

Cita de: the_jocker en  4 Abril 2012, 01:48 AM
Ya lo probe al codigo con el return fuera del for, y anduvo perfecto.
Recien empiezo con C,en realidad en la facultad estamos viendo C++ y lei por ahi que si aprendo bien c++ despues cuesta mucho acomodarse a C,entonces quiero aprender C junto a C++, nose si es correcto esto, el codigo me quedo asi:

#include <stdio.h>

main()
{
     int a;
     for(a=0;a<=10;a++)
     {
           printf("No molestar en clase\n");
     }
     return 0;
}


Muchas gracias,es importante que consideren mi pregunta del orden en que deberia aprender un lenguaje deacuerdo a sus propias experiencias, para poder tomar una decision. Gracias desde Argentina
Efectivamente, asi es. Y en cuento a la dificultad de aprender C... Yo no me preocuparia. La sintaxis es practicamente identica y si manejas C++, de C solo tendras que estudiarte pocas cosas. En serio, no te preocupes. Si aprendes primero C++, C te costara lo mismo: poco. Solo son algunos conceptos concretos, como los punteros, pero lo que es los bucles... Tranquilo. Cualquier elección sera correcta

the_jocker

Muchas gracias por responder,lo tengo que hacer a C++ igual, pero voy a ir por los 2,de nuevo farresito
espero algun dia poder darte una mano como lo hiciste vos, ojala todos los foros fueran iguales a este, no se si cierran los temas pero este ya lo pueden dar por solucionado.Muchas gracias y en especial a farresito.

farresito

Cita de: the_jocker en  4 Abril 2012, 02:53 AM
Muchas gracias por responder,lo tengo que hacer a C++ igual, pero voy a ir por los 2,de nuevo farresito
espero algun dia poder darte una mano como lo hiciste vos, ojala todos los foros fueran iguales a este, no se si cierran los temas pero este ya lo pueden dar por solucionado.Muchas gracias y en especial a farresito.
Esta es la base de un foro como este: los nuevos aprenden de los que saben un poco mas. Yo estoy muy agradecido de usuarios como Eternal Idol que han dedicado su tiempo a responderme muchas veces. No es necesario tanto agradecimiento, de verdad. Un dia seras tu el que ayudaras. A quien debes agradecer por esto es a usuarios que dedican horas a hacer tutoriales y guias para novatos. Estos si que merecen un respeto. Creeme.

Un abrazo.