一个关于C语言中的fgets函数的问题 20

#include<stdio.h>#include<stdlib.h>voidsave(intn);voidout(intn);intmain(void){intn;pr... #include <stdio.h>
#include <stdlib.h>

void save(int n);
void out(int n);

int main(void)
{
int n;
printf("Input n:");
scanf("%d", &n);
save(n);
out(n);
return 0;
}

void save(int n)
{
/******start******/
int i,m=0;
FILE *fp;
fp=fopen("lb8204.txt","a");
if(fp==NULL)
{
printf("open error");
return ;
}
for(i=1;i<1000;i++)
{
if(i%7==0||i%10==7||(i%100)/10==7)
{
fprintf(fp,"%4d",i);
m++;
if(m%10==0)
{
fprintf(fp,"\n",i);
}
}

if(m==n)
{
break;
}
}

/******end******/
}

void out(int n)
{
char str[48];
FILE *fp;
fp = fopen("lb8204.txt", "r");
if (fp == NULL)
{
exit(0);
}
printf("Output:\n");
while (!feof(fp))
{
fgets(str, 44, fp);
printf("%s", str);
}
printf("\n");
fclose(fp);
}
我的代码是这样的,只能在start和end中间添加代码,我的程序运行出来的是乱码,求大神解救,谢谢。
展开
 我来答
heightev
2016-05-28 · TA获得超过643个赞
知道小有建树答主
回答量:310
采纳率:100%
帮助的人:143万
展开全部
fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:
char * fgets(char * string, int size, FILE * stream);

参数说明:
string为一个字符数组,用来保存读取到的字符。
size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。
stream为文件流指针。
【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。

注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。
追问
你好,我现在的问题是在start和end之间的那部分,其他部分的代码是不能改变的,这段代码的要求是把7的倍数或者含有数字7的数写入文件,然后读出来。我用的是fprintf,然后读取出来的是乱码,我觉得可能是fprintf不行,应该用fputs,但是我不知道如何让fputs循环写入那些符合条件的数字。请问您能解决吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式