mxwawaawxm 发表于 2019-9-30 22:33

fscanf读取失败

本帖最后由 mxwawaawxm 于 2019-9-30 23:37 编辑

#include <stdio.h>

#define NAME_LEN 100
typedef struct {
    char name;
    double height;
    double weight;
    double score;
} Stu;

int main(int argc, char *argv[])
{
    FILE *fp;
    Stu stu;
    int i=0;
   
    fp = fopen("hw.dat", "r");
   
    if (fp=NULL) {
      printf("文件读取失败");
    } else {
      while (fscanf(fp, "%s%lf%lf%lf", stu.name, &stu.height, &stu.weight, &stu.score)==4) {
            i++;
            printf("%d\n", i);
      }
    }
   
    printf("%d\n", i);
    return 0;
}
目的是想读取hw.dat文件下的数据,然后保存到一个结构数组里。但是我在循环那里写的测试代码printf("%d\n", i);,并没有执行
言下之意是fscanf(fp, "%s%lf%lf%lf", stu.name, &stu.height, &stu.weight, &stu.score)==4,这段代码没有成功读取。哪里出错了,请问{:301_1007:}
tom 172.5 60.5 85.5
mike 189.0 72.6 65.5
takao 163.0 54.5 38.5
sato 175.0 58.5 98.5
sanaka 174.0 60.7 56

SummerSui 发表于 2019-9-30 23:17

本帖最后由 SummerSui 于 2019-9-30 23:19 编辑

1.fp=NULL改成fp==NULL
2.fopen("hw.dat", "r");这个地方用绝对路径可以成功(就是“D:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe”之类的),原因才疏学浅{:301_1001:}

.·.·. 发表于 2019-9-30 22:47

本帖最后由 .·.·. 于 2019-10-1 19:34 编辑

看程序的时候不仔细……
印象中%s会同时吃掉数字与字母
忘记了%s会在空格位置断开
问题并不在这里

下面是原答案


可能是%s吃掉了原本属于%lf的字符试试"%s %lf %lf %lf"或许管用

mxwawaawxm 发表于 2019-9-30 22:53

.·.·. 发表于 2019-9-30 22:47
可能是%s吃掉了原本属于%lf的字符
试试"%s %lf %lf %lf"或许管用

谢谢。不过没用。还是读取不了

999999. 发表于 2019-9-30 23:18

调试呀。。。

kisszju 发表于 2019-9-30 23:28

if (fp=NULL) {               ==>if (fp==NULL) {

mxwawaawxm 发表于 2019-9-30 23:33

SummerSui 发表于 2019-9-30 23:17
1.fp=NULL改成fp==NULL
2.fopen("hw.dat", "r");这个地方用绝对路径可以成功(就是“D:\\Program Files (x ...

居然犯这么低端的错误{:301_995:}

mxwawaawxm 发表于 2019-9-30 23:34

999999. 发表于 2019-9-30 23:18
调试呀。。。

我是用notepad++搭建C语言运行环境,不清楚怎么调试

999999. 发表于 2019-9-30 23:57

mxwawaawxm 发表于 2019-9-30 23:34
我是用notepad++搭建C语言运行环境,不清楚怎么调试

这种细节以后你写的时候这样写就能避免很多了:
if(NULL==fp){}
while (4==fscanf(fp, "%s%lf%lf%lf", stu.name, &stu.height, &stu.weight, &stu.score)) {}
把要判断的值放前面

ol416 发表于 2019-10-1 09:54

还是下个visual studio code用吧,notepad++我平时都是临时打开看文档的。
页: [1] 2
查看完整版本: fscanf读取失败