【问题标题】:writing in a file using structures使用结构写入文件
【发布时间】:2018-01-13 12:03:21
【问题描述】:

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

#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; -> 你知道这只是一个字符,所以 - scanf("%s",&amp;s1.name); 不起作用!
  • 无法打开文件“d:\student.txt”进行写入。也许另一个程序,如编辑拥有它。
  • 你确定你对该目录有写权限吗?卷中的 AFAIK 根目录通常不可直接写入 - 您需要管理员。
  • @iBug 我从来没有遇到过写入 USB 驱动器根目录的问题。
  • 暂时忘记写入文件,但是您打算如何使用单个字符来存储名称?从您使用的格式说明符来看,很明显您的意图很明确,即对名字和姓氏都使用 char 数组

标签: c file structure


【解决方案1】:

name 结构的字段应该是char array,如果你想在其中存储onoma foithth,如图所示。修改你的结构为

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


};

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

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

确保您在fopen() 中提供了正确的路径

【讨论】:

  • C 中没有字符串。它们只是有一个字符数组,当以 null 结尾时,可以称为字符串。
  • @sjsam C 标准库定义“一个 string 是一个连续的字符序列,以第一个空字符终止并包括第一个空字符。”。也许 C 没有 string 作为另一种语言定义它,但这是一个 C 问题。
  • 同意在C 中没有string 中的c++ 数据类型,但在C 中我不能说char array 作为string,反之亦然?
  • @chux:啊哈。也许我写的第一句话有点误导。我应该把它写成C doesn't define string as a type。但这一点非常清楚。
  • @raja re string 可以是 array 或它的一部分。 character array 可能是 string 或不是 - 取决于它的内容。 char a[2] = { 'b', 'c' }; --> achar 数组,但不是 字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多