0

我对C完全陌生......好吧。我很了解 C++。我正在尝试为我的作业运行一个多威胁程序,其中一个要求是让用户在命令提示符下输入他的命令。基本上我要问的是,我如何设置 int main 以便它可以不断地从命令提示符获取输入(所以我可以启动新线程)而不停止,以及如何进行比较,例如用户是否按下'E ' 做这个,如果他按 F 做那个等等。我猜 argc 根本不重要,因为我不知道用户要输入多少命令。最好的解决方法是什么

4

4 回答 4

2

当程序启动时,命令行参数被传递给int main(int argc, char **argv)并且这些参数不会改变(除非程序修改它们)。

之后,程序可以从标准输入中读取命令,例如Efor 'do this' 和Ffor 'do that'。除非您采取特定于平台的步骤使其行为不同,否则输入将不会提供给您的程序,直到用户在键入命令后点击返回。

因此,如果提供了命令行参数,您可以处理它们。完成此操作后,您可能会进行交互并等待用户的更多输入。

多线程与此关系不大。您可能需要一个线程来从用户那里读取数据(否则,某人或某物会感到困惑),但是线程之间的通信是一个完全独立的问题。

于 2013-02-22T01:23:12.413 回答
2

让主线程负责 i/o。

  • 向用户打印一个提示,要求从主线程输入。

  • 将用户输入从主线程传递到工作线程。

  • 重复。

于 2013-02-22T01:23:17.250 回答
1

用户界面线程:

void *trd_func(void *p) {
  while (1) {
    int c = getchar();
    switch(c) {
        case 'E':
             set_some_flag('E');
             break;
        default: break;
    }
  }
  return 0;
}
于 2013-02-22T01:23:26.100 回答
0

如果你真的想通过做你想做的事来学习,

您应该开始寻找有关文件流和 ttys/规范输入的信息。

当您了解它的工作原理后,您将能够使用 read() 函数,并做任何您想与用户交互的事情(甚至做一个 shell)。

我可以向你保证,你会学到很多关于 I/O 文件流的有趣的东西。

但如前所述,您也可以使用 getchar()。

于 2013-02-22T01:28:27.533 回答