【问题标题】:put information into a list. C将信息放入列表中。 C
【发布时间】:2021-01-15 12:58:30
【问题描述】:

我正在编写一个 C 程序,我正在将一堆数据从 txt.file 读取到结构列表中。刚刚有人告诉我,我们不能从另一个文件中读取数据,所有数据都应该包含在一个 c 文件中。有什么办法不用一一硬编码就可以创建列表吗?

我的部分数据如下:

.
period
?
Question Mark
!
Point
-
Dash
/
slash
+=
Plus equal
>=
greater than or equal

我想把它们放在下面的列表中,除了逐行做,有没有更好的方法来构建这个长列表?

typedef struct info
{
   char ch[10];
   char name[50];
}INFO;

int main(int argc, char* argv[])
{
    INFO list[50];
    strcpy(list[0].ch,".");
    strcpy(list[0].name,"period");
   ..... 
}


【问题讨论】:

  • 嗨,也许是在循环中逐行读取文件?
  • @IronMan 您的评论给人的印象是您没有阅读该问题。 “我们无法从另一个文件中读取数据”
  • @JanezKuhar 我被要求不使用 FILE IO,所以我想知道是否有其他方法可以做到这一点
  • 问题自相矛盾:“我从一个txt.file中读取了一堆数据”
  • 您总是可以使用char data[] = ".\nperiod\n..." 并像从文件中读取缓冲区一样解析缓冲区。不知道这比“一个一个地硬编码”更好。

标签: c list struct


【解决方案1】:

只要你有一个可以处理正则表达式的编辑器,通过一些搜索和替换操作将文本文件转换为 C 代码应该不会太难。

或者您甚至可以编写一个 C 程序来为您进行这种转换。可能是这样的:

int main() {
    FILE *f = fopen("file.txt", "r");
    char ch[10], name[50];
    int i = 0;
    
    puts("INFO list[] = {");
    while (1) {
        if (fscanf(f, "%[^\n] ", ch) != 1 || fscanf(f, "%[^\n] ", name) != 1) {
            break;
        }
        printf("    { \"%s\", \"%s\" },\n", ch, name);
        i++;
    }
    printf("};\n\n#define LIST_LENGTH  %d\n", i);
    return 0;
}

假设您在上面提供的数据包含在一个名为 file.txt 的文件中,这应该输出以下内容:

INFO list[] = {
    { ".", "period" },
    { "?", "Question Mark" },
    { "!", "Point" },
    { "-", "Dash" },
    { "/", "slash" },
    { "+=", "Plus equal" },
    { ">=", "greater than or equal" },
};

#define LIST_LENGTH  7

【讨论】:

  • 我试过这种方式,但它显示initializer-string for char array is too long,初始化数组有限制吗?
  • @AKu 您的数据中可能有一行超出符号 (10) 或符号描述 (50) 字符限制。
  • @AKu 我建议您通过将结构内容更改为char *ch; char *name; 而不是指定数组长度来让自己的生活更轻松。字符串将存储为const char*,但我假设您不打算修改它们。
  • @r3mainer 但这确实使内存分配不那么连续,不是吗?
  • @JanezKuhar 这有关系吗?
猜你喜欢
  • 1970-01-01
  • 2023-02-07
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多