我想知道如何从文本文件中读取数据,该文件的数据用逗号分隔;例如,文本文件的第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++;
}
答案 0 :(得分:2)
如果Name
包含空格,那么您使用的格式说明符将停在那里并失败,您需要
while (fscanf(ifp, "%15[^,],%d,%d",
stationName, &stationDistance, &stationDirection) == 3)
{
}
[
说明符与您在[]
中指定的字符集匹配,例如"%[0-9]"
匹配0
到9
的所有数字,{ {1}}符号告诉^
匹配不是fscanf()
所包含的字符并跟随[]
的antything,因此您匹配除^
之外的任何内容你想要的。
相比之下,,
说明符消耗所有字符,直到出现15个字符或"%15s"
中出现空格字符,这就是为什么我认为您的isspace(chr) != 0
只匹配两个这三个价值观。
您正在比较fscanf()
与fscanf()
的返回值,而不是2
,我猜是因为它返回3
而不是2
而您知道,因为否则没有输入循环,这是一件非常糟糕的事情,因为你导致了未定义的行为,因为3
可能尚未初始化这三个参数之一,您使用scanf()
复制名称并存储整数。