gpt4 book ai didi

c - C 文件中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:05:58 25 4
gpt4 key购买 nike

我在函数 imprimir 中获取第二个文件时出现段错误,我不知道发生了什么,因为他打开并读取了第一个文件而不是其他文件,这让我很困惑,请帮助我

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

typedef struct
{
char nombre[40];
int creditos;
float nota;
} curso;

int conteo(FILE *_entrada);
void semestre(FILE *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio);
void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio);

int main(int argc, char *argv[])
{
int ganadas=0;
int perdidas=0;
float promedio=0.0;
int cantidad=0;
char *archivoEntrada;
curso *materias;
printf("Archivo de entrada \n");
scanf("%s",archivoEntrada);
FILE *entrada;
entrada=fopen(archivoEntrada,"r");
if(entrada==NULL)
{
printf("No se logro abrir el archivo de entrada\n");
exit(EXIT_FAILURE);
}
cantidad=conteo(entrada);
printf("El numero de materias es: %d \n",cantidad);

materias=(curso *)malloc(sizeof(curso)*cantidad);

semestre(entrada,materias,&cantidad,&ganadas,&perdidas,&promedio);
imprimir(materias,&cantidad,&ganadas,&perdidas,&promedio);
free(materias);
}

int conteo(FILE *_entrada)
{
int i=0;
char auxiliar[40];
while(!feof(_entrada))
{
fgets(auxiliar,40,_entrada);
i++;
}
rewind(_entrada);
return i/3;
}

void semestre(FILE *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio)
{
int i=0;
int sumaCreditos=0;
float sumaNotas=0.0;
while(i<*_cantidad)
{
fscanf(_entrada, "%s", _materias->nombre);
fscanf(_entrada, "%d", &_materias->creditos);
sumaCreditos=sumaCreditos+(_materias->creditos);
fscanf(_entrada, "%f", &_materias->nota);
if((_materias->nota)>3.0)
{
*_ganadas=(*_ganadas)+1;
}
}
}

void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio)
{
fflush(stdin);
printf("Ganadas %d \n",*_ganadas);
printf("perdidas %d \n",*_perdidas);
printf("prom %f \n",*_promedio);
char *archivoSalida;
FILE *salida;
printf("Archivo de salida \n");
scanf("%s",archivoSalida);
salida=fopen(archivoSalida,"w");
if(salida==NULL)
{
printf("No se logro abrir el archivo de salida\n");
exit(EXIT_FAILURE);
}
//Implementacion imprimir en archivo salida.txt
}

最佳答案

你有

char *archivoSalida;

然后

scanf("%s",archivoSalida);

这里的问题是指针 archivoSalida 实际上并没有指向任何特殊的地方。未初始化的局部变量(如 archivoSalida 是)有一个不确定值。在没有初始化的情况下使用它们会导致未定义的行为,这是导致崩溃的一个非常常见的原因。

相反,您可能想使用固定大小的数组:

char archivoSalida[256];
...
scanf("%255s",archivoSalida);

关于c - C 文件中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32915631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com