GSMNC 发表于 2017-4-24 21:54:26

C,文件输入

本帖最后由 GSMNC 于 2017-4-24 21:56 编辑

各位大神求指教,为什么我的代码编译通过,但测试出错{:5_100:}
#include <stdio.h>
#include <stdlib.h>

#define total 5

int main()
{
    int i;
    char ch;
    char filename;
    FILE *fp;

    struct student
    {
      char name;
      char sex;
      int num;
      int score;
    }a;

    printf("Please input student's information,including name,sex,num,score.\n");
    for(i = 0; i < total; i++)
    {

      scanf("%s %c %d %d", a.name, &a.sex, &a.num, &a.score);
    }

    printf("Enter file's name.\n");
    scanf("%s", filename);

    if ((fp = fopen(filename, "r+")) == NULL)
    {
      printf("Open operation failed.\n");
      exit(0);
    }
    ch = getchar();

    for (i = 0; i < total; i++)
    {
      if ((fwrite(&a, sizeof(struct student), 1, fp)) != 1)
      {
            printf("write file fails\n");
      }

    }
    fclose(fp);

    printf("Hello world!\n");
    return 0;
}

菟纸先森 发表于 2017-4-24 22:21:42

有两处错误:
1、第31行,文件打开方式应该为a+(写追加)
2、第40行,写文件方式不合适,写出的内容是乱码

lumber2388779 发表于 2017-4-24 22:21:51

报错是什么?
我只看到你这个if ((fp = fopen(filename, "r+")) == NULL)
这里只有只读权限没有写权限,然后你后边有写操作肯定不行

bajo 发表于 2017-4-25 14:45:45

fwrite这个函数以二进制形式对文件进行操作。它写入文件是二进制写入的,所以是乱码。
可以使用fprintf函数写入文件。
#include <stdio.h>
#include <stdlib.h>

#define total 5

int main()
{
    int i;
    char c='\n';
    char ch;
    char filename;
    FILE *fp;

    struct student
    {
      char name;
      char sex;
      int num;
      int score;
    }a;

    printf("Please input student's information,including name,sex,num,score.\n");
    for(i = 0; i < total; i++)
    {

      scanf("%s %c %d %d", a.name, &a.sex, &a.num, &a.score);
    }

    printf("Enter file's name.\n");
    scanf("%s", filename);

    if ((fp = fopen(filename, "r+")) == NULL)
    {
      printf("Open operation failed.\n");
      exit(0);
    }
    ch = getchar();

    for (i = 0; i < total; i++)
   {
      /* if ((fwrite(a, sizeof(struct student), 3, fp)) != 1)
      {
            printf("write file fails\n");
      }*/
      if(fprintf(fp,"%s %c %d %d %c", a.name,a.sex,a.num,a.score,c)<0)
      {

            printf("write file fails\n");
      }

    }
    fclose(fp);

    //printf("Hello world!\n");
    return 0;
}

GSMNC 发表于 2017-4-25 20:28:05

菟纸先森 发表于 2017-4-24 22:21
有两处错误:
1、第31行,文件打开方式应该为a+(写追加)
2、第40行,写文件方式不合适,写出的内容是乱 ...

1、改为“a+”,依然不对。。。
2、40这样写是乱码,能问下原因吗?

GSMNC 发表于 2017-4-25 20:29:33

lumber2388779 发表于 2017-4-24 22:21
报错是什么?
我只看到你这个if ((fp = fopen(filename, "r+")) == NULL)
这里只有只读权限没有写权限, ...

谢谢您,我翻看了下书,“r+”文件使用方式既可读也可写

GSMNC 发表于 2017-4-25 20:33:28

bajo 发表于 2017-4-25 14:45
fwrite这个函数以二进制形式对文件进行操作。它写入文件是二进制写入的,所以是乱码。
可以使用fprintf函 ...

{:5_95:}
页: [1]
查看完整版本: C,文件输入