gpt4 book ai didi

扫描/打印第一行后代码崩溃

转载 作者:行者123 更新时间:2023-11-30 20:34:31 26 4
gpt4 key购买 nike

从数据库扫描并打印第一行后,此代码崩溃。我真的找不到任何解决方案。

崩溃的镜头:

Crash

数据库内容:

Matthew Summers 53901523 256325 135500
Jacob Sutherland 52392302 723232.2 1200000
Michael Phelps 58238211 971000.52 653350
Aaron Gordon 59923325 325700.92 623320
Vasil Maglaperidze 59952323 189900.32 330000
Avtandil Shoshiashvili 95234322 432000.72 723023
Michael Jordan 35252372 120899.75 50000
Daniel Whiteman 85238202 178500.53 349800
James Oneal 98773235 90750.23 197050
Haytheim Russels 19326233 178250.22 221580

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CHAR_BUF 128
#define DATA_FILE "database.txt"

typedef struct client
{
char fname[CHAR_BUF];
char lname[CHAR_BUF];
int pnumber;
float wins;
float loses;
float ratio;
}client;

int ReadData(FILE *fp);

int main()
{
//int lines=0;
//client client[i];
FILE *fp = fopen(DATA_FILE, "r"); // opens file
if(fp==NULL) // checks if .txt file is empty
{
printf("Database is empty.");
exit(1);
}
ReadData(fp); // Calls function to read db
//lines = ReadData(fp);
//printf("Line amount: %d", lines);
}


/* This function reads data from database
* and assigns values to their variables
*/
int ReadData(FILE *fp)
{
int i=0;
client client[i];
while(!feof(fp))
{
fscanf(fp, "%s %s %d %f %f", client[i].fname, client[i].lname,
&client[i].pnumber, &client[i].wins, &client[i].loses);
printf("%s %s %d %.2f %.2f\n", client[i].fname, client[i].lname,
client[i].pnumber, client[i].wins, client[i].loses);
i++;
}
return i;
}

最佳答案

  1. int i=0;   
    client client[i];

    这将创建一个大小为 0 的数组(这没有任何意义。)
    将其更改为:

    #define MAX 30

    client client[MAX];
  2. while(!feof(fp))  

    当从文件中读取最后一条记录时,末尾仍然有 \n 。因此,当计算此 while 表达式时,feof(fp) 返回 FALSE,因为它还不是文件末尾。
    但在下一行中 fscanf(fp, "%s %s %d %f %f", client[i].fname, client[i].lname, &client[i].pnumber, &client[i] .wins, &client[i].loses); 这是 eofscanf 失败。
    这解释了最后一个垃圾行。
    解决办法:
    检查scanf是否成功,如果成功则只执行printf。

    while(fscanf(fp, "%127s %127s %d %f %f", client[i].fname, client[i].lname, &client[i].pnumber, &client[i].wins, &client[i].loses) == 5)  
    {
    printf("%s %s %d %.2f %.2f\n", client[i].fname, client[i].lname, client[i].pnumber, client[i].wins, client[i].loses);
    i++;
    }

关于扫描/打印第一行后代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42330348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com