Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在if或while条件下调用scanf时,scanf如何工作?_C - Fatal编程技术网

在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这样的非数字字符,它将进入无限循环。