c - 可选择从 C 语言的 STDIN 读取

标签 c

我的应用程序基本上是一个 shell,它需要 cmd [x] 类型的输入,其中 cmd 是常量,x 是可选的。所以 cmd 1cmd 本身都是合法的 - 然后我假设 x 的默认参数。

我正在这样做:

char cmd[64];
scanf("%s", cmd);
int arg;
scanf("%d", &arg); // but this should be optional

如果提示中当前没有可用的整数参数,如何读取整数参数并将其设置为默认值?如果原始命令中没有给出额外的输入,我不希望提示等待。

我使用 fgetc()getchar() 尝试了多个版本,并将它们与 EOF 进行比较,但无济于事。我尝试的每个版本最终都会等待该可选的整数参数。

最佳答案

简单的方法:

   char b[73]; //powers of 2 magic is evil.
    if(fgets(b,sizeof b,stdin) != NULL) {
      char cmd[59]; //59, no command will ever be > 58. Ever I say.
      int arg;
      if(sscanf(b,"%58s %d",cmd,&arg) == 2) {
         //handle cmd and arg
      } else if(sscanf(b,"%58s",cmd) == 1) {
         //handle cmd only
      } else {
       // :-/
      }
    }

关于c - 可选择从 C 语言的 STDIN 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663559/

相关文章:

c - Raspberry Pi 3 PWM LED 脉冲

C/D画线包

c - glibc中printf()的跟踪代码

Java Base64 编码给出与 C base64 编码不同的结果

c - 搜索并打印目录的所有文件和子文件夹

c - C 中最快的去交织操作?

c - 代码使用的是什么 C 语法?

c++ - 我可以用 C 包装 OpenCV 的 C++ 接口(interface),然后用 Lisp 的 CFFI 包装它吗?

c - 在 C 中从一个特定字符到另一个字符的文件读取

c - 在 C 中通过梯形规则积分