0

在我的应用程序中,我试图实现这样的目标:

我有:

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

流动:

  1. 用一些参数启动程序并将数据0写入stdin
  2. 程序根据传入的数据“data 0”和参数进行计算
  3. “等待”新标准输入和(清除旧标准输入、缓冲区和变量?)
  4. 当我输入数据 1、数据 2 时重复 1 ~2 ... 以此类推
  5. 当到达数据 n 时,终止(或者如果我向标准输入输入一个中止代码,告诉程序终止)。

也许是这样的?(伪代码):

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

还是他们更好的方法?

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

4

1 回答 1

1

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

默认情况下,标准输入应该是阻塞的,所以你的“等待”标准应该自动处理。

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

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() 以确保正确使用该接口;我不确定我在上面的代码中的使用是否与您想要/需要代码执行的操作一致。

于 2012-02-06T09:26:04.553 回答