我正在为我的C
编程课做例子。其中一个例子就是:
更新:return 0;
和break;
#include<stdio.h>
int main()
{
while(1)
{
printf("Enter number: ");
scanf("%d", &num);
if (num==2)
{
return 0;
}
else
{
printf("Num = %d", num);
}
return 0;
}
我知道while(1)
是一个无限循环。
为了摆脱循环,我通常使用break;
。
但是,在这个例子中,当num=2
失去循环时。
我不明白return o;
如何影响while(1)
循环?
答案 0 :(得分:5)
return 0;
退出您所在的函数,返回值为0
。因此,如果它离开函数,它显然会离开函数中的while
循环。
答案 1 :(得分:5)
return
会立即退出该功能 - 无论工作程序是在做什么。
如果您在while(1)
函数中执行main
循环,return
将立即退出main
函数,这意味着它将退出程序并退出无限循环同样。
如果你在其他函数中执行循环,比如foo
,return
仍会立即退出foo
函数,这仍然意味着它会退出无限循环。
答案 2 :(得分:3)
return终止函数并将控制权返回给调用函数(如果有的话)。 这就是它打破任何循环,条件或其他控制结构的原因。
在这方面,返回值并不重要。
答案 3 :(得分:2)
为了更好地向您解释,可以在代码中添加几行:
import SnapKit
lazy var loadingIndicator: UIActivityIndicatorView = {
let loadingIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
loadingIndicator.sizeToFit()
loadingIndicator.autoresizingMask = [UIViewAutoresizing.flexibleHeight]
loadingIndicator.hidesWhenStopped = true
return loadingIndicator
}()
lazy var logoImageView: UIImageView = {
let logoImageView = UIImageView()
logoImageView.contentMode = UIViewContentMode.scaleAspectFit
logoImageView.backgroundColor = UIColor.white
logoImageView.clipsToBounds = true
return logoImageView
}()
lazy var storeLabel: UILabel = {
let storeLabel = UILabel()
storeLabel.sizeToFit()
storeLabel.font = UIFont.preferredFont(forTextStyle: .footnote)
storeLabel.adjustsFontForContentSizeCategory = true
storeLabel.textColor = UIColor.lightGray
return storeLabel
}()
lazy var priceLabel: UILabel = {
let priceLabel = UILabel()
priceLabel.sizeToFit()
priceLabel.font = UIFont.preferredFont(forTextStyle: .title1)
priceLabel.adjustsFontForContentSizeCategory = true
priceLabel.textColor = UIColor.black
return priceLabel
}()
lazy private var stackView: UIStackView = {
let stackView = UIStackView()
stackView.sizeToFit()
stackView.axis = UILayoutConstraintAxis.vertical
stackView.alignment = UIStackViewAlignment.leading
stackView.distribution = UIStackViewDistribution.fill
stackView.spacing = 0
return stackView
}()
lazy private var priceStackView: UIStackView = {
let priceStackView = UIStackView()
priceStackView.sizeToFit()
priceStackView.axis = UILayoutConstraintAxis.horizontal
priceStackView.alignment = UIStackViewAlignment.center
priceStackView.distribution = UIStackViewDistribution.fill
priceStackView.spacing = 0
return priceStackView
}()
override func draw(_ rect: CGRect) {
super.draw(rect)
let margins = contentView.layoutMarginsGuide
contentView.addSubview(logoImageView)
contentView.addSubview(stackView)
stackView.addArrangedSubview(storeLabel)
stackView.addArrangedSubview(priceStackView)
priceStackView.addArrangedSubview(loadingIndicator)
priceStackView.addArrangedSubview(priceLabel)
logoImageView.snp.makeConstraints { (make) in
make.left.equalTo(layoutMarginsGuide).offset(layoutMargins.left * 0.5)
make.centerY.height.equalTo(layoutMarginsGuide)
make.width.equalTo(logoImageView.snp.height)
}
stackView.snp.makeConstraints { (make) in
make.left.equalTo(logoImageView.snp.right).offset(layoutMargins.left * 1.5)
make.right.centerY.equalTo(margins)
make.height.equalTo(margins).offset(-15)
}
}
并允许#include<stdio.h>
int main()
{
while(1)
{
printf("Enter number: ");
scanf("%d", &num);
if (num==2)
{
return 0;
}
else
{
printf("Num = %d", num);
}
}
printf ("BYE\n");
return 0;
}
代替break
:
return 0;
第一个代码的输出不包括消息“BYE”,其中第二个代码。
因此总结#include<stdio.h>
int main()
{
while(1)
{
printf("Enter number: ");
scanf("%d", &num);
if (num==2)
{
break;
}
else
{
printf("Num = %d", num);
}
}
printf ("BYE\n");
return 0;
}
终止函数并且不执行任何低于它的函数,其中break终止循环并且程序不会在循环中执行剩余的行。