【发布时间】:2015-08-12 05:46:00
【问题描述】:
我正在尝试从包含多行数字和字符串的文件中读取数据并将其保存到数组中。但是,当我调用存储在该数组中的值的元素时,我得到了不正确的结果。
例如,如果我有一个包含
的文本文件1:Smith:John:3;43
2:Saget:Bob:5:55
3:Wayne:Bruce:7:21
我正在尝试将数组中第一行的对象存储在s[0] 中,第二行存储在s[1] 中,第三行存储在s[3] 中。
这是我的struct SalesPerson
struct SalesPerson {
int salesNum; // 4-digit integer
char lastName[31]; // salesperson's last name
char firstName[31]; // salesperson's first name
int salesRate; // commission level for each salesperson
double salesAmount; //amount the salesperson committed for the week
};
这是我的主要功能
#include <stdio.h>
#include <stdlib.h>
#include "sales.h"
#define SIZE 1000
int main()
{
struct SalesPerson s[SIZE];
//opening the file for reading
FILE * openRead(char salesinfo[]);
{
FILE *fp;
fp = fopen("salesinfo.txt", "r");
int i;
if(fp != NULL){
//read from the file and save it to array s
for (i=0;i<SIZE;i++){
while(!feof(fp)){
fscanf(fp, "%d:%[^:]:%[^:]:%d:%lf\n" ,&s[i].salesNum, s[i].lastName, s[i].firstName, &s[i].salesRate, &s[i].salesAmount);
}
}
fclose(fp);
}
else
printf("ERROR! Cannot open the file!\n");
}
}
如果我这样做
printf("%d\n", s[i].salesRate);
我得到了salesRate 的所有结果。
3
5
7
但是,当我尝试printf
printf("%d\n", s[1].salesRate);
我没有给我5,而是得到了错误的结果。有人可以告诉我哪里出错了吗?我的 for 循环条件不正确吗?
【问题讨论】:
-
你能提供你的整个主要功能吗?你只给出了一半的程序......
-
对不起,我现在包含了我的整个主要功能
-
请参阅
while (!feof(file))is always wrong,了解您的循环为何出错。 TL;DR — 测试fscanf()的结果;不要使用feof()。 -
struct SalesPerson是什么?它可以包含char *lastName吗? -
@SergeBallesta struct SalesPerson 有 5 条信息,我正在阅读的文本已经拥有。我试图创建一个存储这 5 条信息的数组。我会在上面的问题中发布我的结构。