我第一次使用命令行参数,我需要将其中一个字符串参数转换为字符进行测试。我尝试将其作为字符串进行测试,但它不起作用。在程序中,用户需要输入e或E或d或D(代码顶部的样本输入)。我对C中的转换做了很多工作,所以任何帮助都会很棒。感谢。
输入为:Class.forName
./filename 4 1 7 e
答案 0 :(得分:6)
@api.model
def create(self, vals):
a_id = super(YourClassName, self).create(vals)
b_id = self.env['B'].create(vals) # here no one will confirm that both have the same id
a_id.many2one_b_id = b_id # so you can execute write and unlink
return rec_id
@api.muli
def write(self,vals):
# don't forget using api.multi self can contain more than one record
# using mapped is better than looping through records and execute write
# one by one. and using api.one have the same effect
super(YourClassName, self).write(vals)
# using mapped will execute only one update queries for all ids
self.mapped('many2one_b_id').write(vals) # mapped will return the list of B record
return True
@api.multi
def unlink(self):
# same thing for delete
# delete B record first
self.mapped('many2one_b_id').unlink()
super(YourClassName, self).unlinck()
的类型为argv
,因此char **
会指定一个指向字符值的指针;这实际上应该给出警告/错误。
如果您想指定第4个参数的第一个字母,请写下char c = argv[4]
或char c = *(argv[4])
并且不要忘记在访问char c = argv[4][0]
之前检查是否有足够的参数提供,即
argv[4]
请进一步注意,if (argc > 4) {
char c = *(argv[4]);
...
很少有意义,因为任何if(letter != 'd' || letter != 'D' || letter != 'e' || letter != 'E')
条件letter
始终为真,因为letter != 'd' || letter != 'D'
不能同时为letter
和{{1} }} 同时。你可能意味着d
......
答案 1 :(得分:6)
字符串只是一个字符数组,以null结尾。因此,访问数组中的第一个字符:
char letter = argv[4][0];
此外if(letter != 'd' || letter != 'D' || letter != 'e' || letter != 'E')
始终为真,因为letter
不能同时为d和D.你可能意味着if(letter != 'd' && letter != 'D' && letter != 'e' && letter != 'E')
答案 2 :(得分:3)
添加到当前答案:
public createForm() {
this.editForm = this.fb.group({
organizations: this.fb.array(
[this.buildOrganization('text')]
)
});
}
buildOrganization(name: String) {
return new FormGroup({
organizationTitle: new FormControl(name),
regions: this.fb.array(
[this.buildRegion()]
)
})
}
buildRegion() {
return new FormGroup({
regionTitle: new FormControl(''),
})
}
此表达式将始终评估为true。我认为您的意思是在这里使用if(letter != 'd' || letter != 'D' || letter != 'e' || letter != 'E')
而不是&&
。
答案 3 :(得分:1)
因为你是C' C'我可以看到你正在努力指点,我会尝试解释argv
是什么。实际上argv
的类型为char **argv
,与char *argv[]
相同,与char argv[][]
相同。此外,所有参数都以\0
与任何C
字符串一样终止。
然而,即使您确实理解了指针并修复了这些问题,您也会遇到逻辑错误。有些是答案(@Josh指出这个)
if(letter != 'd' || letter != 'D' || letter != 'e' || letter != 'E')
应该是:
if(letter != 'd' && letter != 'D' && letter != 'e' && letter != 'E')
另一个是:
您想捕获参数的 ONE 字母,并检查其他人是否指出d
或e
char letter = argv[4];
应该是
char letter = argv[4][0];
但这会产生另一个问题。如果您输入debug
作为您的最后一个参数,那么首字母仍然是' d',但参数不会是' d'如果按照约书亚的建议解决这条问题:
argv[4]
为debug
,则代码将失败。你需要做的是检查它是否只是一个字母。
if (argv[4][1] != '\0') {
printf ("5th argument is incomatible\n");
return -1;
}
检查参数的第二个字符是' \ 0',这意味着argv [4]只包含一个字母,并以' \ 0'终止。
另一个问题是在检查你是否有足够的参数之前引用。
char letter = argv[4];
if(argc != 5)
{
printf("Error - wrong number of inputs args\n");
return -1;
}
/* more code */
如果你幸运的话,这会给你segfautl
:)。所以为了避免segfautl它应该是:
if(argc != 5)
{
printf("Error - wrong number of inputs args\n");
return -1;
}
char letter = argv[4][0];
/* more code */