printf()中的scanf()如何工作? #包括 int main(){ int n; printf(“%d\n”,scanf(“%d”,&n)); 返回0; }
我想知道为什么这个程序的输出总是“1”?! 这里到底发生了什么?scanf()的文档说明返回值是:printf()中的scanf()如何工作? #包括 int main(){ int n; printf(“%d\n”,scanf(“%d”,&n)); 返回0; },c,printf,scanf,C,Printf,Scanf,我想知道为什么这个程序的输出总是“1”?! 这里到底发生了什么?scanf()的文档说明返回值是: 成功分配的接收参数数(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在分配第一个接收参数之前发生输入失败,则可能为EOF。 您想要的代码是: #include<stdio.h> int main(){ int n; printf("%d\n",scanf("%d",&n)); return 0; } #包括 in
成功分配的接收参数数(如果在分配第一个接收参数之前发生匹配失败,则可能为零),如果在分配第一个接收参数之前发生输入失败,则可能为EOF。
您想要的代码是:
#include<stdio.h>
int main(){
int n;
printf("%d\n",scanf("%d",&n));
return 0;
}
#包括
int main(){
int n;
scanf(“%d”和“&n”);
printf(“%d\n”,scanf(“%d”,&n));
返回0;
}
在您的程序中,scanf
成功地将某个值带入n时返回1,这就是为什么您总是从printf(“%d\n”,scanf(“%d”,&n))中得到1的原因代码>。
您应该像下面这样修改代码
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d\n",scanf("%d",&n));
return 0;
}
#包括
int main(){
int n;
scanf(“%d”和“&n”);
printf(“%d\n”,n);
返回0;
}
在
返回值
这些函数返回成功匹配和分配的输入项的数量,该数量可以少于提供的数量,如果早期匹配失败,甚至可以为零
在您的程序中,它只匹配1个输入,因此如果您输入的合法值可以匹配%d
,则函数scanf
将返回1,否则它将返回0
在您的情况下,您可能总是满足此要求,因此它总是返回1。该程序与
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d\n",n);
return 0;
}
int n;
scanf("%d", &n);
printf("%d\n", n);
在Windows上,您可能可以键入control-Z(可能后跟返回键)来生成文件结束条件。在这些情况下,scanf
应该返回,并且您的程序应该打印-1。我怀疑您想使用
myprog < /dev/null
但你写的东西相当于
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
printf("%d\n",n);
return 0;
}
int n;
scanf("%d", &n);
printf("%d\n", n);
scanf
返回成功转换的次数。
尝试将您的scanf
更改为如下所示。。。。
输入两个有效整数后,您将注意到打印2
int n;
int num = scanf("%d", &n); // num is the number of successful reads.
printf("%d\n", num);
@jishnu,这是个好问题,您得到的输出也是正确的,因为您只从标准输入(stdin
)中读取了一个值
scanf()
读取标准输入提供的值,并返回从标准输入(键盘)成功读取的值数
在C语言中,printf()
返回成功写入输出的字符数,scanf()
返回成功读取的项目数。访问并阅读更多关于它的信息
请看以下两个代码示例
请在上联机尝试以下代码。
//叮当3.8.0
scanf
返回成功转换和分配的次数。在您的情况下,您只扫描一个参数,因此scanf
将在成功时返回1
,在匹配失败时返回0
(其中第一个非空白输入字符不是十进制数字),或者在文件或错误结束时返回EOF
调用printf
时,将对其每个参数求值,并将结果传递给函数。在这种情况下,评估涉及调用scanf
函数。然后,scanf
返回的值被传递到printf
这基本上和写作一样
//clang 3.8.0
#include<stdio.h>
int main(){
int n;
printf("%d\n",scanf("%d",&n)); //1
return 0;
}
有关咯咯笑的信息,请参见当您输入abc
或键入CtrlD(或Windows上的CtrlZ)时会发生什么
请注意,printf
还返回一个值(写入流的字节数),因此您可以编写类似于
开玩笑。不要那样做。
如果您将此代码用作示例,
它显示:警告:函数“printf”的隐式声明[-Wimplicit函数声明]
printf( "num bytes printed = %d\n", printf( "num items read = %d\n", scanf( "%d", &n ) ) );
返回值:-1
诸如printf和scanf之类的函数的输出可以用作另一个函数的参数。scanf()
是一个整数返回型函数。它返回其中转换字符的总数。对于ex,如果一项声明写为:
int main()
{
char b[40];
printf(" %d", scanf("%s", b));
getchar();
}
然后该程序的输出将为3
。
这是因为scanf()。
所以在你的代码中,scanf()
返回1
到printf()
,因此程序的输出是1
。
这是因为如果在printf()
中使用多条语句,则执行顺序从右向左开始。
因此,在C
编程中,首先执行scanf()
,然后执行printf()
,scanf()
从键盘stdin()
获取输入,并返回成功读取的输入数
和printf()
返回写入显示监视器的stdout()的字符数。
在您的程序中,scanf()
只读取一个返回的输入,并由printf()
打印。因此,无论输入是什么,输出总是1,因为它只读取一个输入
下面来看看这个C程序:
int c;
c=scanf("%d %d %d");
printf("%d",c);
#包括
int main(){
int n,n2;
printf(“%d\n”,scanf(“%d%d”,&n,&n2));
返回0;
}
它使用scanf()
从stdin()
中获取输入或读取两个整数,因此输出将始终为2
**注意:如果输入不是整数,则输出为0,因为它只读取整数。scanf
从函数返回一个值:转换的项数,如手册页所示。手册页应该是您使用任何功能的第一站。您没有在手册页上阅读任何内容
int main()
{
char b[40];
printf(" %d", scanf("%s", b));
getchar();
}
int c;
c=scanf("%d %d %d");
printf("%d",c);
#include<stdio.h>
int main(){
int n, n2;
printf("%d\n",scanf("%d %d",&n,&n2));
return 0;
}