es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema con fscanf en C.

Ok, así que he estado teniendo un problema al usar int y char para mi función. Y está obteniendo un mensaje de error quiero saber cómo debo solucionarlo con el código que tengo:

#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp;
char name[100];
int roll_no, chars;
float marks;

fp = fopen(“records.txt”, “r”);

if(fp == NULL)
{
printf(“Error al abrir el archivo\n”);
exit(1);
}

printf(“Probando la función fscanf(): \n\n”);
printf(“Nombre:\t\tNo. de rol\t\tCalificaciones\n”);

while( fscanf(fp, “Nombre: %s\t\tNo. de rol: %d\t\tCalificaciones: %f\n”
, name, &roll_no, &marks) != EOF )
{
printf(“%s\t\t%d\t\t%.2f\n”, name, roll_no ,marks);
}

fclose(fp);
return 0;
}

La salida esperada era esta …

Consejos/ayuda sobre cómo utilizar la función char en la línea 8 sería apreciado.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que no está utilizando el especificador de formato correcto para la variable name. El especificador de formato %s se utiliza para cadenas de caracteres, por lo que debería utilizarse para la variable name. También debe utilizar el especificador de formato %d para la variable roll_no, ya que es un número entero.

    Debe asegurarse de que los especificadores de formato en la función fscanf() coincidan con el orden de las variables en la función printf().

    Su código debería verse así:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    FILE *fp;
    char name[100];
    int roll_no, chars;
    float marks;
    
    fp = fopen("records.txt", "r");
    
    if(fp == NULL)
    {
        printf("Error al abrir el archivo\n");
        exit(1);
    }
    
    printf("Prueba de la función fscanf(): \n\n");
    printf("Nombre:\t\tNúmero de rol\t\tNotas\n");
    
    while( fscanf(fp, "Nombre: %s\t\tNúmero de rol: %d\t\tNotas: %f\n"
                    , name, &roll_no, &marks) != EOF )
    {
        printf("%s\t\t%d\t\t%.2f\n", name, roll_no ,marks);
    }
    
    fclose(fp);
    return 0;
    }
    

Comments are closed.