| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 603 人关注过本帖
标题:[求助]怎么老读取错误啊!
只看楼主 加入收藏
fctc007
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-8-31
收藏
 问题点数:0 回复次数:4 
[求助]怎么老读取错误啊!

写了个程序想实现下文件的读取,可是发现个问题
没法正确读取第一个数,一定要开头空一格。。。。。。。
否则就是不读第一个。。。郁闷,而且读出来的总数也有问题。。。比实际多一个
我觉得就这个TEST读出来,I应该是10。。。但是怎么是11呢

程序如下,文件我也带上吧,N人出来帮忙啊!
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE * fp;
int ch;
int a[20]={0};
int i=0;
int j;
if((fp=fopen("E:\\turbo-c\\Work\\test.txt","r"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}

while (ch!=EOF)
{
ch=fgetc(fp);
fscanf(fp,"%d",&a[i]);
i++;
}
fclose(fp);
printf("%d\n\n\n",i);
printf("%d\n\n\n",a[0]);
for(j=0;j<i;j++)
printf("%d\n",a[j]);

getch();
}

xEv0GyNC.txt (22 Bytes) [求助]怎么老读取错误啊!


[此贴子已经被作者于2007-11-4 10:27:48编辑过]

2007-11-04 10:24
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

while (ch!=EOF)
{
ch=fgetc(fp); // fgetc 吃掉了一个字符
fscanf(fp,"%d",&a[i]);
i++;
}

这就是需要开头空格的原因。


/* 修改后的原代码 */

#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE * fp;
int ch;
int a[20]={0};
int i=0;
int j;
int temp;

if((fp=fopen("E:\\turbo-c\\Work\\test.txt","r"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}


while(fscanf(fp,"%d",&temp) == 1 && i < 20)
{
a[i] = temp;
i++;
}

fclose(fp);
printf("%d\n\n\n",i);

for(j= 0; j < i; j++)
printf("%d\n",a[j]);

getch();
}


/* fscanf() 返回成功读取的项目的个数,也返回文件结为。*/



[此贴子已经被作者于2007-11-4 11:50:46编辑过]


—>〉Sun〈<—
2007-11-04 11:32
fctc007
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-8-31
收藏
得分:0 
以下是引用cosdos在2007-11-4 11:32:40的发言:

while (ch!=EOF)
{
ch=fgetc(fp); // fgetc 吃掉了一个字符
fscanf(fp,"%d",&a[i]);
i++;
}

这就是需要开头空格的原因。


/* 修改后的原代码 */

#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE * fp;
int ch;
int a[20]={0};
int i=0;
int j;
int temp;

if((fp=fopen("E:\\turbo-c\\Work\\test.txt","r"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}


while(fscanf(fp,"%d",&temp) == 1 && i < 20)
{
a[i] = temp;
i++;
}

fclose(fp);
printf("%d\n\n\n",i);

for(j= 0; j < i; j++)
printf("%d\n",a[j]);

getch();
}


/* fscanf() 返回成功读取的项目的个数,也返回文件结为。*/





原来是这样啊~~谢谢!

那样不是如果把两个语句换过来以后就OK了。。。

[此贴子已经被作者于2007-11-4 22:03:38编辑过]


2007-11-04 22:02
fctc007
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2006-8-31
收藏
得分:0 
。。。。那样换了貌似OK。。。。


对了为什么你这样编写以后把空格换成逗号就不好用了
而我原来逗号和空格隔开都好用呢?

[此贴子已经被作者于2007-11-4 22:13:17编辑过]


2007-11-04 22:05
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
以下是引用fctc007在2007-11-4 22:05:37的发言:
。。。。那样换了貌似OK。。。。


对了为什么你这样编写以后把空格换成逗号就不好用了
而我原来逗号和空格隔开都好用呢?

因为你使用 getc() 函数,scanf() 函数过滤掉了文本中的空格,同屏幕上输入一样。


如果要使用逗号隔开,那代码可以改。

while((j = fscanf(fp,"%d",&temp)) != EOF && i < 20)
{
if(j) /* 这样改后会过滤掉所有的非数字字符(负数例外)*/
{
a[i] = temp;
i++;
}
else
getc(fp);
}

[此贴子已经被作者于2007-11-5 1:03:22编辑过]


—>〉Sun〈<—
2007-11-05 00:47
快速回复:[求助]怎么老读取错误啊!
数据加载中...
 
   



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

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