c等待stdin读?

时间:2012-02-06 08:09:51

标签: c while-loop stdin wait flow

在我的应用程序中,我正在努力实现这样的目标:

我有:

  • 数据0,数据1,数据2,...数据n。
  • 要传递的一些参数

流量:

  1. 使用一些参数启动程序并将数据0写入stdin
  2. 程序根据传递的数据“data 0”和参数
  3. 进行计算
  4. “等待”新的stdin和(清除旧的stdin,缓冲区和变量?)
  5. 当我输入数据1,数据2 ......等等时重复1~2
  6. 当到达数据n时,终止(或者如果我输入中止代码到stdin告诉程序终止)。
  7. 也许是这样的?(伪代码):

    int main(int argc, char *argv[])
    {
    get parameters();
    int fslen = data size
    char *c = (char *)malloc(fslen);
    fgets(c, fslen, stdin);
    
    while((c != null) || (c != Terminate code?))
    {       
        do calculations with int c;
        clear c;
    }
    return 0;
    }
    

    或者他们是一个更好的方法?

    或以这种方式做事是不好的做法? 如果是的话,请解释

1 个答案:

答案 0 :(得分:1)

至少据我所知,读取和解析行输入并没有比读取和解析行输入更好的方法。

默认情况下,stdin应该是阻塞的,因此应该自动处理“等待”标准。

但是,如果您要阅读行,然后解析代码行,您将需要两个循环:

int main(int argc, char *argv[])
{
    /* initial parameter/buffer setup goes here */

    while (fgets(buffer, bufferlen, stdin)) {
        for (c = buffer; *c != '\0' && *c != terminatingcode; c++) {
            /* calculations go here! ... they sure do! </homer> */
        }
        if (*c == terminatingcode || ferror(stdin))
           break;
    }
}

请注意fgets()可能会因为完全无辜的原因而“失败”,您需要熟悉feof()和ferror()以确保正确使用界面;我不确定我在上面代码中的使用是否与您想要/需要代码的内容一致。