【问题标题】:Why is this code printing "1" for all inputs?为什么此代码为所有输入打印“1”?
【发布时间】:2017-03-02 14:33:04
【问题描述】:
#include <stdio.h>

int main(){
    char testChar;

    printf("%d\n", scanf("%c", &testChar));

    return 0;
}

我只想打印扫描的字符数。但是,当我所有的输入都具有相同的输出时,即 1.

【问题讨论】:

  • 是的,因为您扫描了 1 个字符。
  • 也许你想阅读scanf的文档。在询问之前,您应该至少进行一些小调查!

标签: c return printf return-value scanf


【解决方案1】:

scanf() 返回成功扫描的项目数。因此,在您的所有运行中,scanf() 成功,因此您的程序打印 1。

来自scanf():

成功时,这些函数返回输入项的数量 成功匹配和分配;这可能比提供的要少 在早期匹配失败的情况下,甚至为零。

如果在输入结束之前到达,则返回值 EOF 首次成功转换或发生匹配失败。 EOF 也是 如果发生读取错误,则返回,在这种情况下,错误指示符 流(参见 ferror(3))被设置,并且 errno 被设置以指示 错误。

【讨论】:

    【解决方案2】:
    scanf()  
       only scans your first character input and returns 1.
    

    【讨论】:

      【解决方案3】:

      您可以尝试打印从stdin 读取的字符数。在循环中使用scanf。

      #include <stdio.h>
      #include <stdlib.h>
      
      int
      main(void) {
          char testChar;
          int numchar = 0;
      
          printf("Enter characters, CTRL-C to end:\n");
          while (scanf("%c", &testChar) == 1) {
              numchar++;
          }
      
          printf("Number of characters scanned: %d\n", numchar);
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 2014-11-23
        • 2021-03-05
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        相关资源
        最近更新 更多