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

编写程序,已知文件data.txt中存储了一组整数,从键盘上输入一个整数,在文件中查找该数据。如果找到,输出该数据的位置;否则输出未找到信息。

第1个回答  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;

}

第2个回答  2020-06-25

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

我的回答效率更高:楼上的回答不可谓不好,但是缺点在于它能够返回的数字有限,对于超过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;  

    }  

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

相似回答