struct和fprintf中的字符指针
在函数struct和fprintf中的字符指针,c,C,在函数imprimir中,我在文件中执行fprintf时遇到问题,因为\u materials->nombres不返回值,因此,文本不显示此信息,请帮助我,因为我不知道发生了什么,如果其他人知道如何在数组中的结构nombre中创建,因为我不这样做是因为strtok返回了一个char指针 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char *n
imprimir
中,我在文件中执行fprintf时遇到问题,因为\u materials->nombres
不返回值,因此,文本不显示此信息,请帮助我,因为我不知道发生了什么,如果其他人知道如何在数组中的结构nombre中创建,因为我不这样做是因为strtok返回了一个char指针
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *nombre;
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[256];
curso *materias;
printf ("Archivo de entrada \n");
scanf ("%255s", 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);
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;
char auxiliar2[100];
char *token;
fgets (auxiliar2, 100, _entrada);
while (i < *_cantidad) {
fgets (auxiliar2, 100, _entrada);
token = strtok (auxiliar2, ":");
token = strtok (NULL, ":");
(_materias->nombre) = token;
fgets (auxiliar2, 100, _entrada);
token = strtok (auxiliar2, ":");
float val2 = atof (strtok (NULL, ":"));
(_materias->nota) = val2;
fgets (auxiliar2, 100, _entrada);
token = strtok (auxiliar2, ":");
float val = atoi (strtok (NULL, ":"));
(_materias->creditos) = val;
sumaCreditos = sumaCreditos + (_materias->creditos);
if ((_materias->nota) < 3.0) {
*_perdidas = (*_perdidas) + 1;
}
else {
*_ganadas = (*_ganadas) + 1;
}
sumaNotas = sumaNotas + ((_materias->nota) * (_materias->creditos));
i++;
*_materias++;
}
*_promedio = (sumaNotas / sumaCreditos);
}
void imprimir (curso * _materias, int *_cantidad, int *_ganadas,
int *_perdidas, float *_promedio)
{
char archivoSalida[256];
FILE *salida;
printf ("Archivo de salida \n");
scanf ("%255s", archivoSalida);
salida = fopen (archivoSalida, "w");
if (salida == NULL) {
printf ("No se logro abrir el archivo de salida\n");
exit (EXIT_FAILURE);
}
int i = 0;
fprintf (salida, "Archivo de Salida: \n");
fprintf (salida, "Materia\tNota\tCreditos \n");
while (i < *_cantidad) {
fprintf (salida, "%s\t%f\t%d \n", (_materias->nombre),
(_materias->nota), (_materias->creditos));
*_materias++;
i++;
}
fprintf (salida, "\nTotal de materias: %d \n", *_cantidad);
fprintf (salida, "Materias ganadas: %d \n", *_ganadas);
fprintf (salida, "Materias perdidas: %d \n", *_perdidas);
fprintf (salida, "Promedio ponderado: %f \n", *_promedio);
}
#包括
#包括
#包括
类型定义结构{
char*nombre;
int creditos;
浮动nota;
}库索;
int conteo(文件*_entrada);
无效文件(文件*\u entrada,游标*\u materials,int*\u cantidad,
加纳达斯、佩尔迪达斯、普罗梅迪奥);
无效即席证书(材料证书、证书、证书、,
国际货币基金组织,浮动货币基金组织;
int main(int argc,char*argv[])
{
int-ganadas=0;
int perdidas=0;
浮动承诺=0.0;
int-cantidad=0;
char archivoEntrada[256];
光标*材料;
printf(“归档文件”);
scanf(“%255s”,archivoEntrada);
文件*entrada;
entrada=fopen(archivoEntrada,“r”);
如果(entrada==NULL){
printf(“无任何文件”);
退出(退出失败);
}
cantidad=conteo(entrada);
Materialas=(curso*)malloc(sizeof(curso)*cantidad);
semestre(恩特拉达、马蒂亚斯、康蒂达斯、加纳达斯、佩尔迪达斯和普罗梅迪奥);
临时(材料、康蒂达、加纳达斯、佩迪达斯、普罗米迪奥);
免费(材料);
}
int conteo(文件*_entrada)
{
int i=0;
炭助剂[40];
而(!feof(_entrada)){
fgets(辅助,40,_entrada);
i++;
}
倒带;
返回i/3;
}
无效文件(文件*\u entrada,游标*\u materials,int*\u cantidad,
整数*加纳达斯、整数*佩尔迪达斯、浮动*\promedio)
{
int i=0;
int sumaCreditos=0;
浮式sumaNotas=0.0;
炭助剂2[100];
字符*令牌;
fgets(辅助设备2,100,_entrada);
而(我<*\u cantidad){
fgets(辅助设备2,100,_entrada);
令牌=strtok(辅助符号2,“:”);
令牌=strtok(空,“:”);
(_materials->nombre)=代币;
fgets(辅助设备2,100,_entrada);
令牌=strtok(辅助符号2,“:”);
float val2=atof(strtok(NULL,“:”);
(_materialas->nota)=val2;
fgets(辅助设备2,100,_entrada);
令牌=strtok(辅助符号2,“:”);
float val=atoi(strtok(NULL,“:”);
(_materials->creditos)=val;
sumaCreditos=sumaCreditos+(_materials->creditos);
如果((材料->注释)<3.0){
*_perdidas=(*_perdidas)+1;
}
否则{
*_加纳达斯=(*_加纳达斯)+1;
}
sumaNotas=sumaNotas+((材料->nota)*((材料->信贷));
i++;
*_Materials++;
}
*_promedio=(苏马诺塔/苏马克雷迪托斯);
}
无效即席证书(材料证书、证书、证书、,
整数*(浮点数),浮点数*(浮点数)
{
char archivoSalida[256];
档案*萨利达;
printf(“Archivo de salida\n”);
scanf(“%255s”,archivoSalida);
萨利达=福彭(archivoSalida,“w”);
if(salida==NULL){
printf(“无任何其他文件”);
退出(退出失败);
}
int i=0;
fprintf(萨利达,“萨利达档案:\n”);
fprintf(salida,Materiala\tNota\tCreditos\n);
而(我<*\u cantidad){
fprintf(salida,“%s\t%f\t%d\n”,(\u materials->nombre),
(材料->备注),(材料->信用证);
*_Materials++;
i++;
}
fprintf(salida,“\n材料总量:%d\n”,*\u cantidad);
fprintf(salida,“材料加纳达斯:%d\n”,*\u加纳达斯);
fprintf(salida,“材料/材料:%d\n”,*\u-perdidas);
fprintf(salida,“Promedio Poundado:%f\n”*\u Promedio);
}
可能是因为token
是一个堆栈变量。请正确缩进您的代码,因为这样很难读取,也请在“}”后面加空格,在“,”后面加空格,在“=”前面和后面加空格。我回答了很多问题。我甚至为今天的某个人写了一个程序来教他们,因为我要求他们缩进代码,他们做到了。这只是尊重。这里的人们不必试图阅读随意发布的代码,就有足够的时间了。考虑并帮助那些试图帮助你的人。这是无法理解的。好的,谢谢,现在的问题是,nombre值是一个字符指针,等于strtok给出的值,在函数imprimir中我做了“fprintf(salida,“%s\t%f\t%d\n”,(\u materials->nombre),(\u materials->nota),(\u materials->creditos));”这不是nombre的函数,你想替换(\u materials->nombre->nombre)=令牌代码>通过(\u materials->nombre)=标准(令牌)代码>