Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pino06-01-2016 en 23 de Marzo 2016, 14:35

Título: Dudas con la función fgets (lenguajeC).
Publicado por: Pino06-01-2016 en 23 de Marzo 2016, 14:35
Hola gente.
Código: [Seleccionar]
fgets( word[i], MAX_COL , stdin );

if((p=strchr(word[i], '\n'))){
*p='\0';
}
else{
while((ch = getchar()) !='\n' && ch!=EOF);
word[i][MAX_COL] = '\0';
}

En este trozo de código está mi gran duda, según lo que tengo leído es que si ingreso menos caracteres que  MAX_COL fgets los guarda desde el buffer de teclado en la variable indicada, en este caso word y también el carácter de nueva línea (\n) que se produce al apretar < Enter >, la primera duda, ¿es estrictamente necesario remplazar el carácter \n por \0? -
En el caso de ingresar más caracteres del establecido por MAX_COL fgets lee  MAX_COL – 1 y en la última casilla de memoria asignada a MAX_COL copia el carácter \n, de ser esto cierto la otra duda es:  ¿la sentencia else no se ejecuta nunca en este caso, o estoy equivocado?

Desde ya muchas gracias por el tiempo que le dediquen al tema,-

Saludos.
Daniel
Título: Re:Dudas con la función fgets (lenguajeC).
Publicado por: César Krall en 25 de Marzo 2016, 23:12
Hola Pîno!

Me remito a este curso http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210

Funciones para recuperar datos desde archivos:

fgets (arg1, arg2, arg3)
   

Recupera el contenido del archivo en la variable arg1 hasta que encuentra o bien un carácter de fin de línea (\n) o bien hasta extraer arg2-1 caracteres siendo arg2 un valor especificado en la llamada de la función y arg3 el nombre interno del fichero.

Ejemplo: fgets (cadena1, n, nombreInternoFichero);

El \0 es un carácter especial que define el final de una cadena en C

Para entender bien el sentido del código que indicas habría que verlo completo, por ejemplo en el fragmento de código no se ve cómo está definido p.

Tampoco acabo de entender bien por qué word tiene en un caso un índice: word[ i ] y en otro caso dos índices: word[MAX_COL], habría que cer cómo está definido word

Saludos!