C語言
將檔案內容讀入結構體后,無法對結構體內資料進行處理,請問是哪里錯了
#include<stdio.h>
#include<stdlib.h>
#define N 32
struct object
{
int id;
char *name;
int jump;
int ru
int breath;
int weight;
}class1[N];
void open();
int main(void){
int number;
printf(" 1.查詢合格學生\n");
printf(" 0.退出系統\n");
printf(" 請輸入數字指令:\n");
scanf("%d",&number);
while (!(number>=0&&number<=8))
{
printf(" 沒有這個選項,請重新輸入:\n");
}
switch(number)
{case 0:
{
printf(" 已退出管理系統");
return 0;
}
case 1:
{
int j;
open();
for(j = 0;j<30;j++)
{
if(class1[j].jump>60 && class1[j].run>60)
{
printf("%d %s %d %d %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath);
}
}
printf("-------------------------------------------------\n");
break;
}
case 0:{
printf("已退出管理系統");
return 0;
break;
}
}
return 0;
}
void open(){
FILE *fp;
int i,j,nr = 0;
char buf[N],c;
fp = fopen("class.txt", "r");
if (fp == NULL) {
printf("檔案無法打開\n");
}
while (!feof(fp)) {
c = fgetc(fp);
if (c == '\n')
nr++; }
printf("nr=%d\n", nr);
rewind(fp);
struct object*line1 = NULL;
line1= (struct object*)malloc(sizeof(struct object)*(nr+1));
for (i = 1; i <= nr+1; i++) {
fgets(buf, N, fp);
sscanf(buf, "\n %d %s %d %d\n", &line1[i].id, &line1[i].name, &line1[i].jump,&line1[i].run);
}
}
選擇功能1的結果僅將檔案資料讀入結構體并未進行處理
uj5u.com熱心網友回復:
你想怎么處理?uj5u.com熱心網友回復:
你想怎么處理?uj5u.com熱心網友回復:
沒有看到處理的陳述句uj5u.com熱心網友回復:
case1中就是uj5u.com熱心網友回復:
for(j = 0;j<30;j++){
if(class1[j].jump>60 && class1[j].run>60)
{
printf("%d %s %d %d %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath);
}
uj5u.com熱心網友回復:
#include<stdio.h>
#include <string.h>
#include<stdlib.h>
#define N 32
struct object
{
int id;
char *name;
int jump;
int run;
int breath;
int weight;
}class1[N];
void open();
int main(void)
{
int number;
printf(" 1.查詢合格學生\n");
printf(" 0.退出系統\n");
printf(" 請輸入數字指令:\n");
scanf("%d",&number);
while (!(number>=0&&number<=8))
{
printf(" 沒有這個選項,請重新輸入:\n");
}
switch(number)
{
case 0:
{
printf(" 已退出管理系統");
return 0;
}
case 1:
{
int j;
open();
for(j = 0;j<30;j++)
{
if(class1[j].jump>60 && class1[j].run>60)
{
printf("%d %s %d %d %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath);
}
}
printf("-------------------------------------------------\n");
break;
}
/*
case 0:{ //這是做啥?一個switch中兩個case 0?
printf("已退出管理系統");
return 0;
break;
}
*/
}
return 0;
}
void open()
{
FILE *fp;
int i,j,nr = 0;
char buf[N],c;
fp = fopen("class.txt", "r");
if (fp == NULL) { //既然檔案無法打開了,為啥不退出函式呢?還要繼續往下執行嗎?那樣不就出錯了嘛
printf("檔案無法打開\n");
return; //退出
}
while (!feof(fp)) {
c = fgetc(fp);
if (c == '\n')
nr++;
}
printf("nr=%d\n", nr);
rewind(fp);
struct object*line1 = NULL;
//line1= (struct object*)malloc(sizeof(struct object)*(nr+1));
line1= (struct object*)malloc(sizeof(struct object)*(nr));
//for (i = 1; i <= nr+1; i++) {
for (i = 0; i < nr; i++) {
fgets(buf, N, fp);
//sscanf(buf, "\n %d %s %d %d\n", &line1[i].id, &line1[i].name, &line1[i].jump,&line1[i].run);
sscanf(buf, "\n %d %s %d %d\n", &line1[i].id, line1[i].name, &line1[i].jump,&line1[i].run);
}
if (nr > N)
nr = N;
memcpy(class1, line1, sizeof(struct object) * nr);
free(line1);
}
供參考~
要處理首先需要給class1賦值呢,你把讀到的資料放到line1中,然后呢?資料會自動到class1中?
uj5u.com熱心網友回復:
fgets(buf, N, fp);
這句也很可能讀不全一行內容,建議把buf定義成128或256,當然要根據一行資料的位元組數來定~
uj5u.com熱心網友回復:
for(j = 0;j<30;j++){
if(class1[j].jump>60 && class1[j].run>60)
{
printf("%d %s %d %d %d\n",class1[j].id,class1[j].name,class1[j].jump,class1[j].run,class1[j].breath);
}
}
=============================
for (i = 1; i <= nr+1; i++) {
fgets(buf, N, fp);
sscanf(buf, "\n %d %s %d %d\n", &line1[i].id, &line1[i].name, &line1[i].jump,&line1[i].run);
你的class1和讀入結構體的 line1有關系嗎?
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
檔案內容10101 m1 85 90 4000
10102 m2 72 65 2500
10103 m3 66 47 1750
10104 m4 40 87 3700
10105 m5 72 91 3600
10106 m6 84 48 1800
10107 m7 90 80 3060
10108 m8 57 84 3200
10109 m9 77 99 4300
10110 m10 81 83 3300
10111 m11 90 44 2020
10112 m12 54 92 4150
10113 m13 75 80 3000
10114 m14 52 64 2250
10115 m15 75 57 2260
10116 m16 76 79 2730
10117 m17 38 95 4220
10118 m18 68 95 4250
10119 m19 80 67 2350
10120 m20 80 58 2050
10121 m21 82 60 2100
10122 m22 53 80 3220
10123 m23 56 94 3640
10124 m24 74 75 2800
10125 m25 84 71 2530
10126 m26 90 90 4000
10127 m27 91 70 2520
10128 m28 80 93 3950
10129 m29 91 66 2320
10130 m30 39 83 3150
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35922.html
標籤:C語言
