![](/img/trans.png)
[英]Why does my program return true as the result is expected to be false?
[英]Why my program does not print true result in C
我找到了有关在数组中找到最长字符串并使用strrev()打印的代码。 功能。 我的代码可以成功运行,但是如果我的第一个字符串大于其他字符串,则程序无法理解。
这是我的原型:
void LongStr(char str[][50],int n);
这是我的Main()函数:
int main()
{
char str[size][wsize];
int n;
printf("\n How many words to accept:- ");
scanf("%d",&n);
printf("\n Enter %d words:- \n \n",n);
for(int i = 0; i < n; i++)
scanf("%s", str[i]);
LongStr(str,n);
return 0;
}
这是我的LongStr(); 功能:
void LongStr(char str[][50],int n)
{
int Max = strlen(str[0]);
int len;
int c;
for(int i = 1; i < n; i++)
{
len = strlen(str[i]);
if( len > Max )
{
c = i;
Max = len;
}
}
printf("\n The longest string with reverse model is: \"%s\" \n \n",strrev(str[c]));
}
例:
FirstString
SecondLongestString
ThirdString
输出:strrev(“ SecondLongestString”);
例:
FirstString
SecondString
ThirdLongestString
输出:strrev(“ SecondLongestString”);
例:
FirstLongestString
SecondString
ThirdString
输出:崩溃!
谢谢。
如果最长的字符串是第一个c
则永远不会初始化c
,这将使其成为垃圾,并且很可能有大量的数字对数组进行索引。
您应该将其初始化为0:
void LongStr(char str[][50],int n)
{
int Max = strlen(str[0]);
int len;
int c = 0;
// ...
}
PS:尽管len
不会发生此问题,但我想说也将其初始化为某种东西可能是一个好习惯。 换句话说,初始化所有变量是一件好事。 但是,我已经很长时间没有用C
编写代码了,而且我不确定这是否是规范。
真的很简单,这只是代码中的一部分
int Max = strlen(str[0]);
int len;
int c;
您需要为c
一个值,说明为什么它不起作用,因为它没有基值,因此请尝试将代码更改为
int Max = strlen(str[0]);
int len;
int c = 0; // base value of 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.