fscanf_s读取的数据不对

img

  • void readyonghu() {
    int j = 0;
    char money[20]={0};
    if (fy == NULL) // 打开文件并且让fy指向 文件
    {

      HWND hnd = GetHWnd();              
      MessageBox(hnd, "读取用户信息失败!", "提示", MB_OKCANCEL);
      exit(1);
    

    }
    while (!feof(fy)) //读取一组数据后指针指向下一组数据,并且判断是否指向最后一行
    {

      fscanf_s(fy, "%s%s%s%s\n", y[j].name, 20, y[j].id, 20, y[j].password, 20, money, 20 );
      y[j].money=atoi(money);//字符串转换为整数
      j++;
      yonghu_num = j;//更新用户数量
    

    }

    fclose(fy); //关闭文件;

}

转换数据有问题, money 是字符数组,要转成 int 型不行,
你moeny 直接用 %d 接收,定义 int money

前两天我也遇到这个问题,大佬跟我讲不要用这个,在文件#include前加#define _CRT_SECURE_NO_DEPRECATE,挺好用的

fscanf 里 加几个空格 "%s %s %s %s\n"

你查查 VS禁用 SDL

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/714878
  • 这篇博客也不错, 你可以看下fscanf的用法
  • 同时,你还可以查看手册:c语言-fscanf_s() 中的内容
  • 除此之外, 这篇博客: c语言的文件操作详解中的 6.fscanf:向一个流(所有的输入流)读取数据详细看图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

    这里就将fprintf写入文件的格式化数据读出,然后利用printf函数打印到屏幕

    //随便定义一个结构体类型
        struct S
       {
    	   int n;
    	   float f;
    	   char arr[5];
       };
    //格式化的输入
    int main()
    {
    
           struct S s={0};//创建一个结构体变量来存储fscanf读取的格式化数据
           FILE *pfread= fopen("test.txt","r");//以读的形式打开一个文本文件
    	   if ( pfread == NULL)
    	   {
    		   printf("%s",strerror(errno));
    	   }
    	   fscanf(pfread, "%d  %f  %s ",&(s.n),& (s.f), s.arr);//选择那个流读数据 将数据格式化输入
    	   printf("%d  %0.2f  %s ",s.n, s.f, s.arr);
    	   
    	   fclose(pfread); //关闭文件
    	   pfread=NULL;//防止变成野指针
           return 0;
    }
    
    

    读取结果

    在这里插入图片描述
    用fscanf从键盘读一个字符串,用fprintf输出到屏幕

    //从键盘读,从屏幕输出
    int main()
    {
    	   char str[10]={0};
    	   fscanf(stdin,"%s",str);
    	   fprintf(stdout,"%s ",str);
    	   return 0;
    }
    

    在这里插入图片描述
    以二进制方式读写二进制文件


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^