为什么在我赋予任何价值之前打印此代码?

时间:2019-04-10 02:45:55

标签: c++

为什么在将变量a赋值之前打印此goto? 他应该在判罚后叫b吗?

#include <iostream>
using namespace std;
int main(){

  int a;
  b:cout << a << endl;
  cin >> a;
  goto b;
  return 0;
}

3 个答案:

答案 0 :(得分:3)

它首先输出,因为那是您编码的方式。您正在呼叫cout <<之前先呼叫cin >>

标签不会更改代码流,它只是标记允许goto跳转到的位置。对于您的情况,在声明a之后执行cout >>,然后执行cin <<,然后依次执行cout <<cin >>,依此类推。

您真的根本不应该使用goto。大多数开发人员通常不认为它是代码设计中的不良做法。请改用常规循环,例如:

#include <iostream>
using namespace std;

int main(){
    int a;
    while (cin >> a) {
        cout << a << endl;
    }
    return 0;
}

答案 1 :(得分:1)

确保它像您应该的那样工作。

#include <iostream>
using namespace std;
int main(){

  int a;
  b:
    cin >> a;
    cout << a << endl;
  goto b;
  return 0;
}

答案 2 :(得分:1)

它执行该行,并在运行时稍后有一个goto引用。因此它仍将在cout之前打印,因为这是您定义的方式。标签不会删除代码,只会删除控件。