吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2285|回复: 10
收起左侧

[已解决] fscanf读取失败

[复制链接]
mxwawaawxm 发表于 2019-9-30 22:33
本帖最后由 mxwawaawxm 于 2019-9-30 23:37 编辑

[C] 纯文本查看 复制代码
#include <stdio.h>

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

int main(int argc, char *argv[])
{
    FILE *fp;
    Stu stu[10];
    int i=0;
    
    fp = fopen("hw.dat", "r");
    
    if (fp=NULL) {
        printf("文件读取失败");
    } else {
        while (fscanf(fp, "%s%lf%lf%lf", stu[i].name, &stu[i].height, &stu[i].weight, &stu[i].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,这段代码没有成功读取。哪里出错了,请问
[Asm] 纯文本查看 复制代码
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

免费评分

参与人数 1热心值 +1 收起 理由
刘样andholiday + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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”之类的),原因才疏学浅

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
liphily + 1 用心讨论,共获提升!
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

.·.·. 发表于 2019-9-30 22:47
本帖最后由 .·.·. 于 2019-10-1 19:34 编辑

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

下面是原答案


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

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
liphily + 1 用心讨论,共获提升!
mxwawaawxm + 1 + 1 用心讨论,共获提升!

查看全部评分

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

谢谢。不过没用。还是读取不了
2019-09-30_225302.png
999999. 发表于 2019-9-30 23:18
调试呀。。。
kisszju 发表于 2019-9-30 23:28
if (fp=NULL) {               ==>if (fp==NULL) {  

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| 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 ...

居然犯这么低端的错误
 楼主| mxwawaawxm 发表于 2019-9-30 23:34

我是用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)) {}
把要判断的值放前面

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
mxwawaawxm + 1 + 1 谢谢@Thanks!

查看全部评分

ol416 发表于 2019-10-1 09:54
还是下个visual studio code用吧,notepad++我平时都是临时打开看文档的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表