嵌套在for循环中的switch指令不起作用

时间:2017-05-02 16:25:55

标签: c++ for-loop switch-statement

我是一名c ++自学者,我正在经历这种奇怪的行为。

#include <iostream>
using namespace std;
int main () {
    for (int i=0;i<3;i++) {
        switch(i) {
            case '0' : // do something
                cout << "A" << endl;
            case '1' : // do something else
                cout << "B" << endl;
            // no default set
        }
    }
    return 0;
}

有了这个MWE,为什么不执行switch语句?在我的机器上,使用g ++和cmake进行编译,我看到控制台中没有打印出charachter。

感谢您的帮助!

5 个答案:

答案 0 :(得分:7)

您的switch语句正在启用字符代码'0''1'等,当它应该打开数字 0时,{{1}等等。

此外,您需要在每个部分的末尾添加1语句,否则每个break都会出现在下一部分中。

case

答案 1 :(得分:0)

您正在检查i是否等于'0',等于48。 而是检查它是否等于0

switch(i) {
            case 0 : // do something
                cout << "A" << endl;
            case 1 : // do something else
                cout << "B" << endl;
            // no default set
        }

另请注意,如果break块中没有case个语句,则会继续执行并执行下一个案例。

答案 2 :(得分:0)

您正在将映射的字符与ints混合... char&#39; 0&#39;和int 0没有保持相同的值。

0 是ascii 30 但是&#39; 0 &#39;是 48

使用默认案例可以帮助您找到原因

答案 3 :(得分:0)

我怀疑你的意思是def get_primary_key_related_model(model_class, **kwargs): """ Nested serializers are a mess. https://stackoverflow.com/a/28016439/2689986 This lets us accept ids when saving / updating instead of nested objects. Representation would be into an object (depending on model_class). """ class PrimaryKeyNestedMixin(model_class): def to_internal_value(self, data): try: return model_class.Meta.model.objects.get(pk=data) except model_class.Meta.model.DoesNotExist: self.fail('does_not_exist', pk_value=data) except (TypeError, ValueError): self.fail('incorrect_type', data_type=type(data).__name__) def to_representation(self, data): return model_class.to_representation(self, data) return PrimaryKeyNestedMixin(**kwargs) class AccountSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True, required=False) confirm_password = serializers.CharField(write_only=True, required=False) class Meta: model = Account # ... class PhysicianSerializer(serializers.ModelSerializer): user = get_primary_key_related_model(AccountSerializer) class Meta: model = Physician # ... class而不是case 0:等。差异很微妙,但会导致你的转换永远不会打印任何东西。 '0'的值是字符'0'的基础整数表示,而不是数字0。

答案 4 :(得分:0)

案例标签的值需要与您使用的类型相匹配。

cross-env

表示react-native需要等于字符文字cross-env NODE_ENV=development BABEL_ENV=development_rn react-native run-ios case '0' : // do something cout << "A" << endl; case '1' : // do something else cout << "B" << endl; 。你需要的是像

这样的实际整数
i

另请注意,如果'0''1',则会在没有中断声明case 0 : // do something cout << "A" << endl; case 1 : // do something else cout << "B" << endl; cout << "A" << endl;的情况下执行。