从文件中读取需要的数据(fscanf和fgetc配合使用)

这篇博客探讨了如何在C语言中验证4位数是否存在于逗号分隔的txt文件中。通过分析几种方法,包括fscanf与fgetc的结合使用,根据fscanf返回值跳过非法数据,以及使用strchr处理字符串,来实现从文件中正确识别和匹配4位数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2011-03-14 wcdj

 

问题:
如何验证一个4位数是否已存在于一个txt文件中。in.txt 里是任意4个4位数,但是他们由逗号隔开 1234, 2345, 3456, 4567 最后一个4位数里没逗号,现在输入一个4位数判断这个4位数是否存在于in.txt 里。

FILE * in;
int c;
int num;
scanf("%d",&c);
while((fscanf(in,"%d",&num))!=EOF)
{
  if (c==num)
  { printf("right");}
  else
  { printf("wrong");}
}

in.txt 里边是1234, 2345, 3456, 4567 最后一个4位数后边没逗号,这个只能认出第一个4位数1234。 不晓得逗号的识别要怎么做,加到%d前边吗? 前边后边都试了都不行啊,或者应该为第一个4位数验证一次? 可是又如何让第二次fscanf从第二个4位数开始呢?

 

思路:

当fscanf遇到非法数据时处理的方法:
[1] 使用fscanf,并用fgetc跳过非法数据
[2] 根据fscanf的返回值使用%*c跳过非法数据

 

方法1:
前三次用fscanf(in,"%d,",&num),最后一次fscanf(in,"%d",&num) 或者第一次用"%d" 后边的用",%d。这种方法可以但是不够灵活。

方法2 :使用fscanf,并用fgetc跳过非法数据

 

方法3 :根据fscanf的返回值使用%*c跳过非法数据

 

方法4 :使用strchr
注意:
[1] 这种方法逗号后必须有空白符。
[2] 当fscanf中为%s的时候不存在非法输入,因此会自动循环读入数据。

 

参考
使用strtok、sscanf和strpbrk分别解析字符串的方法
scanf中%[*]type的巧用场景
讨论
zhao4zhong1的方法

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值