1

我们被分配了一项任务,涉及从文件中获取信息并将数据存储在数组中。文件中的数据排序如下

纽约 40 43 N 74 01 W

前 20 个字符是城市名称,后跟纬度和经度。纬度和经度应该很容易用一些

fscanf(infile, "%d(%c取决于我得到哪一个)", pointer)

操作,因此它们不会成为问题。

我的问题是我不知道如何收集城市名称的字符串,因为一些城市名称有空格。我读了一些关于使用分隔符的内容,但从我读到的内容来看,它似乎更多地用于阅读整行。有没有办法从文件中读取城市名称并将整个名称与空格一起存储在字符数组中?谢谢。

4

7 回答 7

1

这里有一个提示:用空格作为唯一的分隔符,你如何分辨fscanf()城市名称和纬度的开始?您正在接近您的“似乎更多地用于阅读整行”。探索,也许与fgets()

于 2009-11-10T18:18:27.587 回答
0

天,

当您扫描到第一个数字(纬度)时,您的城市名称可能会扫描第一个项目的非数字?

于 2009-11-10T18:19:30.713 回答
0

如果您的城市名称中有空格,则需要使用分隔符或将城市名称字段定义为固定长度。否则尝试解析三个单词的城市名称,例如“Salt Lake City”,将杀死下一个字段。

于 2009-11-10T18:31:57.257 回答
0

只是一个提示:读取内存中的整行,然后取前 20 个字符作为城市名称,下一个,比如 10 个字符作为纬度,依此类推。

于 2009-11-10T18:33:21.607 回答
0

您可以指定%c将收集指定大小的字符块的大小。在您的情况下,如果城市名称的长度为 20 个字符,则%20c放在scanf.

然后你必须把终结符放在最后并修剪字符串。

于 2009-11-10T18:34:08.663 回答
0

来自“男人 fgets”:

char *fgets(char *s, int size, FILE *stream);

fgets() 从流中最多读入一个小于 size 的字符,并将它们存储到 s 指向的缓冲区中。在 EOF 或换行符后停止读取。如果读取了换行符,则将其存储到缓冲区中。'\0' 存储在缓冲区中的最后一个字符之后。

fgets() 成功时返回 s,错误时返回 NULL,或者在未读取任何字符时出现文件结尾。

这意味着您需要一个 21 个字符的 char 数组来存储一个 20 个字符的字符串(第 21 个字符将是末尾的 '\0' 分隔符,fgets 会自动放置它)。

祝你好运!

于 2009-11-10T18:40:42.923 回答
0

scanf()可以通过说明符使用有限数量的字符"%c"

注意它不会添加终止空字节。

char cityname[21];
scanf("%20c%d%d %c%d%d %c", cityname,
      &lat1, &lat2, &lat_letter,
      &lon1, &lon2, &lon_letter);
cityname[20] = 0;

但是你最好fgets()“手动”使用和解析字符串。否则,您将遇到 END-OF-LINE 问题

于 2009-11-10T18:41:18.703 回答