C读取文件过程中能用fscanf(fp,"%*[^\n]%*c");跳行吗?
答案:3 悬赏:30 手机版
解决时间 2021-03-23 14:36
- 提问者网友:谁的错
- 2021-03-22 19:27
C读取文件过程中能用fscanf(fp,"%*[^\n]%*c");跳行吗?
最佳答案
- 五星知识达人网友:执傲
- 2021-03-22 19:55
for (i=0;i<2;i++) fscanf(fin,"%*[^\n]%*c"); 跳过2行。
%* 是“跳过”
[^\n] 字符串的分隔符是 "\n", 中括号里可以写 分隔符 表
%*[^\n] 跳过 \n 前的所有 字符串。
%*c 是“跳过”行尾 的 换行符。
#include
#include
main()
{
FILE *fin;
int x,y;
int i;
fin=fopen("a.txt","r");
for (i=0;i<2;i++) fscanf(fin,"%*[^\n]%*c"); // 跳2 行
fscanf(fin,"%d %d",&x,&y); // 读 2 个 int
printf("%d %d\n",x,y); // 打出 3 33
fclose(fin);
}
文件例子:
1 2 3
2 345 56
3 33 333
4 444 444
%* 是“跳过”
[^\n] 字符串的分隔符是 "\n", 中括号里可以写 分隔符 表
%*[^\n] 跳过 \n 前的所有 字符串。
%*c 是“跳过”行尾 的 换行符。
#include
#include
main()
{
FILE *fin;
int x,y;
int i;
fin=fopen("a.txt","r");
for (i=0;i<2;i++) fscanf(fin,"%*[^\n]%*c"); // 跳2 行
fscanf(fin,"%d %d",&x,&y); // 读 2 个 int
printf("%d %d\n",x,y); // 打出 3 33
fclose(fin);
}
文件例子:
1 2 3
2 345 56
3 33 333
4 444 444
全部回答
- 1楼网友:想偏头吻你
- 2021-03-22 22:32
C读取文件过程中不能用fscanf(fp,"%*[^ ]%*c");跳行。
细节如下:
上面的写法是正则表达式的写法,C语言的fscanf函数是不支持正则表达式。
但是可以用fgets()函数实现跳行。
- 2楼网友:大漠
- 2021-03-22 21:19
fscanf(fp,"%*[^ ]%*c");完全可以实现跳行。
你没有控制好,库函数都是千锤百炼的,我在使用过程中没有发现你说的问题。设置一个int变量ln,在读取变量时写成fscanf(fp,"%s%n",a,&n);的形式,那么,n的值就是s字符串的长度,需要移动fp时写fseek(fp,-n,SEEK_CUR);,就准确地把fp移到刚读的那个变量前面了。不过,为什么要反复读这一段?读出来了复制不是更简单吗?
追问格式中%n只能用来测字符串长度吗?我读取的基本是整形或者浮点型变量,发现在涉及换行时,让指针后退sizeof(int)就可能跳过两个变量去,有什么解决办法,谢谢!追答整型当然也行啊,读文件的时候都是按字符读的,符给变量时才由读函数转换成整型,所以并不影响正确统计指针移动了多少位!不能用sizeof(int)作为操作文件指针的根据吧?一个整型变量存入文件时可能是1个字节,比如存入一个4;也可能是10个字节,比如存入0x7fffffff!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯