C语言打开文件问题 程序如下
2个回答
展开全部
是这样的,有两个错:
一,.txt文件存储的是字符,你的123456789,在txt里是char型,即1是字符‘1’对应的是ascii码的049。
而且从fgetc()函数可以看出,它读取的是字符。但是巧合的是,字符和整型可以通用,所以,你在下面求余%是没有报错,系统将读取的字符,转换成ascii整型后经行运算,即这样,读取文件里的‘1’其实是ascii对应的整数49,一次类推。
二,while()中,应该将testdata=fgetc(fp);
放到if
else
后面,应为,你在循环外面已经读入了一个数字,这样在进入后你有读取一个,这时,就是从第二个开始判断了,所以应改在条件之后。
这样改过后,结果就是除了文件里'3'是the
case
is
correct,因为字符‘3’对应的整数是51,求余后是1,其他都是it
is
wrong!.
补充:你要是想的到你预期的结果,首先,将上述第二个错误改过来,接着,在循环中把字符型转换为整型即:用读入的字符减去字符‘0’,对应的整型,这样就得到每个读入字符与字符‘0’的差,即为你要的整数。
char
ch;
ch=fgetc(fp);
while(ch!=eof)
{
testdata=ch-'0';
if(testdata%10==1)
cout<<"the
case
is
correct"<
评论
0
0
0
加载更多
一,.txt文件存储的是字符,你的123456789,在txt里是char型,即1是字符‘1’对应的是ascii码的049。
而且从fgetc()函数可以看出,它读取的是字符。但是巧合的是,字符和整型可以通用,所以,你在下面求余%是没有报错,系统将读取的字符,转换成ascii整型后经行运算,即这样,读取文件里的‘1’其实是ascii对应的整数49,一次类推。
二,while()中,应该将testdata=fgetc(fp);
放到if
else
后面,应为,你在循环外面已经读入了一个数字,这样在进入后你有读取一个,这时,就是从第二个开始判断了,所以应改在条件之后。
这样改过后,结果就是除了文件里'3'是the
case
is
correct,因为字符‘3’对应的整数是51,求余后是1,其他都是it
is
wrong!.
补充:你要是想的到你预期的结果,首先,将上述第二个错误改过来,接着,在循环中把字符型转换为整型即:用读入的字符减去字符‘0’,对应的整型,这样就得到每个读入字符与字符‘0’的差,即为你要的整数。
char
ch;
ch=fgetc(fp);
while(ch!=eof)
{
testdata=ch-'0';
if(testdata%10==1)
cout<<"the
case
is
correct"<
评论
0
0
0
加载更多
展开全部
#include
int
main()
{
FILE
*in,*out;
int
i;
char
inFileName[90],outFileName[90];
printf("请输入原位图文件的文件名:\n");
scanf("%s",inFileName);
printf("请输人取反操作后新位图文件的文件名:\n");
scanf("%s",outFileName);
if((in=fopen(inFileName,"rb"))==NULL)
{
printf("无法打开输入文件\n");
return
1;
}
if((out=fopen(outFileName,"wb"))==NULL)
{
printf("无法打开输出文件\n");
return
1;
}
for(i=1;!feof(in);i++)
{
if(i<=54)
fputc(fgetc(in),out);/*位图文件的前54个字节保持原样不变保存到新文件中*/
else
fputc(~fgetc(in),out);/*对实际位图数据部分的每个字节进行取反操作后保存*/
}
fclose(in);fclose(out);
return
0;
getch();
}
两个小问题
scanf("%s",outFileName);
变量前面漏掉了取地址符
然后%号应该用半角符输入
你输入的是全角符
改过这之后能用
我测了
int
main()
{
FILE
*in,*out;
int
i;
char
inFileName[90],outFileName[90];
printf("请输入原位图文件的文件名:\n");
scanf("%s",inFileName);
printf("请输人取反操作后新位图文件的文件名:\n");
scanf("%s",outFileName);
if((in=fopen(inFileName,"rb"))==NULL)
{
printf("无法打开输入文件\n");
return
1;
}
if((out=fopen(outFileName,"wb"))==NULL)
{
printf("无法打开输出文件\n");
return
1;
}
for(i=1;!feof(in);i++)
{
if(i<=54)
fputc(fgetc(in),out);/*位图文件的前54个字节保持原样不变保存到新文件中*/
else
fputc(~fgetc(in),out);/*对实际位图数据部分的每个字节进行取反操作后保存*/
}
fclose(in);fclose(out);
return
0;
getch();
}
两个小问题
scanf("%s",outFileName);
变量前面漏掉了取地址符
然后%号应该用半角符输入
你输入的是全角符
改过这之后能用
我测了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询