如何验证一个4位数是否已存在于一个txt文件中

kingkiao 2011-03-13 09:27:02
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位数开始呢?
...全文
144 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfd1234 2011-03-14
  • 打赏
  • 举报
回复
楼主知道方法了,只是使用的有问题,这个就得多练习了,没有办法
jialejiahi 2011-03-14
  • 打赏
  • 举报
回复
原来是你在百度问的啊,呵呵。
qq120848369 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 suzhiwei411 的回复:]
四楼正解,楼主,你的代码有问题,每次查找如果没有找到这个数就wrong,找到这个数才打印right,这样就有若干的wrong或者right了,这个和逗号并没有关系,因为scanf %d函数是以非数字字符作为分隔符的。
[/Quote]

你想当然,你试试直接%d能运行不,我写的找到了就打印right退出,你改一下就可以了.
赵4老师 2011-03-14
  • 打赏
  • 举报
回复
仅供参考
//d.txt为下面一行内容:( 去掉前面的// )
//01.2,3.45;5.6789 -0.12345678901234 abc 1234567890.123456789123456789 1e300 0
#include <stdio.h>
int n,r;
double d;
FILE *f;
void main() {
f=fopen("d.txt","r");
n=0;
while (1) {
r=fscanf(f,"%lf",&d);
if (1==r) {
n++;
printf("[%d]==%.15lg\n",n,d);//可以试试注释掉这句以后的速度
} else if (0==r) {
fgetc(f);
} else break;
}
fclose(f);
}
//实际运行输出:( 去掉前面的// )
//[1]==1.2
//[2]==3.45
//[3]==5.6789
//[4]==-0.12345678901234
//[5]==1234567890.12346
//[6]==1e+300
//[7]==0

suzhiwei411 2011-03-14
  • 打赏
  • 举报
回复
四楼正解,楼主,你的代码有问题,每次查找如果没有找到这个数就wrong,找到这个数才打印right,这样就有若干的wrong或者right了,这个和逗号并没有关系,因为scanf %d函数是以非数字字符作为分隔符的。
logiciel 2011-03-14
  • 打赏
  • 举报
回复
FILE * in;
int c;
int num;
char numstr[10];
char *p;
scanf("%d",&c);
while((fscanf(in, "%s",numstr))!=EOF)//先按字符串读入{
if (p=strrchr(numstr, ',')) *p=0; //删除','
num=atoi(numstr);
if (c==num) //if (c=num)
{ printf("right ");}
else
{ printf("wrong ");}//{ printf("wrong";}
}
kingkiao 2011-03-14
  • 打赏
  • 举报
回复
额 情况如2楼所讲 后边还要加入很多随机4位数
另外想break pause之类的指令我完全不知道该怎么用 如何用一般的scanf或者printf来替带他们呢?
kingkiao 2011-03-14
  • 打赏
  • 举报
回复
while(!feof(in))
这句可以用
while(fscanf(in,"%d,",&c)!=EOF)之类的代替吗?
我没学到feof这个指令 书上的习题要求不能用没学过的指令。。。
delphiwcdj 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 logiciel 的回复:]

C/C++ code
FILE * in;
int c;
int num;
char numstr[10];
char *p;
scanf("%d",&c);
while((fscanf(in, "%s",numstr))!=EOF)//先按字符串读入{
if (p=strrchr(numstr, ',')) *p=0; //删除','
num=atoi(numstr);
……
[/Quote]
完善一下,这种方法逗号后必须有空白符

#include <cstdio>
#include <cstring>
#include <cstdlib>

int main()
{
FILE * in;
int c;
int num;
char str[128];
char *p;
if( ( in = fopen("file.txt","r") ) == NULL )
return -1;
scanf("%d",&c);
while((fscanf(in, "%s", str)) != EOF)// 先按字符串读入
{
if (p = strrchr(str, ','))
*p=0;
num = atoi(str);
printf("%d ", num);
if (c == num)
{
printf("right ");
break;
}
}
return 0;
}
/*
file.txt内容:
1234, 234, 44, 124, 542, 442, 135
212, 42, 11, 33, 233, 100, 123

输出:
1234 234 44 124 542 442 135 212 42 11 33 233 100 right
*/
ttssrs 2011-03-13
  • 打赏
  • 举报
回复
既然只有四个数,也可以用数组吧
liutengfeigo 2011-03-13
  • 打赏
  • 举报
回复
为什么不一次读4个.然后一次判.只要有一个不符合就over了
qq120848369 2011-03-13
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>

int main()
{
FILE *in=NULL;

if( ( in=fopen("d:\\text.txt","r") )==NULL )
{
return -1;
}

int get,find;

scanf("%d",&find);

while(true)
{
if( fscanf(in,"%d",&get)!=EOF )
{
if(get==find)
{
printf("right\n");
}
}
else
{
break;
}

if( fgetc(in)==EOF )
{
break;
}
}


fclose(in);

return 0;
}
「已注销」 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingkiao 的回复:]

可不可以第一次用"%d" 后边的用",%d"呢? 因为后边还要往in.txt里加很多随机的4位数
[/Quote]
可以 的。。
kingkiao 2011-03-13
  • 打赏
  • 举报
回复
可不可以第一次用"%d" 后边的用",%d"呢? 因为后边还要往in.txt里加很多随机的4位数
「已注销」 2011-03-13
  • 打赏
  • 举报
回复
前三次用fscanf(in,"%d,",&num)
最后一次fscanf(in,"%d",&num)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧