【问题标题】:Retrieving a char from stdin [closed]从标准输入检索字符 [关闭]
【发布时间】:2016-10-01 06:19:23
【问题描述】:

我如何从标准输入中获取字符。例如,如果标准输入是push("blah"),我想检索第三个字符/字节,即's',我将如何去做呢?我不确定是否涉及fgetc()getchar(),我想尝试避免循环,但循环是迭代它的唯一方法,我是否可以像getchar(3) 类型一样直接检索它东西?

【问题讨论】:

  • 第三个字节是's'?但是你可以做getchar(); getchar(); int c = getch(); 循环不值得。
  • push("blah")中的s
  • 我从标准输入读取,所以我也想读取推送部分
  • 您以后要检查较早的字节吗?或者您只是想丢弃任意数量的输入字节?

标签: c string file input char


【解决方案1】:

标准输入通常不可查找,因此读取它的唯一可靠方法是从头开始按顺序读取。您可以通过多种方式专门提取第三个 char 而无需循环:

int c1;
char c2;
char c3;
char buf[4];

// approach 1:
getchar(); getchar(); c1 = getchar();

// approach 2:
scanf("%*c%*c%c", &c2);

// approach 3:
fgets(buf, sizeof(buf), stdin);
c3 = buf[3];

请注意,这些是供个人使用的,而不是顺序使用的;为了便于演示,它们被一起呈现。另请注意,重要的是,在这些示例中没有执行错误/EOF 检查。在实际代码中,必须测试函数调用结果中的错误代码。第三,请注意前两个示例丢弃了两个初始字符。以后不可能让他们回来。如果您需要它们,则需要跟踪它们,例如,第三种选择允许。

【讨论】:

    【解决方案2】:

    stdin 读取时,您通常希望一次读取一行,然后使用它。

    所以首先使用fgets 读取一行,然后检查读取的内容。

    char line[100];
    fgets(line, sizeof(line), stdin);
    if ((strlen(line) > 2) && line[2] == 's') {
        printf("got s\n");
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-12
      • 1970-01-01
      • 2018-08-29
      • 2022-01-19
      • 2013-11-06
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多