【问题标题】:Filing Structure / C归档结构 / C
【发布时间】:2012-05-14 10:21:57
【问题描述】:

填写信息后出现错误。我不知道我在哪里出错了。我想通过结构获取信息,然后保存在 biodata.txt 文件中。这只是为了启动我的程序,然后我将添加“删除编辑搜索”选项。

#include <stdio.h>
#include <conio.h>

struct biodata{
       int recno,age;
       char name[20],sex;
       float salary;
}obj;

int main(){
    int addData();
    int showRecord();
    char choice;

    while(1){
        printf("\n\n*****CHOOSE YOUR CHOICE*****\n");
        printf("1) ADD DATA\n");
        printf("2) SHOW RECORD\n");
        printf("Enter your choice : ");

        choice = getche();
        switch(choice){
            case '1' :  
                addData();
                break;
        }
    }
}

int addData(){
     FILE *fp;
     fp = fopen("biodata.txt","w+");

     printf("\n*****ADDING DATA*****\n");
     printf("\nEnter Record No : ");
     scanf("%d",&obj.recno);
     printf("Enter Name : ");

     scanf("%s",obj.name);
     printf("Enter age : ");
     scanf("%d",&obj.age);

     printf("Enter Sex : ");
     scanf("%s",obj.sex);

     printf("Enter Salary : ");
     scanf("%f",&obj.salary);
     fwrite(&obj,sizeof(obj),1,fp);

     fclose(fp);
}

【问题讨论】:

  • 你能引用你得到的确切错误吗?
  • “选择你的选择”似乎有点重复。
  • 旁注:您将从良好缩进的代码中受益匪浅。

标签: c file struct


【解决方案1】:

你正在做:

printf("Enter Sex : ");
scanf("%s",obj.sex);

但是 obj.sex 是 char 类型的:

struct biodata{
        int recno,age;
        char name[20],sex;
        float salary;
}obj;

把scanf改成:

scanf("%c",&obj.sex);

【讨论】:

  • 当然,注意c-faq.com/stdio/scanfc.html ...最好完全避免scanfc-faq.com/stdio/scanfprobs.html
  • 谢谢,现在我确实喜欢了,但在 biodata.txt 中写的是 Jack Male HC 但它必须是 1 Jack 22 Male 200 最后一种算法dropbox.com/s/k0ay3m7kg9lyl70/dosyam.txt
  • @allstar: 那么你需要像处理name 字段一样处理它:sex 成员需要是char 数组或char* (为其分配了内存)。 (顺便说一句,您当前阅读name 的方式是要求缓冲区溢出。)
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多