int StuInput(){//输入信息
int i=0, t;//录入学生人数
char xh[14];
printf("输入学号为1位,则停止输入。\n");
while(1){
printf("请输入你的学号:\n");
myGets(xh,14);
if(strlen(xh)==0)break;
strcpy(s[i].id,xh);
printf("请输入你的名字:\n");
myGets(s[i].name,31);
getchar();
printf("请输入你的性别:\n");
myGets(s[i].sexy,20);
int j;
s[i].sum=0;
printf("请输入你的成绩:\n");
printf("(语文 数学 英语)\n");
for(j=0;j<3;j++){
scanf("%d", &s[i].score[j]);
s[i].sum=s[i].sum+s[i].score[j];
}
getchar();
i++;
}
return i;
}
void myGets(char s[], int len){//
fgets(s,len,stdin);
s[strlen(s)-1]='\0';
return 0;
}
void writeFile(){//录入文件
FILE *fp;
if((fp=fopen("student.txt","wb"))==NULL){
printf("无法打开文件\n");
return 0;
}
fwrite(s,sizeof(StuSys),n,fp);
return 1;
fclose(fp);
}
int main(){
int choice; //选择功能变量
welcome(); //初始界面
// Login(); //登录系统
Sleep(3000);
system("cls"); //清屏
menu();
scanf("%d", &choice);
switch(choice){
case 0: printf("欢迎下次使用!!\n");
break;
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6: outPutFile();
break;
case 7: n=StuInput();
writeFile();
break;
case 8: loadFile();
break;
case 9: system("cls");
break;
}
return 0;
}
这是完整代码
可以正常使用,记得去掉 s[strlen(s)-1]='\0',因为它自动加上结束符。
#include<stdio.h>
void myGets(char s[], int len)
{
fgets(s,len,stdin);
return 0;
}
void main()
{
int i,n;
char a[10];
myGets(a,5);
printf("%s",a);
}
具体使用可以参考:C 库函数 – fgets() | 菜鸟教程 (runoob.com)
你都没有引入fgets函数库,你在程序第一行写入# include <stdio.h>来引入# include <stdio.h>,你以后遇到c语言怎么函数用不了上网找一下是不是你用的函数没有引入
楼主的代码有一个问题,就是fwrite写入,如果用fgets读取就会出现乱码;因为fwrite是二进制形式写入的,而fgets是ASCII形式读取的。建议用fgets读取,就要用fputs写入,同理fwrite写入就要用fread读取,保证不出现乱码,就要用对应的函数对;