我可以在 printf() 函数中使用 scanf() 函数来给出定义的输出吗?如果是,请向我解释以下简单代码的输出:
#include <stdio.h>
#include <conio.h>
int main()
{
int a;
printf("%d",scanf("%d",&a));
return 0;
}
我可以在 printf() 函数中使用 scanf() 函数来给出定义的输出吗?如果是,请向我解释以下简单代码的输出:
#include <stdio.h>
#include <conio.h>
int main()
{
int a;
printf("%d",scanf("%d",&a));
return 0;
}
不完全是。scanf
返回解析的项目数,但您可以这样做:
printf("%d", (scanf("%d", &a), a));
使用逗号运算符丢弃结果scanf
并改用 a 的值。
printf
并且scanf
只是功能。您可以像上面那样使用一个函数的输出作为另一个函数的参数。
正如@MichaelT 在他的评论中指出的那样,返回值不是scanf
从键盘读取的值。如果您检查手册页,它会显示:
这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。
换句话说,在您的示例中1
,如果输入了有效整数,或者0
没有输入有效整数,它将返回 。
scanf
返回成功进行的转换次数,示例程序将打印 a 1
, a0
或 a ,具体-1
取决于提供的输入(1
如果输入的开头可转换为整数,0
对于非整数输入,-1
对于输入错误)。
易于理解
在 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();
}
实际上,您可以使用 printf() 来输出函数的返回值。
#include <stdio.h>
#include <conio.h>
int main()
{
int a;
printf("%d",scanf("%d",&a));
return 0;
}
如果你输入一个数字。输出1,表示scanf()函数执行成功,返回值为1。
如果你输入一个字母。它会输出 0。这意味着函数指令的执行失败:这个条件是匹配失败。返回值为 0。