fscanf从文件中提数据.出现:error:expression can`t be evaluated...

billgate83 2008-07-28 02:27:27
#define N 100
#define FORMAT "%-15s %-10d %-2d \n"
#define VAR(m) list[m].name,list[m].num,list[m].score
#define VAR_S(m) list[m].name,&list[m].num,&list[m].score
#define RETURN_NO_LIST 0
#define RETURN_SUCCESS 1
static char *File_Name = "Vampire.txt";

typedef struct
{
char name[15];
int num;
int score;
}STU;


int delet()
{
int j = 0,m = 0;
int curr_num = 0; //临时变量
int target;
// long int curr_pos;
char select = 'y';
FILE *fp;
char del_name[20]={0}; //定义一个存放欲删除姓名的字符串
STU list[N];

if( (fp=fopen(File_Name,"r+")) == NULL)
{
printf("File Not Found!:( \n");
}
while( !feof(fp)) //到达文件末尾,即返回一个非零值
{
// fread(&list[n],sizeof(STU),1,fp);
fscanf(fp,FORMAT,VAR_S(curr_num)); //调试时候,到这里,我查找list[]数组.发现list[]的成员全部都出现一个错误:error:expression can`t be evaluated...
curr_num ++;
}
target = curr_num;
if(fclose(fp))
{
perror("fclose"); //向stderr写入错误信息
exit(EXIT_FAILURE);
}

while(select == 'y' || select == 'Y')
{
printf("请输入要删除的学生姓名:\n");
// output(list,n); //显示目前该数组中的所有学生信息
// fflush(stdin);
scanf("%s",del_name); //让用户输入一个欲删除信息的学生姓名
// for(i=0;i<n;i++)
while(target > 0)
{
// curr_pos = ftell(fp);
// fscanf(fp,"%s",list.name);
if(strcmp(del_name,list[target - 1].name) == 0)
break;
target --;
}

if(m == 0)
{
printf("不存在该学生!:(\n");
return RETURN_NO_LIST;
}
// fseek(fp,curr_pos,SEEK_SET);
// fprintf(fp,"%42s","");
for(j = target;j < (curr_num - 1);j++)
list[j] = list[j+1];
curr_num --;
// output(list,n); //打印删除后的数组学生信息

printf("您还要继续删除吗?要(y/Y),不要(n/N)!\n");
scanf("%c",&select);
// fflush(stdin);
}

if( (fp=fopen(File_Name,"w")) == NULL)
{
printf("File Not Found!:( \n");
}
for (j = 0; j < curr_num; j++)
{
fprintf(fp,FORMAT,VAR(j));
}
if(fclose(fp))
{
perror("fclose");
exit(EXIT_FAILURE);
}else
return 0;
}

这个是什么问题?请高手指教了...
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
billgate83 2008-07-28
  • 打赏
  • 举报
回复
确实是阁下说的问题...

我确实犯了一个把scanf的格式代码与printf格式代码混用的大错误...

scanf没有align的操作...因为它是直接寻址的函数...我们对齐的操作数会变成地址解引用后的offset位移数...

不过目前代码还有bug再调试ing...
sailfar 2008-07-28
  • 打赏
  • 举报
回复
你先fscanf改为scanf在console里面测试一下, 应该是格式控制字符串对输入数据解析有问题
scanf是依字符读取的, 结构体一般用二进制方式存取

billgate83 2008-07-28
  • 打赏
  • 举报
回复
去掉也一样不行呀...

顺便补充:调试时.显示fscanf return = 0;意思就是fscanf并没有从文件中提取任何数据...因此,我也认为问题应该出在这个fscanf函数里...
xkyx_cn 2008-07-28
  • 打赏
  • 举报
回复

// 去掉\n试试
#define FORMAT "%-15s %-10d %-2d"

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧