我想知道如何从文本文件中读取数据,其数据由逗号分隔;例如,文本文件的第1行说:(名字,整数,整数)。
所以我试着用这段代码来读取代码,但它没有工作:
while (fscanf(ifp, "%15s,%d,%d", stationName, &stationDistance, &stationDirection ) == 2) {
strcpy(q[fileCounter].name, stationName);
q[fileCounter].distance = stationDistance;
q[fileCounter].direction = stationDirection;
printf ("Station Name: %s t Distance to Central: %d t Direction from Central: %d n", q[fileCounter].name, q[fileCounter].distance, q[fileCounter].direction);
fileCounter++;
}
如果Name
包含空格,那么您正在使用的格式说明符将停在那里并失败,您将需要
while (fscanf(ifp, "%15[^,],%d,%d",
stationName, &stationDistance, &stationDirection) == 3)
{
}
[
说明符匹配您在[]
中指定的字符集,例如"%[0-9]"
匹配从0
到9
的所有数字,^
符号告诉fscanf()
匹配任何不是[]
所包含的字符并跟随^
,所以您正在匹配除了,
之外的任何东西,这是您想要的。
相比之下,"%15s"
说明符消耗所有字符,直到出现15个字符或isspace(chr) != 0
中出现的空白字符,这就是为什么我认为您的fscanf()
只匹配三个值中的两个。
你正在比较fscanf()
的返回值与2
而不是3
,我猜是因为它返回的是2
而不是3
,你知道,因为否则没有进入循环,那么这是一件非常糟糕的事情,因为你正在导致未定义的行为,因为三个参数中的一个可能还没有被scanf()
初始化,你复制strcpy()
的名称并存储整数。