在C

时间:2015-10-03 02:17:39

标签: c

我有一个程序从文本文件中读取行并将其放入列表中。每行上的单词分类为命令(添加或删除元素),位置,产品和价格。他们总是按照这个顺序。有些线路没有价格或产品,只有命令和位置。我正确解析前几行的行,但如果文本文件缺少几个单词,例如,不告诉我们价格或产品只是命令和位置,我得到一个段错误。有没有办法让我检查文本文件中的一行是否更短,以便我只能解析那里的元素?

文本文件如下所示:

add 0 staples 2
add 1 paper 4
add 1 tape 3
add 3 paperclips 2
remove 2
remove 0

要解析的功能如下。

while (fgets (buff, 140, test))
{
    token = strtok(buff, " ");
    instructions = malloc(sizeof(char)*strlen(token)+1);
    strcpy(instructions, token);

    token = strtok(NULL, " ");
    listPosition = atoi(token);

    token = strtok(NULL, " ");
    product = malloc(sizeof(char)*strlen(token)+1);
    strcpy(product,token);

    token = strtok(NULL, " ");
    price = atoi(token);

2 个答案:

答案 0 :(得分:0)

为每一行使用分隔符。读取每一行到分隔符然后解析它。您还可以在输入中使用分隔符后使用分隔符。例如command;product;price; #

选择在您正常阅读时不会显示的分隔符。

答案 1 :(得分:0)

  1. 使用fgets函数获取行
  2. 编写一个解析函数,它需要一行并返回4个令牌(命令,位置,产品等)。您可以使用空格作为分隔符。
  3. 然后你现在知道什么是现在,什么不是