C语言问题!!!请高手进来帮忙看看!!!

我做了一段程序,是一个小型投票系统,其他都没有问题,只是不能读取存了的文件,也不清楚究竟程序能不能存储(写入)文件,请高手帮忙检查一下!很急很急!!谢谢各位高手了!!!!!
源代码如下:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"
int i; /*这里的结构体数组数量我是用全局变量的*/
struct candidate
{
int no;
char name[20];
char intr[100];
int votes;
}can[10];
FILE *fp;
void main()
{
void welcome();
void userlogin();
void adminlogin();
void pswd1(char go[5],char p[5]);
void pswd2(int go);
void useroper();
void adminoper();
void infoinput();
void info(int n);
void info1(int n1);
void infoi(int n2);
void vote(int nn);
void edit(int nm);
int AddfromText(int n);
void WritetoText(int n);
welcome();
}
/*=====其余函数我省略了主要出问题的是下面两个存储和读文件的函数==========*/
int AddfromText(int n) /*读取文件函数*/
{
void adminoper();
int p=0,num;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\t请输入文件名:");
scanf("\t\t\t%s",filename); /*输入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{
printf("\t\t\t对不起,没有此记录!\n"); /*打开失败信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fp=fopen(filename,"rb");
fscanf(fp,"%d",&num); /*读入总记录量*/
while(p<num) /*循环读入数据*/
{
fscanf(fp,"%d%s%s%d",&can[n+p].no,can[n+p].name,can[n+p].intr,&can[n+p].votes);
p++;
}
n+=num;
fclose(fp); /*关闭文件*/
printf("\t\t\t\t成功读取文件!\n");
printf("\t\t\t");
system("pause");
adminoper();
return(n);
}
void WritetoText(int n) /*保存文件函数*/
{
void adminoper();
int p=0;
FILE *fp; /*定义文件指针*/
char filename[20]; /*定义文件名*/
printf("\t\t\t保存文件\n"); /*输入文件名*/
printf("\t\t\t请输入文件名:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打开文件*/
{
printf("\t\t\t对不起,打开文件失败!\n");
system("pause");
return;
}
fprintf(fp,"%d",n); /*循环写入数据*/
while(p<=n)
{
fprintf(fp,"%d%s%s%d\n",can[p].no,can[p].name,can[p].intr,can[p].votes);
p++;
}
fclose(fp); /*关闭文件*/
printf("\t\t\t保存文件成功!\n"); /*返回成功信息*/
system("pause");
adminoper();
}
谢谢zab20021,这句是我运行程序保存不了读取不了文件时再加上去的,本来就没有这句的,就是说,那句可以去掉,但是还是不行~~~~

if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
{
printf("\t\t\t对不起,没有此记录!\n"); /*打开失败信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fp=fopen(filename,"rb");
你这里打开了2次文件赋值给了同一个变量 是错的!!!!
你去掉fp=fopen(filename,"rb"); 这句试试
================================
你printf fscanf的时候有问题
格式化的时候应该有空格最好,不然获取的时候不知道每个字段以什么结束
fprintf(fp,"%d ",n); /*循环写入数据*/
while(p<=n)
{
fprintf(fp,"%d %s %s %d\n",can[p].no,can[p].name,can[p].intr,can[p].votes);
can[p+1].no = p+1;
p++;
}
fscanf(fp,"%d %s %s %d\n",&can[n+p].no,can[n+p].name,can[n+p].intr,&can[n+p].votes);
温馨提示:答案为网友推荐,仅供参考
相似回答