【问题标题】:Can I use scanf() function within printf() function giving a defined output?我可以在 printf() 函数中使用 scanf() 函数来给出定义的输出吗?
【发布时间】:2013-03-18 16:52:24
【问题描述】:

我可以在 printf() 函数中使用 scanf() 函数来给出定义的输出吗?如果是,请向我解释以下简单代码的输出

#include <stdio.h>
#include <conio.h>
int main()
{
  int a;
  printf("%d",scanf("%d",&a));
  return 0;
}

【问题讨论】:

  • 您希望这能做什么?注意scanf的返回值是匹配的项目数...
  • 你可以,我会解雇你,因为你将这么多最糟糕的 C 风格塞进一行......(a)它是错误的,b)如果它没有错,它显然不是正确的, c) 未能检查返回值,d) 在一行上执行多个操作。 e) WTF 是一个评论。 (注意:其中许多重叠 - 例如,评论可能有助于回答 a)和 b)。 )
  • @mattnnz 您可以尝试,但在许多司法管辖区,您会因不当解雇而败诉。您需要证明行为不当或严重无能或疏忽。我假设你在这里是在夸夸其谈。

标签: programming-languages c coding-style


【解决方案1】:

不完全是。 scanf 返回解析的项目数,但你可以这样做:

printf("%d", (scanf("%d", &a), a));

使用逗号运算符丢弃scanf 的结果并使用a 的值。

【讨论】:

  • 但是在c中,函数参数的求值顺序没有指定。那么如何确定 scanf("%d", &a) 将首先评估?
  • 逗号表达式引入了一个序列点。这是很多技术术语,但重要的是我实际上只在这里向 printf 传递了两个参数 - 格式 ("%d") 和 ascanf 的结果没有传递给 printf。
  • 是逗号运算符引入了一个序列点。但在这里我不认为它被用作运算符,而是用作分隔符。还有一个总是令人困惑的例子。无效的乐趣(f1(),f2()); /* 逗号在这里充当分隔符,不强制执行任何序列。因此,无论是 f1() 还是 f2() 都可以先调用 */
【解决方案2】:

printfscanf 只是函数。您可以像上面那样使用一个函数的输出作为另一个函数的参数。

正如@MichaelT 在他的评论中指出的那样,scanf 的返回值不是从键盘读取的值。如果你查看man page,它会说:

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

换句话说,在您的示例中,如果输入了有效整数,它将返回1,如果没有输入有效整数,则返回0

【讨论】:

    【解决方案3】:

    由于scanf 返回成功进行的转换次数,示例程序将打印10-1,具体取决于提供的输入(1 如果开始的输入可转换为整数,0 用于非整数输入,-1 用于输入错误)。

    【讨论】:

      【解决方案4】:

      通俗易懂

      在 C 语言中,printf() 返回成功写入输出的字符数,scanf() 返回成功读取的项目数。

      例如,下面的程序打印 akp 3

      int main()
      {
        printf(" %d", printf("%s", "akp"));
        getchar();
      }  
      

      无论用户输入什么字符串,下面的程序都会打印 1。

      int main()
      {
        char a[50];  
        printf(" %d", scanf("%s", a));
        getchar();
      }  
      

      【讨论】:

        【解决方案5】:

        其实可以使用 printf() 来输出函数的返回值。

        #include <stdio.h>
        #include <conio.h>
        int main()
        {
          int a;
          printf("%d",scanf("%d",&a));
          return 0;
        }
        

        如果你输入一个数字。输出1,表示scanf()函数执行成功,返回值为1。


        如果你输入一个字母。它会输出 0。这意味着函数指令的执行失败:这个条件是匹配失败。返回值为0。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-17
          • 1970-01-01
          • 1970-01-01
          • 2018-04-27
          • 2018-03-04
          • 1970-01-01
          • 2023-03-10
          • 2020-05-13
          相关资源
          最近更新 更多