Cómo empezar
CS50 IDE es un «entorno de desarrollo integrado» basado en la web que le permite programar «en la nube», sin instalar ningún software localmente. De hecho, CS50 IDE le proporciona su propio «espacio de trabajo» (es decir, espacio de almacenamiento) en el que puede guardar sus propios archivos y carpetas (también conocidos como directorios).
Inicio de sesión
Vaya a ide.cs50.io y haga clic en «Iniciar sesión con GitHub» para acceder a su CS50 IDE. Una vez que tu IDE se cargue, deberías ver que (por defecto) está dividido en tres partes. Hacia la parte superior de CS50 IDE está tu «editor de texto», donde escribirás todos tus programas. Hacia la parte inferior hay una «ventana de terminal» (azul claro, por defecto), una interfaz de línea de comandos (CLI) que le permite explorar los archivos y directorios de su espacio de trabajo, compilar código, ejecutar programas e incluso instalar nuevo software. Y a la izquierda está tu «explorador de archivos», que te muestra todos los archivos y carpetas que hay actualmente en tu IDE.
Comienza haciendo clic dentro de tu ventana de terminal. Usted debe encontrar que su «prompt» se asemeja a la siguiente.
~/ $
Haga clic dentro de esa ventana de terminal y luego escriba
mkdir ~/pset1/
seguido por Enter con el fin de hacer un directorio (es decir, carpeta) llamado pset1
en su directorio de inicio. Tenga cuidado de no pasar por alto el espacio entre mkdir
y ~/pset1
o cualquier otro carácter. Tenga en cuenta que ~
denota su directorio principal y ~/pset1
denota un directorio llamado pset1
dentro de ~
.
De aquí en adelante, ejecutar (es decir, correr) un comando significa escribirlo en una ventana de terminal y luego presionar Enter. Los comandos distinguen entre mayúsculas y minúsculas, así que asegúrese de no escribir en mayúsculas cuando quiere decir minúsculas o viceversa.
Ahora ejecute
cd ~/pset1/
para entrar (es decir, abrir) ese directorio. Su indicador debería parecerse al siguiente.
~/pset1/ $
Si no es así, vuelva sobre sus pasos y vea si puede determinar dónde se equivocó.
Ahora ejecute
mkdir ~/pset1/hello
para crear un nuevo directorio llamado hello
dentro de su directorio pset1
. A continuación, ejecute
cd ~/pset1/hello
para trasladarse a ese directorio.
¿Hacemos que escriba su primer programa? Desde el menú Archivo, haga clic en Nuevo Archivo, y guárdelo (como a través de la opción Guardar del menú Archivo) como hello.c
dentro de su directorio ~/pset1/hello
. Proceda a escribir su primer programa escribiendo precisamente estas líneas en el archivo:
#include <stdio.h>int main(void){ printf("hello, world\n");}
Note cómo CS50 IDE añade «resaltado de sintaxis» (es decir, color) mientras escribe, aunque la elección de colores de CS50 IDE puede diferir de la de este conjunto de problemas. Esos colores no se guardan en realidad dentro del propio archivo; sólo son añadidos por CS50 IDE para hacer que cierta sintaxis se destaque. Si no hubieras guardado el archivo como hello.c
desde el principio, el IDE CS50 no sabría (por la extensión del nombre del archivo) que estás escribiendo código C, en cuyo caso esos colores estarían ausentes.
Listando archivos
A continuación, en tu ventana de terminal, inmediatamente a la derecha del prompt (~/pset1/hello/ $
), ejecuta
ls
¿Deberías ver sólo hello.c
? Eso es porque acabas de listar los archivos de tu carpeta hello
. En concreto, has ejecutado (es decir, ejecutado) un comando llamado ls
, que es la abreviatura de «lista». (Es un comando tan frecuentemente utilizado que sus autores lo llamaron simplemente ls
para ahorrar pulsaciones). ¿Tiene sentido?
Compilación de programas
Ahora, antes de que podamos ejecutar el programa hello.c
, recuerde que debemos compilarlo con un compilador (por ejemplo, clang
), traduciéndolo de código fuente a código máquina (es decir, ceros y unos). Ejecuta el siguiente comando para hacer eso:
clang hello.c
Y luego ejecuta éste de nuevo:
ls
Esta vez, deberías ver no sólo hello.c
sino también a.out
en la lista? (Puedes ver lo mismo gráficamente si haces clic en el icono de la carpeta de nuevo.) Eso es porque clang
ha traducido el código fuente en hello.c
a código máquina en a.out
, que resulta que significa «salida de ensamblador», pero más sobre eso en otro momento.
Ahora ejecute el programa ejecutando lo siguiente.
./a.out
¡Hola, mundo, de verdad!
Nombrando programas
Ahora, a.out
no es el nombre más amigable para un programa. Vamos a compilar hello.c
de nuevo, esta vez guardando el código máquina en un archivo llamado, más apropiadamente, hello
. Ejecute lo siguiente:
clang -o hello hello.c
¡Tenga cuidado de no pasar por alto ninguno de esos espacios que hay! A continuación, ejecute este de nuevo:
ls
Ahora debería ver no sólo hello.c
(y a.out
de antes) sino también hello
en la lista? Eso es porque -o
es un argumento de línea de comandos, a veces conocido como una bandera o un interruptor, que le dice a clang
para la salida (de ahí el o
) un archivo llamado hello
. Ejecute lo siguiente para probar el programa recién nombrado.
./hello
¡Hola de nuevo!
Haciendo las cosas más fáciles
Recuerde que podemos automatizar el proceso de ejecución de clang
, dejando que make
se encargue de hacerlo por nosotros, ahorrando así algunas pulsaciones. Ejecuta lo siguiente para compilar este programa una última vez.
make hello
Deberías ver que make
ejecuta clang
con aún más argumentos de línea de comandos para ti?
Ahora ejecuta el programa por última vez ejecutando lo siguiente.
./hello
¡Phew!
Obteniendo la entrada del usuario
Basta decir que, no importa cómo compiles o ejecutes este programa, sólo imprime hello, world
. Vamos a personalizarlo un poco, tal y como hicimos en clase.
Modifica este programa de forma que primero pregunte al usuario su nombre y luego imprima hello, so-and-so
, donde so-and-so
es su nombre real.
Como antes, asegúrese de compilar su programa con:
make hello
Y asegúrese de ejecutar su programa, probándolo unas cuantas veces con diferentes entradas, con:
./hello
Paseo
Pistas
¿No recuerdas cómo pedir el nombre al usuario?
Recuerda que puedes utilizar get_string
de la siguiente manera, almacenando su valor de retorno en una variable llamada name
de tipo string
.
string name = get_string("What is your name?\n");
¿No recuerdas cómo formatear una cadena?
No recuerdas cómo unir (es decir, concatenar) el nombre del usuario con un saludo? Recuerda que puedes usar printf
no sólo para imprimir sino para formatear una cadena (de ahí el f
en printf
), a la manera de lo que se muestra a continuación, donde name
es un string
.
printf("hello, %s\n", name);
¿Uso de un identificador no declarado?
Viendo lo que se muestra a continuación, ¿tal vez por encima de otros errores?
error: use of undeclared identifier 'string'; did you mean 'stdin'?
Recuerda que, para usar get_string
, necesitas incluir cs50.h
(en el que se declara get_string
) encima de un fichero, como con:
#include <cs50.h>
Cómo probar tu código
Ejecuta lo siguiente para evaluar la corrección de tu código usando check50
. Pero asegúrate de compilarlo y probarlo tú mismo
check50 cs50/problems/2020/x/hello
Ejecuta lo siguiente para evaluar el estilo de tu código usando style50
.
style50 hello.c
Cómo enviar
Ejecuta lo siguiente, iniciando sesión con tu nombre de usuario y contraseña de GitHub cuando se te pida. Por seguridad, verás asteriscos (*
) en lugar de los caracteres reales de tu contraseña.
submit50 cs50/problems/2020/x/hello