【问题标题】:Storing a string of inputs into a struct in C将输入字符串存储到C中的结构中
【发布时间】:2015-05-12 12:52:12
【问题描述】:

想知道如何以“字符串、字符、整数、整数”格式存储用户输入的字符串 成一个结构。 例如将“apple,c,5,10”存入

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

information apple;

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

【问题讨论】:

  • C 是一种低级语言,通常不像 Python 和许多其他语言那样类型安全。你必须以艰难的方式去做,否则你的生活会很痛苦,因为可能会出现数据验证、缓冲区溢出等错误。:(

标签: c string struct user-input scanf


【解决方案1】:

您可以使用scanf 指定复杂格式,例如:

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

%79[^,] 表示扫描任何非逗号字符,最多 79 个字符。

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

【讨论】:

    【解决方案2】:

    您可以在scanf() 格式字符串中使用多个格式说明符一次扫描所有输入,通过逗号分隔用户输入,如 p>

    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"
    } 
    

    不过,我会推荐很长的路,比如

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

    非常安全和强大。

    【讨论】:

      【解决方案3】:

      尝试使用函数read() 读取,然后使用strtok() 拆分字符串

      这里有一些参考:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 2015-07-27
        • 2018-08-27
        相关资源
        最近更新 更多