2015-05-12 126 views
0

中的一个结构中想知道如何将用户输入的字符串以“字符串,字符,整数,整数”格式 存储到结构中。 例如存储“苹果,C,5,10”到将输入字符串存储到C

typedef struct { 
char item[80]; 
char letter; 
int x,y; 
}information; 

information apple; 

我试图避免要通过使用scanf函数和长一段代码,使逗号为分隔符所以不知道是否有任何其他的方式,迅速从scanf函数读取和夹紧此信息到结构

+0

C为低电平语言,并且通常不像Python和其他类型那样安全。你必须以艰难的方式去做,否则你的生活将会因为数据验证,缓冲区溢出等错误的机会而变得悲惨。 – pedwards

回答

4

可以使用scanf,像指定复杂的格式:

scanf("%79[^,],%c,%d,%d", apple.item, &apple.letter, &apple.x, &apple.y); 

%79[^,]意味着扫描任何不是一个逗号,最多79个字符。

请注意,如果用户输入格式不正确的字符串(如"aaa;b;1;2"),则不会执行错误处理。为此,您需要编写更多的代码。见strtok

1

您可以在格式字符串中使用多个格式说明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" 
} 

不过,我会建议很长的路要走,像

  • 读取使用strtok(),作为分隔符
  • 使用令牌使用fgets()
  • 记号化线(或使用strtol()转换, 按要求)。

非常安全和健壮。

相关问题