| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 588 人关注过本帖
标题:文件写入问题,求大神指示
只看楼主 加入收藏
纪老猴子
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-13
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:5 
文件写入问题,求大神指示
#include <stdio.h>
#include <stdlib.h>
#define _STDC_WANT_LIB_EXT1_

int main ()
{
    long num1=234567L;
    long num2=345123L;
    long num3=789234L;
    long num4=0L;
    long num5=0L;
    long num6=0L;
    float fnum=0.0f;
    int ival[6]={0};
    FILE *pfile=NULL;
    char *filename ="myfile.txt";

    if(fopen_s(&pfile,filename,"w"))
    {
        printf("Failed to open the file.\n");
        exit (1);
    }
    setbuf(pfile,NULL);
    fprintf_s(pfile,"%6ld%6ld%6ld",num1,num2,num3);
    fclose(pfile);
    if(fopen_s(&pfile,filename,"r"))
    {
        printf("Failed to open the file");
    }
        setbuf(pfile,NULL);
        fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6);
    printf("%6ld%6ld%6ld",num4,num5,num6);
   
    fclose (pfile);
    putchar (10);
    system ("pause");
    return 0;
}

运行结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

通过单步调试,发现在第一个fprintf函数那里出错。下面是我从百度下载的代码,进行了简单的修改:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    int i=617;
    char rec[100]={'\0'};
    char* s = "that is a good new";
    fp = fopen("D:\\text.dat","w");
    fputs("total",fp);
    fputs(":",fp);
    fprintf(fp,"%d\n",i);
    fprintf(fp,"%s",s);
    rewind(fp);
    fscanf(fp,"%s",rec);
    printf("%s",rec);
    fclose(fp);
   
    system ("pause");
    return 0;
}
编译无错误,但是运行结果不对,请见图片:
图片附件: 游客没有浏览图片的权限,请 登录注册




求大神解释这是怎么回事。。。
搜索更多相关主题的帖子: include Failed file 
2014-04-13 13:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define _STDC_WANT_LIB_EXT1_

int main(void)
{
    long num1 = 234567L;
    long num2 = 345123L;
    long num3 = 789234L;
    long num4 = 0L;
    long num5 = 0L;
    long num6 = 0L;
    float fnum = 0.0f;
    int ival[6] = {0};

    FILE *pfile = NULL;
    char* filename = "myfile.txt";

    if(fopen_s(&pfile, filename, "w") != 0)
    {
        printf_s("Failed to open the file.\n");
        exit(EXIT_FAILURE);
    }
    //setbuf(pfile,NULL);
    fprintf_s(pfile, "%6ld%6ld%6ld", num1, num2, num3);
    fclose(pfile);
    printf_s("Write file %s success!\n", filename);

    if(fopen_s(&pfile, filename, "r") != 0)
    {
        printf_s("Failed to open the file.\n");
        exit(EXIT_FAILURE);
    }
    //setbuf(pfile,NULL);
    //fscanf(pfile,"%6l%6l%6l",&num4,&num5,&num6);
    fscanf_s(pfile, "%6ld%6ld%6ld", &num4, &num5, &num6);        // 主要改動處!
    printf_s("%6ld%6ld%6ld", num4, num5, num6);
    fclose (pfile);

    putchar('\n');
    system ("pause");

    return EXIT_SUCCESS;
}


授人以渔,不授人以鱼。
2014-04-13 13:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
你這個程序不需設置為無緩衝,不會影響運行結果的。事實上用原先的程序,運行的時候,已經生成了正確的文件,錯誤發生在讀出的時候,那是因爲没有給scanf()指定讀整形數據,僅用"l"不會默認為整數,這個修飾符能夠用於多種數據類型,不要省略真正的數據類型"d"。

授人以渔,不授人以鱼。
2014-04-13 13:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
另外你留意一下我的調試手段:文件寫出後加的一行printf(),如果運行時出現那一句輸出,就表明前面的過程是沒錯的,問題在後面,如果出錯了,錯誤就定位在前面,通過後,再把這一句註釋掉或刪掉。這是很基本的調試手法,最好學會,很多調試器無法追蹤的故障最終都能用這種方法解決,越原始的東西越有效,這是鐵律。

授人以渔,不授人以鱼。
2014-04-13 13:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
其實,在main()中,exit()和return是同一回事,不用exit()而直接用return也是可以的;同樣,即使不return,最後編譯程序也會給main()追加一句exit(0)。exit()主要用在非main()代碼段中的異常退出,C/C++程序無論在什麽時候要結束,都會調用exit()收尾,包括在main()中。

授人以渔,不授人以鱼。
2014-04-13 14:04
纪老猴子
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-4-13
收藏
得分:0 
回复 2楼 TonyDeng
谢谢您的提醒,我一定会加倍努力地
2014-04-13 14:38
快速回复:文件写入问题,求大神指示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020916 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved