我的任务是从txt文件中获取输入,并将其读入结构数组的一部分,然后对其进行操作,但我在读取该文件时遇到了问题。
我的结构如下:
typedef struct Employee
{
char first[7], initial, last[9], street[16], city[11], state[2], zip[5];
int age;
char sex;
int tenure;
float salary;
} Employee;
在我的主要观点中:我定义最大值为100
FILE *payfile;
Employee worker[MAX];
int i = 0, num;
float average;
payfile = fopen("payfile.txt","r");
while(!feof(payfile))
{
fscanf(payfile,"%s %c %s %s %s %s %s %d %c %d %f",
worker[i].first,&worker[i].initial,worker[i].last,worker[i].street,
worker[i].city,worker[i].state,worker[i].zip,&worker[i].age,&worker[i].sex,
&worker[i].tenure,&worker[i].salary);
i++;
}
下面是我们要读取的txt文件:
ADA A AGUSTA 33 BABBAGE ROAD LOVELACE GB 19569 28 F 2 350.50
ISSAC A ASIMOV 99 FICTION WAY AMHERST MA 63948 58 M 6 423.88
HUMPHRY R BOGART 71 SAM STREET HOLLYWOOD CA 48482 56 M 5 366.00
ALBERT G EINSTEIN 94 ENERGY WAY PRINCETON NJ 47474 67 M 8 780.00
EMMYLOU L HARRIS 66 COUNTRY ROAD NASHVILLE TN 72647 38 F 2 767.42
JAMES T KIRK 11 SPACE STREET VULCAN CA 82828 46 M 1 235.70
TED L KOPPEL 55 ABC PLACE WASHINGTON DC 37376 48 M 9 909.44
DAVID T LETTERMAN 14 WNBC AVENUE NEW YORK NY 19338 47 M 5 445.65
STEVIE R NICKS 31 MUSIC ROAD CHICAGO IL 23459 38 F 8 460.88
MONTY P PYTHON 76 SILLY STREET LONDON GB 80939 44 M 2 320.50
ROGER R RABBIT 15 LOONEY TOONS HOLLYWOOD CA 91343 24 M 4 259.53
SALLY W RIDE 21 COLUMBIA WAY HOUSTON TX 91123 30 F 9 707.80
ROD Q SERLING 11 TWLIGHT ZONE SAN DIEGO CA 93939 56 M 1 440.00
LUKE R SKYWALKER 43 MILKY WAY NEW YORK NY 12343 35 M 5 660.00
所以我在fscanf的准确性方面遇到了一些问题。要检查worker包含的内容,我使用了printf(“%s”,worker[0]。first)和printf(“%c”,worker[0]。initial)。。。等
当我扫描第一行中的第一个字符串时,我得到ADA,然后扫描空白,得到下一个char,A。到目前为止很好。然后我扫描空白,并获取下一个字符串,返回AGUSTA。但是现在我遇到了这个问题。我需要让33 BABBAGE ROAD进入工人[0]. street,但是将参数"%s"更改为"c"不起作用。相反,它包括城市的一部分。
我做错了什么?我应该改变什么来正确地扫描相应的代码行?
谢谢
您可以将中的街道作为一系列字符串读取,即%s%s%s。然后将它们与strcat()连接成一个字符串。
这不是一个通用的解决方案,因为超过3个单词的街道(例如“19 N第三街”)将失败。但我想这对你的任务来说已经足够了。在实际应用程序中,字段将用某种分隔符分隔,通常是逗号(请参见.csv)。既然你的申请表中似乎不存在这种情况,就这样做,然后告诉你的老师将来给你更好的作业。
char first[7], initial, last[9], street[16], city[11], state[2], zip[5];
如果要使用字符串(C字符串)读取,则字符大小(包括EOS)不够。
改为
typedef struct Employee {
char first[8], initial, last[10], street[17], city[12], state[3], zip[6];
int age;
char sex;
int tenure;
float salary;
} Employee;
控制字符%s
在以空格分隔的scanf读取中,指定读取大小和未读字符,例如如下所示。
while(EOF!=fscanf(payfile,"%7s %c %9s %16[^\n] %11[^\n] %2s %5s %d %c %d %f",
worker[i].first,&worker[i].initial,worker[i].last,worker[i].street,
worker[i].city,worker[i].state,worker[i].zip,&worker[i].age,&worker[i].sex,
&worker[i].tenure,&worker[i].salary))
{
i++;
}
如果尾随空格不需要,则可以删除。
我希望你帮助我理解我应该如何做以下事情: 我有一个包含由空格“”分隔的整数的文件。我需要读取所有整数,对它们进行排序,并将它们作为字符串写入另一个文件。我写了一个代码,但是我一个字符一个字符地读,把这个单词放在一个字符子数组[Max_Int]中,当我遇到“”时,我把这些字符,现在是一个字符串,在原子化后放到另一个主Int数组中,直到到达文件的末尾,一个字符串接一个字符串,然后我对它们进行排序并将它
我正试图编写一个程序,读取网络中相互交互的节点列表。它以以下格式写入文本文件: 这表示节点1与节点2和节点3交互,节点2仅与节点3交互,等等。 该程序将能够读取该文件,并将删除任何重复的交互,并且如果我输入节点的名称,将能够向我返回节点与其他节点的交互次数。然而,我对Java非常陌生,我首先尝试让它读入文件,尽管我的代码目前没有读入文件。以下是我迄今为止的代码: 任何关于如何解决此问题的帮助都将不
我的项目中有这样一段代码: 没有错误,应用程序运行正常,但是变量中从来没有任何文本,我确信txt文件中有文本! 我已经尝试过不同的方法来读取文本文件(使用BufferedReader、Scanner、FileInputStream和FileReader),但都不起作用。 另外,我几乎可以肯定问题不在变量中,因为我尝试通过代码(使用运行时)打开文件,它正常打开了正确的文件。 好的,我尝试添加,但是仍
所以,我试图让我的程序从文本文件中读入一个结构数组,它编译得很好,但看起来并没有真正读入值?...我不知道为什么。这是代码的相关部分: 这是txt文件(标题:Planets.txt) 水星120 50 500 12.1 30 2金星120 50 500 29.1 30 6地球120 50 500 32.2 30 7月亮120 15 50 5.3 30 2火星120 50 500 12.2 30 4
我正在编写一个程序,使用一个文件中的30个分数,计算出最低、最高和平均分数。我很难理解如何编写循环语句来读取每个等级并更新最低/最高等级,并在读取下一个等级之前将该值添加到总和。 谢谢想出来了:
问题内容: 我正在研究一个Java程序,该程序逐行读取文本文件,每个文本文件都有一个数字,将每个数字都将其扔到数组中,然后尝试使用插入排序对数组进行排序。我需要有关程序读取文本文件的帮助。 我收到以下错误消息: 我的“ src”,“ bin”和主项目文件夹中有.txt文件的副本,但仍找不到该文件。我正在使用Eclipse。 问题答案: 你必须把文件扩展名放在这里