【发布时间】:2015-06-29 10:30:14
【问题描述】:
我在这里有一个简单的子程序,它接收一个 char 数组并返回一个布尔值。
我的条件有问题。我通过传递单个字符串“A”来测试它,因此 check_char = 97 并使用短路条件应该为 check_char 提供 false !='a'。子程序应该返回 1。但它总是返回 0。这是为什么呢?这里有什么我没有注意到的问题?
/*
* Checks string of characters and returns 1 if string is a valid DNA sequence and
* returns 0 if string is not a valid DNA sequence.
*/
int is_valid_dna(char *sequence){
int i;
for( i = 0; i < ( sizeof(sequence) / sizeof(sequence[0]) ); i++ ){
int check_char = tolower(sequence[i]);
if( check_char != 'a' || check_char != 'c'
|| check_char != 'g' || check_char != 't' ){
return 0;
}
}
/* If the subroutine made it this far, then the sequence is a valid DNA sequence */
return 1;
}
编辑:谢谢大家。传入数组的大小并在条件中使用 AND 效果很好。
【问题讨论】:
-
在 c/c++ 中的指针不知道它们有多少元素,因此您应该添加另一个参数来指示数组中的 num 个元素
-
@2501 我相信这将是一个有效的 DNA 序列。这不应该是一个严肃的计划。老实说,这是我多年前上过的一门课的旧项目之一,我正在重新编程以进行有趣的/C 练习。
-
@user3370603 没关系,我的假设是错误的。
标签: c pointers if-statement short-circuiting