| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1899 人关注过本帖
标题:急急急,老鸟快进
只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

贴上程序


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-11-01 12:11
bbsbccnnet
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2004-10-31
收藏
得分:0 
吃饭了。
2004-11-01 12:25
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
收藏
得分:0 

你看看你的字符变量是不是有符号的!!!

你是用二进制的方式进行比较么!!!


差点把你忘了...
2004-11-01 17:01
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

晕了,如果case中常量重复了编译器会报错的!!我看了他的认为是他的函数使用错误我今天正在验证我的猜想!!

就是文本流是按照ascii码来操作的,而二进制流是正确的这一点他今天已经和我基本达成了共识指的是二进制流,文本流的问题我们正在交流!!

[此贴子已经被作者于2004-11-01 19:29:47编辑过]


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-01 17:42
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 
哈哈看来有结果了!!

我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-01 19:30
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

验证字符流是不是只能处理ascii码的问题??

程序如下:

#include <stdio.h>

void main(void)

{

FILE *fpr,*fpw;

char c;

//test1.tet中只有两个字符01

fpr=fopen(".\\test1.txt","r");

fpw=fopen(".\\test2.txt","w");

printf("start\n");

for(;;)

{

c=fgetc(fpr);

if(c==EOF)

break;

else

switch(c)

{

case 0x30:{c=0xf0;fputc(c,fpw);break;}//在这里发生超出ascii码的表示字符

case 0x31:{c=0x41;fputc(c,fpw);break;}//这里是ascii码的表示字符

}

}

fcloseall();

//下面让我们来看看test2中的内容

fpr=fopen(".\\test2.txt","r");

for(;;)

{

c=fgetc(fpr);

if(c==EOF)

break;

else

{

fputc(c,stdout);

printf(" %d\n",c);

}

}

printf("\ndone\n");

fcloseall();

return;

}

输出结果为:

start

?-16

A 65

Done

看来字节流的处理函数可以处理非ascii码!!亦或者可以处理

任何字符(以上的都是带符号的字符)

我的猜想错了。那么以有可能使你的程序范了一个错误!!

就是ch的值如果为-10xFF的时候。他是一个字符流结束的标志。而你把他编入了一个case:(你说你有0-255case分支)如果你转换它为其他的值,那么必然,有一个ch=0xXX的值被转换为0xFF了。但是这个值后面的值尽管转换的时候不会发生错误,但是你逆转的时候,如果使用字符流的形式的话。那么这个0xFF将成为你文件结束的标志。也就是说虽然后面还有需要转换的值但是你的字符流文件已经结束了。

看看这个程序:

#include <stdio.h>

void main(void)

{

FILE *fpr;

char c;

int n=0;

//test1.txt中只有两个字符01

fpr=fopen(".\\test1.txt","r");

printf("TEST\n");

for(n=0;n<10;n++)

{

c=fgetc(fpr);

fputc(c,stdout);

}

printf("||c=%d\n",c);

fcloseall();

}

猜猜输出会是什么,就是c会取些是什么值:

结果是

TEST

01


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-01 20:06
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

刚才又调了一个一个程序发现一些问题:上面我写的可能有很多错误!!渴望高手能指点!!

#include <stdio.h> void main(void) { FILE *fpr,*fpw; char c; int n=0;

fpw=fopen(".\\test1.txt","wb");

for(n=0;n<2;n++) { c=n+'0'; fwrite(&c,sizeof(char),1,fpw); } fflush(NULL); fcloseall();

fpr=fopen(".\\test1.txt","rb");//test1.tet中只有两个字符01 if(ferror(fpr)) printf("\nerro\n");

//test1.txt中字符使用二进制流的读取 fpr=fopen(".\\test1.txt","rb"); printf("\nTEST 二进制流\n"); for(;;) { if(!feof(fpr)) { fread(&c,sizeof(char),1,fpr); printf("%c",c); } else break; } printf("||c=%d\n",c); fclose(fpr);

//test2.txt中字符使用字符流的读取 fpr=fopen(".\\test1.txt","r"); printf("\nTEST 字符流\n"); for(;;) { c=fgetc(fpr); if(ferror(fpr)) printf("|true3|"); if(c==EOF) break; else { fputc(c,stdout); if(ferror(fpr)) printf("|true4|"); } } printf("||c=%d\n",c); fclose(fpr); } 为什么输出会是


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-01 21:53
快速回复:急急急,老鸟快进
数据加载中...
 
   



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

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