写了个程序想实现下文件的读取,可是发现个问题
没法正确读取第一个数,一定要开头空一格。。。。。。。
否则就是不读第一个。。。郁闷,而且读出来的总数也有问题。。。比实际多一个
我觉得就这个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();
}
[此贴子已经被作者于2007-11-4 10:27:48编辑过]
----------------解决方案--------------------------------------------------------
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编辑过]
----------------解决方案--------------------------------------------------------
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编辑过]
----------------解决方案--------------------------------------------------------
。。。。那样换了貌似OK。。。。
对了为什么你这样编写以后把空格换成逗号就不好用了
而我原来逗号和空格隔开都好用呢?
[此贴子已经被作者于2007-11-4 22:13:17编辑过]
----------------解决方案--------------------------------------------------------
。。。。那样换了貌似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编辑过]
----------------解决方案--------------------------------------------------------