如何从scanf中识别字段分隔符?

如何从scanf中识别字段分隔符?,c,scanf,C,Scanf,我需要读一个文本文件,它的名字和数字如下 rENLAg:12182 TgAlKd:19773 SSqUpz:16466 QYStPh:4113 CodNhz:28920 SgoIGz:25343 我需要将字母和数字分开。fscanf只标识空格,而不标识其他字段分隔符。因此,我该如何做呢?一种解决方案是使用扫描集(请参阅中转换说明符[set]的条目): 其中%6[^:]“表示跳过任何前导空格(例如,以前读取的新行字符),最多读取但不包括第一个:字符,但不超过6个字符(以防止缓冲区溢出).这是正确

我需要读一个文本文件,它的名字和数字如下

rENLAg:12182
TgAlKd:19773
SSqUpz:16466
QYStPh:4113
CodNhz:28920
SgoIGz:25343

我需要将字母和数字分开。fscanf只标识空格,而不标识其他字段分隔符。因此,我该如何做呢?

一种解决方案是使用扫描集(请参阅中转换说明符[set]的条目):


其中
%6[^:]“
表示跳过任何前导空格(例如,以前读取的新行字符),最多读取但不包括第一个
字符,但不超过6个字符(以防止缓冲区溢出).

这是正确使用scanf的一个很好的例子。如果字符串部分和数字也需要存储为字符串?@DesirePG,只需
%5s
(或第二部分的最大长度为-1)并使用
char[]
作为第二个参数。循环似乎只运行一次。只打印第一行。怎么了?我应该发布我的代码吗?我在一个while循环中使用上面的代码。我试图将这些代码添加到一个链表中,这是我的代码。只读取第一行。
char buf[7];
int i;
/* Check result of fscanf(), which returns the number
   of assignments made, to ensure both 'buf' and 'i'
   were assigned values. */
if (fscanf(fp, " %6[^:]:%d", buf, &i) == 2)
{
}