请有人详细解释此代码以及为什么会出现0
源代码:
#include<stdio.h>
void main(){
char *str="Hello";
char *ptr = str;
char least =127;
while (*ptr++)
least = ((*ptr)<(least))?(*ptr):(least);
printf("%d", least);
}
输出:
0
答案 0 :(得分:4)
您似乎正在尝试在字符串中找到最小的ASCII值。
代码的问题在于while()
循环忽略字符串的第一个字节,而是查看'\0'
字符串结束标记。您想要做的是在比较least
之前退出循环。
请改为尝试:
while (*ptr) {
least = ((*ptr)<(least))?(*ptr):(least);
ptr++;
}
答案 1 :(得分:1)
所有问题都是由混淆引起的 - 尝试编写一个尽可能复杂的简单算法(编程错误)。这不仅会导致上述错误,还会降低可读性和性能。
如果您尝试编写简单的算法尽可能简单(良好的编程),那么就没有问题,代码执行速度也会更快:
#include <stdio.h>
#include <limits.h>
int main (void)
{
const char* str="Hello";
char least = CHAR_MAX;
for(size_t i=0; str[i] != '\0'; i++)
{
if(str[i] < least)
{
least = str[i];
}
}
printf("%c = %d", least, least);
}