我对c编程有一些经验,但有时一些书的作者只是提出了一些奇怪的句法问题,我们永远不会在实际编程中使用它,类似于我坚持一个这样的问题虽然给出了答案,但我是无法理解答案。这是下面的代码
int main
{
int i;
for(;scanf("%d",&i);printf("%d",i)){
;
}
}
问题是这个for循环运行多少次,给出的答案是无限期的 任何人都可以解释循环将如何执行
答案 0 :(得分:6)
scanf
返回成功读取的元素数,在这种情况下,如果它读取整数并继续打印它将为1。
我们假设您在此处传递了一个字符,然后scanf()
失败并退出for
循环
答案 1 :(得分:3)
Scanf将返回成功输入get的号码。如果正确输入输入,则条件为真,因此它将继续以无限期运行。
要使条件为假,您可以输入除整数值以外的输入。那个时间scanf将返回零。所以循环结束。
答案 2 :(得分:2)
在这里,无限期意味着它无法定义(未知),它并不意味着无限(只是为了清除事物)。因为,这里循环运行的次数取决于给定的输入。如果给出了正确的输入,这是一个整数,则循环继续运行。如果给出了错误的输入,即非整数,则控制跳出循环。因此,您无法针对所有情况获得单一答案,因此它是无限期的。
答案 3 :(得分:1)
没有。这不是一个无限的for
循环。
根据for
循环的语法,来自n1256 TC3 C99的第6.8.5.3节
( 子句-1 ; 表达式-2 ; 表达式-3 ) 声明
表现如下:表达式表达式-2是控制表达式 在每次执行循环体之前进行评估....
在您的情况下, expression-2 为scanf("%d",&i)
,并且scanf()
的返回值将被视为 expression-2 的评估
根据scanf()
返回值
...返回成功匹配和分配的输入项的数量,可以少于提供的数量,或者在早期匹配失败的情况下甚至为零。
所以,在你的情况下,
直到时间scanf()
成功,它将number of input items
successfully matched
,即1
和TRUE
值,for
循环
将继续执行。
如果scanf()
失败[例如:输入char
值],则返回
scanf()
的值将为0
[匹配失败],循环将为
终止。
答案 4 :(得分:0)
接受回答后
是的,这可能是一个无限循环。
scanf()
返回此处成功扫描的字段数(0或1)或IO错误或文件结束时的EOF
。
退出循环的唯一方式是输入非数字输入,例如" xyz"。
如果用户关闭stdin
,scanf()
将返回EOF
。 EOF
是负值(不是0)。因此循环将继续调用scanf()
,继续接收EOF
,直到程序被终止。
#include <stdio.h>
int main(void) {
int i;
for (; scanf("%d", &i); printf("%d", i)) {
;
}
return 0;
}