在if或while条件下调用scanf时,scanf如何工作?
我看过这段代码,我想知道它是如何工作的在if或while条件下调用scanf时,scanf如何工作?,c,C,我看过这段代码,我想知道它是如何工作的if(scanf)和while(scanf) 此程序正在检查最大数字,直到没有输入任何数字。我想知道它怎么知道什么时候输入了一个数字,什么时候没有,因为我们有if和while。如果我们输入数字,那么while是否返回If或 例如: #include <stdio.h> int main(void){ int variable,max; if (scanf("%d", &variable)){ whil
if(scanf)
和while(scanf)
此程序正在检查最大数字,直到没有输入任何数字。我想知道它怎么知道什么时候输入了一个数字,什么时候没有,因为我们有if
和while
。如果我们输入数字,那么while是否返回If或
例如:
#include <stdio.h>
int main(void){
int variable,max;
if (scanf("%d", &variable)){
while (scanf("%d", &max)){
if (variable > max){
max=variable;
}
}
printf("Maximum: %d\n", max);
}
else {
printf("Is not an number\n");
}
return 0;
}
#包括
内部主(空){
int变量,最大值;
if(scanf(“%d”,变量(&V)){
而(扫描频率(“%d”和最大值)){
如果(变量>最大值){
max=变量;
}
}
printf(“最大值:%d\n”,最大值);
}
否则{
printf(“不是一个数字\n”);
}
返回0;
}
在if或while条件下调用时,scanf
如何工作
scanf
返回匹配的项目数,这是正确使用scanf
的关键信息
我们经常看到这样的代码:
printf("enter the number of numbers: ");
scanf("%d", &n);
printf("now enter the numbers:\n");
for(i = 0; i < n; i++)
scanf("%d", &array[i]);
printf("enter the number of numbers: ");
if(scanf("%d", &n) == 1) {
printf("now enter the numbers:\n");
for(i = 0; i < n; i++) {
if(scanf("%d", &array[i]) != 1) break;
}
}
现在,如果对scanf
的任何调用失败,程序将无法继续
还有一件事。发布的代码有如下行
if (scanf("%d", &variable)) ...
及
尽管它们遵循规则,并检查scanf
的返回值,但它们仍然很差,因为scanf
的返回值实际上是匹配的项目数,或EOF
。但由于EOF
是负值(不是0),如果输入流到达文件末尾,则发布的代码将错误地继续
关于“代码> SCANF返回值的观点更清楚,请考虑调用< /P>
scanf("%d %d", &a, &b);
实际上有四个可能的返回值:
2.a
和b
均正确填写1:
a
已填写,但随后出现了一些错误,b
未填写(可能输入为“1 x”)0:马上出现了问题,没有填写
a
或b
(可能输入的是“x y”)EOF:
scanf
在读取a
或b
在if或while条件下调用时,scanf
如何工作
scanf
返回匹配的项目数,这是正确使用scanf
的关键信息
我们经常看到这样的代码:
printf("enter the number of numbers: ");
scanf("%d", &n);
printf("now enter the numbers:\n");
for(i = 0; i < n; i++)
scanf("%d", &array[i]);
printf("enter the number of numbers: ");
if(scanf("%d", &n) == 1) {
printf("now enter the numbers:\n");
for(i = 0; i < n; i++) {
if(scanf("%d", &array[i]) != 1) break;
}
}
现在,如果对scanf
的任何调用失败,程序将无法继续
还有一件事。发布的代码有如下行
if (scanf("%d", &variable)) ...
及
尽管它们遵循规则,并检查scanf
的返回值,但它们仍然很差,因为scanf
的返回值实际上是匹配的项目数,或EOF
。但由于EOF
是负值(不是0),如果输入流到达文件末尾,则发布的代码将错误地继续
关于“代码> SCANF返回值的观点更清楚,请考虑调用< /P>
scanf("%d %d", &a, &b);
实际上有四个可能的返回值:
2.a
和b
均正确填写1:
a
已填写,但随后出现了一些错误,b
未填写(可能输入为“1 x”)0:马上出现了问题,没有填写
a
或b
(可能输入的是“x y”)EOF:
scanf
在读取a
或b
的任何字符之前到达文件末尾,scanf
函数系列返回成功扫描的项目数。是时候阅读手册页了?如果未输入整数,则返回0
。此代码不会首先编译scanf(“%d,&variable)
-->scanf(“%d,&variable)
if(scanf(“%d,&variable)){
是弱代码,因为它在文件末尾是正确的。建议if(scanf(“%d,&variable)==1){
此代码是错误的。scanf
并不是作者当时真正想做的。他们反复扫描一个新的max
,将其与变量
进行比较,可能会更新max
,然后扔掉它去读一个新的max
。可能他们想扫描变量
,可能会更新max
JonathanLeffler说得很好。scanf
函数族返回成功扫描的项目数。阅读手册页的时间到了吗?如果没有输入整数,则返回0
。此代码首先不会编译。scanf(“%d,&variable)
-->scanf(“%d,&variable)
if(scanf(“%d”)和variable)){
是弱代码,因为它在文件末尾是真的。建议if(scanf(“%d”)和variable)==1{
此代码是错误的。scanf(“%d”和max)
并不是作者当时真正想做的。他们反复扫描一个新的max
,将其与变量
进行比较,可能会更新max
,然后扔掉它去读一个新的max
。可能他们想扫描变量
,可能会更新max
它们保持而不是丢弃。@JonathanLeffler的观点很好。while(scanf(“%d”)和&var)==1)
比while(scanf(“%d”)和&var)!=EOF)更简单。
?是的。如果你写while(scanf(“%d”、&var)!=EOF)
,如果输入包含像x这样的非数字字符,它将进入无限循环(scanf(“%d”、&var)==1)
比while(scanf(“%d”、&var)!=EOF)更简单。
?是。如果编写while(scanf(“%d”、&var)!=EOF)
,如果输入包含像x这样的非数字字符,它将进入无限循环。