C 使用结构写入文件

C 使用结构写入文件,c,file,structure,C,File,Structure,我写了一个应该写入文件的代码,但当我执行程序时,它会显示“保存学生数据时出错”。下面是代码 #include<stdio.h> typedef struct Student{ int numberOfStudents; char name; // onoma foithth char surname; // epi8eto foithth }; int main(){ struct Student s1; FILE *file=fopen("d:\

我写了一个应该写入文件的代码,但当我执行程序时,它会显示“保存学生数据时出错”。下面是代码

#include<stdio.h>

typedef struct Student{
 int numberOfStudents;
 char name; // onoma foithth
 char surname; // epi8eto foithth


};


int main(){
    struct Student  s1; 
    FILE *file=fopen("d:\\student.txt","w");
    if(file==NULL){
        printf("error in saving student data");
        return 1;
    }
    while(1){

    printf("Enter number of students: ");
    scanf("%d",&s1.numberOfStudents);
    printf("enter name: ");
    scanf("%s",&s1.name);
    printf("enter surname: ");
    scanf("%s",&s1.surname);

    fprintf(file,"%d\t%s\t%s\n",s1.numberOfStudents,s1.name,s1.surname);
    printf("continue (Y/N)");
    char ch=getch();
    if (ch=='N' || ch=='n')
    break;
    }


    fclose(file);
    return 0;
}
#包括
类型定义结构学生{
国际学生人数;
char name;//onoma foithth
char姓氏;//epi8eto foithth
};
int main(){
结构学生s1;
FILE*FILE=fopen(“d:\\student.txt”,“w”);
if(file==NULL){
printf(“保存学生数据时出错”);
返回1;
}
而(1){
printf(“输入学生人数:”);
scanf(“%d”和s1.学生人数);
printf(“输入名称:”);
scanf(“%s”和&s1.name);
printf(“输入姓氏:”);
scanf(“%s”和s1.姓氏);
fprintf(文件,“%d\t%s\t%s\n”,s1.numberOfStudents,s1.name,s1.姓氏);
printf(“继续(是/否)”);
char ch=getch();
if(ch='N'| ch='N')
打破
}
fclose(文件);
返回0;
}

我已经搜索了,但找不到问题。我的错误在哪里?

名称
如果要将
onoma foith
存储在结构字段中,则结构字段应为
字符数组
。将您的结构修改为

typedef struct Student{
 int numberOfStudents;
 char name[10]; // onoma foithth
 char surname; // epi8eto foithth


};
然后在扫描
name
时删除
&
,因为
name
本身就是地址

scanf("%s",s1.name);

确保您在
fopen()

字符名中给出了正确的路径->您确实意识到这只是一个字符,所以-
scanf(“%s”、&s1.name)将不起作用!无法打开文件“d:\student.txt”进行写入。可能是另一个程序,比如编辑器拥有它。你确定你有该目录的写权限吗?卷中的AFAIK根目录通常不可直接写入-您需要管理员。@iBug我在写入USB驱动器的根目录时从来没有遇到过问题。暂时忘记写入文件,但是您打算如何使用单个字符来存储名称?从您使用的格式说明符可以看出,您的意图非常明确,即对first和names都使用char数组
C
中没有字符串。它们只是有一个字符数组,当以null结尾时,可以称之为字符串。@sjsam C标准库定义“字符串是以第一个null字符结尾并包含第一个null字符的连续字符序列。”。也许C没有另一种语言定义的字符串,但这是一个C问题。同意在
C
中没有像
C++
那样的
string
数据类型,但在
C
中,我不能说
char array
字符串,反之亦然?@chux:Aha。也许我写的第一句话有点误导。我应该写下as
C并没有将string定义为类型。但问题非常清楚。@raja字符串可以是数组,也可以是数组的一部分。字符数组可以是字符串,也可以不是字符串,这取决于它的内容<代码>字符a[2]={'b','c'}
-->
a
是一个
char
数组,但不是字符串。