gpt4 book ai didi

C - 使用 fgetc 将值存储在枚举 'class' 中

转载 作者:行者123 更新时间:2023-11-30 15:57:51 25 4
gpt4 key购买 nike

我正在编写一个程序,该程序接受其中包含数据库条目的文件。这些条目均采用相同的格式,数据的顺序也相同。文件中的第一个数字是条目数。然后数据看起来像这样:姓氏 名字 学生 ID 年龄 年份 GPA 预期毕业日期

例如:Doe John 12345678 23 新生 4.0 2013

我的问题是年份值。我们应该将其声明为“class”类型,它应该是enum class{freshman,sophomore,junior,senior,grad};

我有一个带有以下声明的头文件:

typedef enum {firstYear, sophomore, junior, senior, grad} class;

然后是我的主文件:

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

int main(int argc, char *argv[]){

typedef struct{
int DBrecordID; //ID for each entry, range 0-319
char *last; //student last name
char *first; //student first name
char studentID[8]; //student ID
int age; //student age
class year; //year in school
float gpa; //GPA
int expGradYear; //expected graduation year
}DBrecord;
int numEntries;
DBrecord **record;
char buffer[80];
FILE *fpt;
int c, i;
int j = 0;

//check for invalid file arguments
if(argc != 2){
printf("Number of arguments is invalid\n");
exit(1);
}

//error if unable to open file
if((fpt = fopen(argv[1], "r")) == NULL){
printf("Error: Couldn't open file.\n");
exit(1);
}

//set file pointer to read passed file
fpt = fopen(argv[1], "r");

//scan first int in file and assign to numEntries
//fscanf(fpt, "%d", &numEntries);

//allocate memory for structures, each is 36 bytes
*record = malloc (sizeof (DBrecord) * numEntries);

//loop through each DB entry
do{
for(i=0; i<numEntries; i++){
numEntries = record[i]->DBrecordID;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->last, buffer);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->first, buffer);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->studentID, buffer);
j=0;
do{
c=fgetc(fpt);
memcpy(c, buffer[j++], 1);
}while(c != ' ');
memcpy(buffer, record[i]->year, 4);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
memcpy(buffer, record[i]->gpa, 4);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ' || c != '\n');
memcpy(buffer, record[i]->expGradYear, 4);
j=0;
}
}while(c != EOF);

return 0;
}

*更新了错误

main.c:75: 警告:传递 `memcpy' 的 arg 1 使指针来自整数而不进行强制转换

main.c:75: 警告:传递 `memcpy' 的 arg 2 使指针来自整数而不进行强制转换

main.c:77: `memcpy' 的参数 2 的类型不兼容

main.c:83: `memcpy' 的参数 2 的类型不兼容

main.c:89: 警告:传递 `memcpy' 的 arg 2 使指针来自整数而不进行强制转换

main.c:94:“DBrecord”之前解析错误

所以我假设我不能用 memcpy 做我想做的事情,或者我只是做错了。有建议吗?

最佳答案

程序中有不少错误,但一开始

1) record 类型应为 DBrecord* 而不是 DBrecord**

2) strcpy 将目的地作为第一个参数,因此这不起作用 strcpy(buffer, record[i]->last);

3)您还需要为record[i]->last分配内存

4) strcpy 用于复制字符串,因此如果您不想存储为 float 或 int,即 gpa 等,您还需要使用 memcpy 以及缓冲区中的值应使用 strol strod

进行转换

还建议您阅读这本书K&R加类真的很有帮助

关于C - 使用 fgetc 将值存储在枚举 'class' 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202766/

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