学编程的盆子 发表于 2021-3-9 10:52:09

求助一个fwite的问题

#include<stdio.h>
#include<stdlib.h>

typedef struct student
{
    int num;
    char name;
    int age;
}student;

int main()
{
    student stu1;
    FILE *fp;
    fp = fopen("C:\\Users\\yyp\\Desktop\\t3.txt","wb");
    printf("Please input :\n");
    scanf("%d %s %d",&stu1.num,&stu1.name,&stu1.age);

    if(fp == NULL)
    {
      printf("ERROR!\n");
      exit(0);
    }
    else
    {
      fwrite(&stu1,sizeof(stu1),1,fp);
    }
    fclose(fp);
    return 0;

}


大佬们

代码如上,为什么输入比如说 11 Alex 22 这种的时候,打开txt文档看到的 只有Alex正常输出 而其他数字都乱码了呢?

wp231957 发表于 2021-3-9 11:00:03

应该写入ascii版本的数字

jackz007 发表于 2021-3-9 11:10:16

本帖最后由 jackz007 于 2021-3-9 11:25 编辑

      首先,这一句写错了
      scanf("%d %s %d",&stu1.num,&stu1.name,&stu1.age) ;
      应该改成这样
      scanf("%d%s%d",&stu1.num,stu1.name,&stu1.age) ;
      其次,这一句
    fp = fopen("C:\\Users\\yyp\\Desktop\\t3.txt","wb");
      代表你所创建的文件是一个二进制的文件,这个文件中储存了一个结构数据,这个结构的 num 和 age 成员是整型数,文件中保存的是它们二进制的编码,也就是它们实际的内存映像,是不能通过肉眼直接看到的; name 成员保存的是文本,也就是字符串,是可以通过肉眼直接看到的。
      如果希望文件内容是文本,那就应该这样写代码:
#include<stdio.h>

typedef struct student
{
      int num                                                                  ;
      char name                                                            ;
      int age                                                                  ;
} student                                                                        ;

int main(void)
{
      student stu1                                                               ;
      FILE * fp                                                                  ;
      if((fp = fopen("C:\\Users\\yyp\\Desktop\\t3.txt","w")) != NULL) {
                printf("Please input : ")                                          ;
                scanf("%d%s%d" , & stu1 . num , stu1 . name , & stu1 . age)      ;
                fprintf(fp , "%d %s %d\n" , stu1 . num , stu1 . name , stu1 . age) ; // 通过 fprintf() 函数把结构成员的内容显示成肉眼可辨的文本
                fclose(fp)                                                         ;
      } else {
                fprintf(stderr , "ERROR!\n")                                       ;
      }
}

人造人 发表于 2021-3-9 11:19:39

数字和字符有什么区别?
#include <stdio.h>

int main(void) {
    printf("%c\n", 48);
    printf("%c\n", 49);
    printf("%c\n", 50);
    printf("%c\n", 51);
    printf("%c\n", 52);
    printf("%c\n", 53);
    printf("%c\n", 54);
    printf("%c\n", 55);
    printf("%c\n", 56);
    printf("%c\n", 57);
    return 0;
}


$ ./main.exe
0
1
2
3
4
5
6
7
8
9

学编程的盆子 发表于 2021-3-11 09:49:17

jackz007 发表于 2021-3-9 11:10
首先,这一句写错了

      应该改成这样


      scanf("%d %s %d",&stu1.num,&stu1.name,&stu1.age) ;

想问为啥不能加空格呢,如果按照我这样写加空格那我输入的时候也加上空格不就是同样的吗
scanf我 没改
我就把wb改成w就可以正常不乱码了
页: [1]
查看完整版本: 求助一个fwite的问题