C语言读txt文件,末尾多读出一个字符
我写的一个读文件中字符进行操作的函数,但是读取后末尾总会多读出一个,比如txt中有1234567,读出后却是12345677.好象是在while语句的条件中要加一个,但是...
我写的一个读文件中字符进行操作的函数,但是读取后末尾总会多读出一个,比如txt中有1234567,读出后却是12345677.好象是在while语句的条件中要加一个,但是我不知道,希望前辈指点.
还有就是M=(((float)c1*2/256)-1)这一行中的强制转换不知道会不会造成什么错误,因为生成新文件后我还得再读回来用M=M/trs和c1=(char)((M+1)*128)还原.
注:trs是主函数传进来的[-1,1]的小数
void encryption(float trs)
{
char fn[256],fn1[256];
unsigned char c1;
FILE *fp,*fp1;
float M;
printf("输入需要加密的文件名:");
scanf("%s",fn);
if(fopen (fn,"r")==NULL)
{
printf ("文件不存在或路径错误!\n");
exit(0);
}
fp=fopen(fn,"r");
printf("\n\n输入密文的文件名:");
scanf("%s",fn1);
fp1=fopen(fn1,"w");
while(!feof(fp))
{
fscanf(fp,"%c",&c1);
printf("%c",c1);
M=(((float)c1*2/256)-1); //将消息表达为一个数[-1,1]
M=M*trs;
fprintf(fp1,"%.20f\n",M);
}
fclose(fp);
fclose(fp1);
} 展开
还有就是M=(((float)c1*2/256)-1)这一行中的强制转换不知道会不会造成什么错误,因为生成新文件后我还得再读回来用M=M/trs和c1=(char)((M+1)*128)还原.
注:trs是主函数传进来的[-1,1]的小数
void encryption(float trs)
{
char fn[256],fn1[256];
unsigned char c1;
FILE *fp,*fp1;
float M;
printf("输入需要加密的文件名:");
scanf("%s",fn);
if(fopen (fn,"r")==NULL)
{
printf ("文件不存在或路径错误!\n");
exit(0);
}
fp=fopen(fn,"r");
printf("\n\n输入密文的文件名:");
scanf("%s",fn1);
fp1=fopen(fn1,"w");
while(!feof(fp))
{
fscanf(fp,"%c",&c1);
printf("%c",c1);
M=(((float)c1*2/256)-1); //将消息表达为一个数[-1,1]
M=M*trs;
fprintf(fp1,"%.20f\n",M);
}
fclose(fp);
fclose(fp1);
} 展开
3个回答
展开全部
可以使用输入输出重定向来将TXT文本中的字符内容导入程序中,或者使用标准C库函数:fopen()和fgetc();
先使用fopen()函数打开TXT文本文件,然后使用fgetc读取文本文件中的字符。读取全部文本中全部字符可以使用一个while循环加判断是否读取到文件结尾来实现:
char ch;
while((ch= fgetc(fp)) != EOF)
这样当读取到文件结尾时,while循环就会终止。
先使用fopen()函数打开TXT文本文件,然后使用fgetc读取文本文件中的字符。读取全部文本中全部字符可以使用一个while循环加判断是否读取到文件结尾来实现:
char ch;
while((ch= fgetc(fp)) != EOF)
这样当读取到文件结尾时,while循环就会终止。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fp=fopen(fn,"r");
if(fopen (fn,"r")==NULL)
{
printf ("文件不存在或路径错误!\n");
exit(0);
}
else
{
while(fscanf(fp,"%c",&c1)!=EOF)
}
if(fopen (fn,"r")==NULL)
{
printf ("文件不存在或路径错误!\n");
exit(0);
}
else
{
while(fscanf(fp,"%c",&c1)!=EOF)
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询