想知道如何将用户输入的字符串存储在格式"字符串,字符,整数,整数"中进入结构。例如将"苹果,C,5,10"存储到
中typedef struct {
char item[80];
char letter;
int x,y;
}information;
information apple;
我试图避免使用SCANF和一条长的代码将逗号变成定界线,因此想知道是否还有其他方法可以快速从SCANF阅读并将这些信息插入struct
您可以使用scanf
指定复杂格式,例如:
scanf("%79[^,],%c,%d,%d", apple.item, &apple.letter, &apple.x, &apple.y);
%79[^,]
表示扫描任何不是逗号字符的东西,最多79个字符。
请注意,如果用户输入一个格式较差的字符串,例如"aaa;b;1;2"
,则不会处理错误。为此,您需要编写更多代码。请参阅strtok
您可以使用格式字符串中的多个格式指定器来 scanf()
,以一次扫描所有输入 用户输入,例如
int ret = -1;
if ((ret = scanf("%79[^,],%c,%d,%d", apple.item, &apple.letter, &apple.x, &apple.y)) != 4)
//always check the return value of scanf()
{
printf("scanf() failedn");
//do something to avoid usage of the member variables of "apple"
}
但是,我会推荐 long Way ,例如
- 使用
fgets()
读取行 - 使用
strtok()
和,
作为分界符 - 使用令牌(或根据需要使用
strtol()
转换)。
尝试使用func read()
读取,然后使用 strtok()
以下是一些参考:
strtok:http://man7.org/linux/man-pages/man3/strtok.3.html
阅读:http://linux.die.net/man/2/read