C++中如何判断文件行结束
12321223其中第一行数据不知道具体有多少个数字,在pascal中是eoln(input),请问在C++中如何实现?...
1 2 3
2
1 2
2 3
其中第一行数据不知道具体有多少个数字,在pascal中是 eoln(input),请问在C++中如何实现? 展开
2
1 2
2 3
其中第一行数据不知道具体有多少个数字,在pascal中是 eoln(input),请问在C++中如何实现? 展开
展开全部
有很多方法可以判断。
例如 fgets 获取 整行内容,再分析 数据个数。
下面用 窥测 一个字符 的方法,判断 是否 '\n' 是否 EOF 或得每行数据:
用 void read_fp_one_line_int_data(int *a, int *n, FILE *fp);
读1 行,数据个数 存于 n, 数据 存于 a[], 文件 fp
主程序 读 整个文件,读1 行, 输出 n 和 本行 数据。
#include <stdio.h>
void read_fp_one_line_int_data(int *a, int *n, FILE *fp){
char c;
int k=0;
while(1){
c=getc(fp);
while (c==' ') c=getc(fp);
if (c == '\n' || c==EOF) break;
if ((c>='0' && c <='9') || c == '-') {
ungetc ( c, fp);
fscanf(fp,"%d",&a[k]); k++;
}
};
*n=k;
}
int main()
{
FILE *fp;
int i,n=0;
int a[20];
fp=fopen("abc.txt","r"); // 数据文件
do {
read_fp_one_line_int_data(a, &n,fp);
printf("n=%d\n",n);
if (n>0) {for (i=0;i<n;i++) printf("%d ",a[i]); printf("\n");};
} while(!feof(fp));
fclose(fp);
return 0;
}
例如 fgets 获取 整行内容,再分析 数据个数。
下面用 窥测 一个字符 的方法,判断 是否 '\n' 是否 EOF 或得每行数据:
用 void read_fp_one_line_int_data(int *a, int *n, FILE *fp);
读1 行,数据个数 存于 n, 数据 存于 a[], 文件 fp
主程序 读 整个文件,读1 行, 输出 n 和 本行 数据。
#include <stdio.h>
void read_fp_one_line_int_data(int *a, int *n, FILE *fp){
char c;
int k=0;
while(1){
c=getc(fp);
while (c==' ') c=getc(fp);
if (c == '\n' || c==EOF) break;
if ((c>='0' && c <='9') || c == '-') {
ungetc ( c, fp);
fscanf(fp,"%d",&a[k]); k++;
}
};
*n=k;
}
int main()
{
FILE *fp;
int i,n=0;
int a[20];
fp=fopen("abc.txt","r"); // 数据文件
do {
read_fp_one_line_int_data(a, &n,fp);
printf("n=%d\n",n);
if (n>0) {for (i=0;i<n;i++) printf("%d ",a[i]); printf("\n");};
} while(!feof(fp));
fclose(fp);
return 0;
}
2014-02-06
展开全部
如果屏幕输入的话,是这样的:
int a[maxn],i=0;//maxn随便是什么值,只要足够大。
while(scanf("%d",a[i])==1)//如果有输入scanf("%d",a[i])就为真,不然就为假(无输入的话以Ctrl+z(系统是windows的前提下)结束即可)
i++;
如果是文件,只能用EOF:
getchar()()函数当输入流出错或者到达末尾的时候,就会返回EOF
while((c=getchar()()) != EOF) 就是检查是否读取到了输入流末尾,是就跳出。
int a[maxn],i=0;//maxn随便是什么值,只要足够大。
while(scanf("%d",a[i])==1)//如果有输入scanf("%d",a[i])就为真,不然就为假(无输入的话以Ctrl+z(系统是windows的前提下)结束即可)
i++;
如果是文件,只能用EOF:
getchar()()函数当输入流出错或者到达末尾的时候,就会返回EOF
while((c=getchar()()) != EOF) 就是检查是否读取到了输入流末尾,是就跳出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般来说可以按二进制读取,\r\b就是行的结束,就是回车换行的两个字符
也可以按字符串读取,全部读取进来,再判断
也可以按字符串读取,全部读取进来,再判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
int main()
{
FILE *fp;
char ch;
int n=0;
if((fp=fopen("test.txt","r"))==NULL)
{
printf("\nCannot open file strike any key exit!");
return 1;
}
ch=fgetc(fp);
if(ch<='9'&&ch>='0')n++;
while(ch!=EOF)
{
ch=fgetc(fp);
if(ch<='9'&&ch>='0')n++;
if(ch=='\n')break;
}
printf("第一行数字个数:%d\n",n);
fclose(fp);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是做acm吧,用EOF
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询