怎样用C语言从txt文件中读入数据?

在桌面上有一个名为“C.txt”的文本文档,里面有两列数据,一共2124行,也就是一行存放一个点的坐标,第一个是X第二个是Y,我想在C++中直接从文档中读入这些数据,用X[i],Y[i]来存放每一个点的横纵坐标的数据,请问给出源代码。最后还要在另一个名为“output.txt”的文档中输出一个整形数组P[m],一个单精度型变量t,和另一个整形数组d[m],请给出源代码,谢谢!

#include <stdio.h>
#define MAX_LINES 2124
int main()
{
FILE *in, *out;
int lines = 0;
int X[MAX_LINES], Y[MAX_LINES];
int i;

float t = 1.2F;
int P[] = {1, 2, 3, 4, 5};
int d[] = {4, 5, 6};

in = fopen("C.txt", "r");
if(!in) return 1;
while(fscanf(in, "%d%d", X+lines, Y+lines) == 2){
//printf("%d %d\n", X[lines], Y[lines]);
lines ++;
if(lines >= MAX_LINES) break;
}
fclose(in);

out = fopen("output.txt", "w");
if(!out) return 1;
fprintf(out, "%f\n", t);
for(i = 0; i < sizeof(P)/sizeof(P[0]); i++)
fprintf(out, "%d\n", P[i]);
for(i = 0; i < sizeof(d)/sizeof(d[0]); i++)
fprintf(out, "%d\n", d[i]);
fclose(out);
return 0;
}追问

请问你现在在线吗?有几步看不懂,需要问一下,最好加个注释啥的,非常感谢,一定追加分(虽然这显得很什么)谢谢,谢谢!

追答

哪里看不懂?
我没法修改了,加不上注释。哪行不懂,你问我答。
fscanf 返回成功读取的变量数

sizeof(array)/sizeof(array[0]) 是求数组元素数目,因为每个元素占内存相同。

追问

能加一下QQ吗?

追答

我不上Q. 你在这里问好了,回答完我去吃饭。

追问

in = fopen("C.txt", "r");//不需要指明路径吗?
if(!in) return 1;//什么意思?
while(fscanf(in, "%d%d", X+lines, Y+lines) == 2)//==2是啥意思?
//printf("%d %d\n", X[lines], Y[lines]);这句怎么被注释了?
out = fopen("output.txt", "w");//不需要指明输出路径吗?
fprintf(out, "%d\n", d[i]);//对于d数组跟p数组来说我希望输出格式是一个数据空一个格而不是换行

追答

in = fopen("C.txt", "r");//不需要指明路径吗?
//问得好,为了在任意目录运行,需要指明绝对路径。这里用得相对路径,把程序放到桌面才能正确运行.

if(!in) return 1;//什么意思?
//错误处理。打开文件失败则退出,你可以忽略。

while(fscanf(in, "%d%d", X+lines, Y+lines) == 2)//==2是啥意思?
// == 2 表示 X Y两个坐标值都能正确读取, 如果不是2则遇到非法数据或文件尾。

//printf("%d %d\n", X[lines], Y[lines]);这句怎么被注释了?
//这句调试用,可以不注释,你随意。

out = fopen("output.txt", "w");//不需要指明输出路径吗?
//同第一个fopen, 不指出输出路径会输出到当前工作路径。指明绝对路径(如"C:\\xxx\\output.txt")更好。

fprintf(out, "%d\n", d[i]);//对于d数组跟p数组来说我希望输出格式是一个数据空一个格而不是换行
//那就改成空格 fprintf(out, "%d ", d[i]);

追问

真的非常感谢!第一次用C++解决实际问题就遇到了规模如此庞大的数据,我现在正在调试程序,在这个过程中有可能会产生疑问,到时候想直接在这里问你,今晚必须把程序拿出来,分一定会给!请放心!至少追加50.今天遇到好人加牛人了,要是我身边有你这样的同学就好了!最后再次表示感谢!

追答

客气了。没问题,晚上回来时我会看看你的疑问。

追问

两个问题:
1、如果得到的数据中我只想输出m个数据,能不能这样改写:
for(i = 0; i < mi++)
fprintf(out, "%d\n", P[i]);
2、单独运行你给我的这段代码没错,但是拿到我的程序中就出了这样的错误:
error C2562: 'main' : 'void' function returning a value
(错误指向了:if(!in) return 1;
if(!out) return 1;
return 0;
)这三句,我把这三句就去掉了……

追答

1. 可以. 你m后少了分号.
2. 你的man函数定义声明为void, 直接return. return 1 和 return 0都改成return.

追问

能留一个平时经常用的邮箱什么的吗?你匿名回答我以后遇到编程问题了一时半会儿也联系不上你。如果不方便就不要了,非常感谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-30
你把文件后缀名改为 “.c” 然后在编程软件里面载入文件名即可,不用加后缀喔。。追问

请说详细点,还有,那输出怎么办呢?谢谢!

第2个回答  2012-04-30
本来准备试试的,后来一看,你需要的是:C++……追问

嗯,对matlab不太熟悉嘛,就直接上C++了,结果一下子就来了10页!人生第一次编这么大型的程序啊。

第3个回答  2012-04-30
154fd47