程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> C++寫一個txt查詢時出錯-CSDN問答

C++寫一個txt查詢時出錯-CSDN問答

編輯:編程解疑
C++寫一個txt查詢時出錯

寫了一個按照學號Sno查詢的程序,運行的時候都是打出最後一行,哪位大神幫我指正一下,感激不盡。

 #include<stdio.h>

#define N 1024
#define RECORDLENGTH 1000

struct Student         //定義基本表——Student
{
    long long int Sno;      //學生學號
    char Sname[20];    //學生姓名
    char Ssex[6];      //學生性別
    int Sage;          //學生年齡
    char Sdept[20];    //學生所在系
};

int main()
{
    FILE *fp;
    int n,i,num[N],m;
    char buffer[RECORDLENGTH+1];
    Student mp;
    if( fp=fopen("StudentData.txt","r"))
    {
        n=0;
        while (!feof(fp))
        {
            fgets(buffer,RECORDLENGTH+1,fp);
            sscanf(buffer,"%lld",num+n);
            n++;
        }
        printf("請輸入序號:");
        scanf("%lld",&m);
        for( i=0;i<n;i++)
            if ( num[i]==m )
                break;
        if ( i<n )
        {
            fseek(fp, (long)i*RECORDLENGTH , (int)fp);
            fgets(buffer,RECORDLENGTH+1,fp);
            sscanf(buffer,"%lld %s %s %d %s",&mp.Sno,&mp.Sname,&mp.Ssex,&mp.Sage,&mp.Sdept);
            printf("學號  姓  名 性別 年齡 所在系\n");
            printf("%04lld %8s %4s %4d %4s\n",mp.Sno,mp.Sname,mp.Ssex,mp.Sage,mp.Sdept);
        }
        else
            printf("沒有找到序號為%lld的記錄。\n",num);
        fclose(fp);
    }
    else
    {
        printf("無法打開文件讀取數據。\n");
        //exit();
    }
}

一下是StudentBase.txt裡面的內容
2014010624 艾倫 男 19 IS
2014010413 郭寧 男 20 EN
2014010908 王凱 男 19 IS
2014021111 劉莉 女 19 EN
2014011536 陳軍 男 21 IS
2014021314 趙爽 女 18 CA
2014010715 李寧 女 22 IS
2014010245 喬治 男 21 EN
2014021212 張雪 女 19 IS
2014021629 孫楠 男 23 CA
2014012231 馬丁 男 20 CA

最佳回答:


把if ( num[i]==m )判斷放到讀文件的裡面就可以了,找到num就break,然後再fseek一行,再輸入就可以了

 #include<stdio.h>
#include<string.h>
#define N 1024
#define RECORDLENGTH 1000

struct Student         //定義基本表——Student
{
    long long int Sno;      //學生學號
    char Sname[20];    //學生姓名
    char Ssex[6];      //學生性別
    int Sage;          //學生年齡
    char Sdept[20];    //學生所在系
};

int main()
{
    FILE *fp;
    int n,i = 0,num[N];
    long long int m;
    char buffer[RECORDLENGTH+1];
    Student mp;
    if( fp=fopen("F:\\StudentData.txt","r"))
    {
        n=0;
        int size = 0;
        printf("請輸入序號:");
        scanf("%lld",&m);
        while (!feof(fp))
        {
            fgets(buffer,RECORDLENGTH+1,fp);
            size = strlen(buffer);
            sscanf(buffer,"%lld",num+n);
            if (num[n]==m)
            {
                i = 1;
                break;
            }
            n++;
        }

        if ( i == 1 )
        {
            fseek(fp, -size-1 , SEEK_CUR);
            fgets(buffer,RECORDLENGTH+1,fp);
            sscanf(buffer,"%lld %s %s %d %s",&mp.Sno,&mp.Sname,&mp.Ssex,&mp.Sage,&mp.Sdept);
            printf("學號  姓  名 性別 年齡 所在系\n");
            printf("%04lld %8s %4s %4d %4s\n",mp.Sno,mp.Sname,mp.Ssex,mp.Sage,mp.Sdept);
        }
        else
            printf("沒有找到序號為%lld的記錄。\n",num);
        fclose(fp);
    }
    else
    {
        printf("無法打開文件讀取數據。\n");
        //exit();
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved