中的一个结构中想知道如何将用户输入的字符串以“字符串,字符,整数,整数”格式 存储到结构中。 例如存储“苹果,C,5,10”到将输入字符串存储到C
typedef struct {
char item[80];
char letter;
int x,y;
}information;
information apple;
我试图避免要通过使用scanf函数和长一段代码,使逗号为分隔符所以不知道是否有任何其他的方式,迅速从scanf函数读取和夹紧此信息到结构
中的一个结构中想知道如何将用户输入的字符串以“字符串,字符,整数,整数”格式 存储到结构中。 例如存储“苹果,C,5,10”到将输入字符串存储到C
typedef struct {
char item[80];
char letter;
int x,y;
}information;
information apple;
我试图避免要通过使用scanf函数和长一段代码,使逗号为分隔符所以不知道是否有任何其他的方式,迅速从scanf函数读取和夹紧此信息到结构
可以使用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() failed\n");
//do something to avoid usage of the member variables of "apple"
}
不过,我会建议很长的路要走,像
非常安全和健壮。
尝试使用FUNC read()
然后读刚刚拆分使用strtok()
这里字符串的一些参考:
C为低电平语言,并且通常不像Python和其他类型那样安全。你必须以艰难的方式去做,否则你的生活将会因为数据验证,缓冲区溢出等错误的机会而变得悲惨。 – pedwards