C语言编程题,求助大神,麻烦给出代码的同时能有结果图,谢谢啦!!!

编写程序,已知文件data.txt中存储了一组整数,从键盘上输入一个整数,在文件中查找该数据。如果找到,输出该数据的位置;否则输出未找到信息。... 编写程序,已知文件data.txt中存储了一组整数,从键盘上输入一个整数,在文件中查找该数据。如果找到,输出该数据的位置;否则输出未找到信息。 展开
 我来答
匿名用户
2020-06-25
展开全部

#include <stdio.h>


int main()

{

    FILE *fp;

    int i,n,t,flag;

    if(fp=fopen("data.txt","r"))

    {

        scanf("%d",&n);

        for(i=0,flag=0;fscanf(fp,"%d",&t)==1;i++)

        {

            if(n==t)

            {

                flag=1;

                break;

            }

        }

        if(flag)

        {

            printf("%d\n",i);

        }

        else

        {

            printf("未找到\n");

        }

    }

    return 0;

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小兔子学python
2020-06-25 · 爱与灵魂,有问必答(codeSheep)
小兔子学python
采纳数:33 获赞数:149

向TA提问 私信TA
展开全部

第一反应:实际上我不太明白为什么会问这个问题哈哈哈哈,简单看起来没有什么难点,所以我写了一种比较高效的做法,

我的回答效率更高:楼上的回答不可谓不好,但是缺点在于它能够返回的数字有限,对于超过13为的数字就没有办法比较了,而我的做法克服了这一点;同时也可以返回数字的位置(行数,列数);另外我的做法不但能够比较数字,也可以比较字符串,适用范围更广

算法原理:看一看KMP算法,可以实现无回溯比较

算法效果:

算法效果

data.txt文件

  • #include<stdio.h>  

  • #include<malloc.h>  

  • #define MAXSIZE 20  

  • void swap(char *a, char *b)  

  • {  

  • char temp=*a;  

  • *a=*b;  

  • *b=temp;  

  • }  

  • char * itoa(int num)  

  • {  

  • char * strNum=(char *)calloc(MAXSIZE,sizeof(char));  

  • int i,j;  

  • do  

  • {  

  • strNum[i++]='0'+num%10;  

  • num/=10;  

  • } while (num);  

  • strNum[i]='\0';  

  • for(--i,j=0;j<i;swap(&strNum[i--],&strNum[j++]));  

  • return strNum;  

  • }  

  • int * next_generate(char * p)  

  • {     

  • int * pnext=(int *)calloc(MAXSIZE,sizeof(int));  

  • pnext[0]=-1;  

  • int k,j;  

  • for(k=-1,j=0;p[j];)  

  • {  

  • if(k==-1||p[j]==p[k])  

  • {  

  • j++;  

  • k++;  

  • pnext[j]=k;  

  • }  

  • else  

  • k=pnext[k];  

  • }  

  • return pnext;  

  • }  

  • void KMP(FILE * IN, char * p)  

  • {  

  • int *Jnext=next_generate(p);  

  • int j=0,row=0,col=0;  

  • char c=fgetc(IN);  

  • while(c!=EOF&&p[j])  

  • {  

  • if(j==-1||p[j]==c)  

  • {  

  • j++;  

  • c=fgetc(IN);  

  • col++;  

  • if(c=='\n')  

  • {  

  • col=0;  

  • row++;  

  • }  

  • }  

  • else  

  • {  

  • j=Jnext[j];        

  • }    

  • }  

  • if(!p[j])  

  • {  

  • printf("I find it,below is its position\nrow:%d\ncol:%d",row+1,col-j+1);  

  • return;  

  • }  

  • printf("There is no such number in the file");  

  • }  

  • int main()  

  • {  

  • FILE * ptr=fopen("data.txt","r");  

  • char * strNum=itoa(100);  

  • int * a=next_generate(strNum);  

  • KMP(ptr,strNum);  

  • return 0;  

  • }  

希望这个回答能够帮助到你,如果可以的话#能关#注一#下我🐎

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式