C语言怎么写到文件中

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
公式为:fn(a)=fn(a-1)+fn(a-2),用递归的方法求前50项的值,并写到一个文件中。

我会用递归写数列,写到文件中一点都不懂。 但还是依样画葫芦的试了下 但一直出错。

标准流程为:

1 通过fopen函数打开文件;

    a) 原型

        FILE * fopen(const char * path,const char * mode);

    b) 参数 

        path为要打开的文件名,可以是绝对路径,也可以是相对路径。

        mode为打开文件的方式。对于写文件,可以是"w", "wb", "w+", "wb+","a", "a+", "ab", "ab+"等。这些模式都可以支持写操作,区别为:

        åŒ…含w的为直接写入,如果被打开的文件已存在,那么会对文件中的原始数据进行覆盖。

        åŒ…含a的为附加模式,如果被打开文件已存在,那么新写入的内容会在文件结尾添加。

        åŒ…含b的模式,打开的文件按照二进制方式进行写入。

        åŒ…含+的模式,打开的文件为可读写。

        æ— è®ºå“ªç§æ–¹å¼ï¼Œå¦‚果原始文件不存在,则会创建该名字的新文件。

    c) 返回值

        è¿”回值为FILE *型,是一个文件指针。后续所有操作均依赖这个文件指针值。

        å¦‚果返回值为NULL,代表出错。常见的出错原因可能有

            æ–‡ä»¶å­˜åœ¨ï¼Œæ“ä½œè€…没有写权限。

            å¯¹æ–‡ä»¶æ‰€åœ¨ç›®å½•æ²¡æœ‰å†™æƒé™ã€‚

            æ–‡ä»¶æ‰€åœ¨ç£ç›˜åˆ†åŒºå·²æ»¡ã€‚

2 通过fwrite/fprintf/fputc/fputs等函数写入数据;

    a) size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

        åŠŸèƒ½ä¸ºå‘打开的文件stream中写入每块大小为size共计count块数据,数据的起始地址为buffer,返回实际写入的块数,出错时返回负值。

    b) int fprintf (FILE* stream, const char*format, [argument]);

        åŠŸèƒ½ä¸ºå‘打开的文件stream中格式化输入数据,格式有format决定,后续参数为写入的数据,功能类似于printf。返回实际写入字符值,出错时返回负值。

    c) int fputc (int c, FILE*fp);

        åŠŸèƒ½ä¸ºå‘打开的文件fp中写入字符c。该函数仅写入一个字符。参数c虽然为int型,但该函数仅使用其低八位。 返回值为输入参数c的ASCII码,出错时返回-1.

    d) int fputs (const char *s, FILE *stream);

        åŠŸèƒ½ä¸ºå‘打开的文件stream写入字符串s(不包括结束符'\0')并增加一个换行符。即输入的内容在文件中是以一行的形式存在的。返回值为非负整数,出错时返回负值。

3 通过fclose函数关闭文件;

    int fclose (FILE *stream); 

    å…³é—­å·²æ‰“开的文件stream,如果成功返回0,否则返回负值。

以上所有函数调用时,都需要引用标准输入输出头文件stdio.h。


以下是一个简单的通过fwrite函数,向文件test.txt中写入一行测试字符串的样例代码。

#include <stdio.h>//引入头文件
int main()
{
    char *s  = "this is a test string";//测试数据
    FILE *fp = NULL;//文件指针
    int ret;
    
    fp = fopen("test.txt", "w");//以写入方式打开文件
    if(fp == NULL)
    {
        printf("can not open file to write\n");
        return -1;
    }
    
    ret = fwrite(s, sizeof(s), 1, fp);//写入数据
    if(ret != 1)printf("write file error\n");//写文件出错提示
    fclose(fp);//虽然fclose也有返回值,但很少失败,所以一般不需要检查返回值
    
    return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-28
#include<stdio.h>
long  fibonacci(int n);
int main(void)
{
    int n=30;//求到第30位吧,50位不知道溢出多少了,大数运算我还不会
    long sum;
    char str[100];
    FILE *fp;
    fp = fopen("c:\\w.txt", "w");//指定输出的文本名
    sum = fibonacci(n);
    printf("%ld\n",sum);
    fprintf(fp,"%ld",sum);//将结果输出到指定文件中
    fclose(fp);
    system("pause");
    return(0);
}
long  fibonacci(int n)
{
    long result;
    long a1, a2;
    long sum = 2; //从第三项开始的,所以sum初始值为2
    result = a1 = 1;
    while (n > 2)
    {
        n -= 1;
        a2 = a1;
        a1 = result;
        result = a1 + a2;
        sum += result;
    }//我用的是迭代法,递归那效率算了吧,你用也可以,自己改下
    return sum;
}

我能吐槽你调用函数怎么写在了main里面,还有那么多花括号干嘛的,唉,能运行才怪。

推荐你本书吧,C Primer Plus,值得拥有。

第2个回答  推荐于2016-08-03
这种循环次数很大的情况尽量不要用递归,时间会相当长
#include <stdio.h>
#include <stdlib.h>
double fn(int n);//返回值最好是double型,因为会很大
int main()
{
FILE *fp;
if((fp=fopen("result.txt","w"))==NULL){
printf("Open file error!\n");
exit(0);
}
fprintf(fp,"%lf",fn(50));
printf("%lf\n",fn(50));
}

double fn(int n){
double result;
int i;
double f1=1.0,f2=1.0,temp;
if(n==1 || n==2)
result=1;
else
{
for(i=3; i<=n; i++){
temp=f2;
f2=f1+f2;
f1=temp;
}
result=f2;
}
return result;
}

运行结果:12586269025本回答被提问者采纳
第3个回答  推荐于2017-12-16
1)首先的程序逻辑就有问题,要先把中间的一段代码移除去,写成函数fn的定义:

int fn(int n)
{
int c;
if(n==1||n==2)
c=1;
else
c=fn(n-1)+fn(n-2);
return c;
}

2)把fputc(fn(i),fp);改成fprintf(fp,"%d\n",fn(i));追问

可以给个完整版么,已经弄得烦死了

追答

已经有答案了,就不多说了。自己写程序要多练,不能烦。

本回答被网友采纳
第4个回答  2014-03-11
有一本网上的电子书 叫C语言程序设计100例 有这个例子追问

找不到。可以给我看看 这里错在哪里吗 。大恩不言谢

找不到。可以给个完整版吗吗吗, 大恩不言谢

相似回答