我的一个程序读取一个txt文件,在Windows下能得到正确的结果,但在Ubuntu下却不行
读取的文件格式如下: .v 50 51 52 53 54 55 56 57 58 59 60
我用fgetc 读取,当读到换行符时结束循环,但总得不到正确的结果,在60后面还能读到0 0 0 1 0 0。。。
是不是文件格式不同啊,在linux下怎样查看二进制文件啊?
期待回答
c语言文件读取
- wzssyqa
- 帖子: 4010
- 注册时间: 2008-04-07 17:36
- 来自: 泰安人在阜新
Re: c语言文件读取
可能是因为win的换行格式和unix不同,win下是一个换行加个回车,unix只有一个换行
贴出代码来瞧瞧
贴出代码来瞧瞧
宇宙=数学 *物理 sssssssss Ubuntu 桌面培训 sssssssss 问打包的问题之前先看
和我一样的新手请看,我看过了,腰不酸了,腿不疼了,上楼也有劲了
想去IRC的点这里——一个比QQ群好N多的东西
和我一样的新手请看,我看过了,腰不酸了,腿不疼了,上楼也有劲了
想去IRC的点这里——一个比QQ群好N多的东西
-
- 帖子: 57
- 注册时间: 2009-01-05 11:42
Re: c语言文件读取
od 先看看原始文件的数据是什么吧。
-
- 帖子: 35
- 注册时间: 2009-04-01 8:50
Re: c语言文件读取
读入的文件:
节选
.i 16
.o 1
.p 10917
.v 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
C 语言代码:
ch=fgetc(fp);
while ((ch1=fgetc(fp))!=EOF)
{
if (ch==0x2e&&ch1==0x76) /*当读到文件是.v的时候,记录下后面的节点标号*/
{ ++n;
while ((ch2=fgetc(fp))!=0x0a) /*当不是遇见换行符时继续循环*/
{
fgets(str,3,fp);
save=atoi(str);
input_pad_num=save;
i++;
printf("the record is %d\n",save);
}
}
以上代码在win 下完全没问题的。。。可是在Linux下不行。请赐教
节选
.i 16
.o 1
.p 10917
.v 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
C 语言代码:
ch=fgetc(fp);
while ((ch1=fgetc(fp))!=EOF)
{
if (ch==0x2e&&ch1==0x76) /*当读到文件是.v的时候,记录下后面的节点标号*/
{ ++n;
while ((ch2=fgetc(fp))!=0x0a) /*当不是遇见换行符时继续循环*/
{
fgets(str,3,fp);
save=atoi(str);
input_pad_num=save;
i++;
printf("the record is %d\n",save);
}
}
以上代码在win 下完全没问题的。。。可是在Linux下不行。请赐教
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
-
- 帖子: 35
- 注册时间: 2009-04-01 8:50
Re: c语言文件读取
尝试过了 不行阿xhy 写了:用二进制方式打开文件试试
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
Re: c语言文件读取
你的文件必须保存成 \r\n 或者 \n , 读到时候方法要一致chuzhufei 写了:尝试过了 不行阿xhy 写了:用二进制方式打开文件试试
windows记事本保存的文件默认是\r\n的
目前负债150多万
-
- 帖子: 35
- 注册时间: 2009-04-01 8:50
Re: c语言文件读取
哦 成功了 谢谢xhy 写了:你的文件必须保存成 \r\n 或者 \n , 读到时候方法要一致chuzhufei 写了:尝试过了 不行阿xhy 写了:用二进制方式打开文件试试
windows记事本保存的文件默认是\r\n的
把ch2=fgetc(fp)==0x0d 就行了。。。。