将一串输入存储到C中的结构中

时间:2015-05-12 12:52:13

标签: c string struct user-input scanf

想知道我如何能够以#34;字符串,字符,整数,整数"格式存储用户输入的字符串。 成为一个结构。 例如存储" apple,c,5,10"成

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

information apple;

我试图避免使用scanf和一长段代码将逗号变成分隔符,因此想知道是否有其他方法可以快速读取scanf并将此信息放入结构中

3 个答案:

答案 0 :(得分:4)

您可以使用 select ( CASE WHEN COUNT(`id`) <= 0 THEN 1 WHEN COUNT(`id`) > 0 THEN MAX(id) END) AS nextId from students; 指定复杂格式,例如:

app.delete('/api/MyApp/:my_json_key_1', controller.functionOne);
app.delete('/api/MyApp/:my_json_key_2', controller.functionTwo);

scanf表示扫描任何不是逗号字符的内容,最多79个字符。

请注意,如果用户输入格式不正确的字符串(例如scanf("%79[^,],%c,%d,%d", apple.item, &apple.letter, &apple.x, &apple.y); ),则不会进行错误处理。为此,您需要编写更多代码。见%79[^,]

答案 1 :(得分: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"
} 

但是,我建议使用 long way ,例如

  • 使用fgets()
  • 读取该行
  • 使用strtok(),作为分隔符
  • 进行标记
  • 根据需要使用令牌(或使用strtol()转换)。

安全可靠。

答案 2 :(得分:0)

尝试使用func read()阅读,然后使用strtok()分割字符串

这里有一些参考资料:

strtok:http://man7.org/linux/man-pages/man3/strtok.3.html

阅读:http://linux.die.net/man/2/read