为什么我的程序无法在C中打印真实结果

时间:2019-03-15 16:31:24

标签: c loops

我找到了有关在数组中找到最长字符串并使用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

输出:崩溃!

谢谢。

2 个答案:

答案 0 :(得分:2)

如果最长的字符串是第一个library(dplyr) library(lubridate) #Ensure datetime are in POSIXct format datagps$"Date & Time [Local]" <- dmy_hm(datagps$"Date & Time [Local]") datasensor$"Time" <- dmy_hm(datasensor$"Time") #Left join the data frames left_join(datagps, datasensor, by = c("Date & Time [Local]" = "Time")) ,则永远不会初始化,这将使其成为垃圾,并且很可能为索引该数组提供了巨大的数字。

您应该将其初始化为0:

c

PS:尽管void LongStr(char str[][50],int n) { int Max = strlen(str[0]); int len; int c = 0; // ... } 不会发生此问题,但我还是说将其初始化为某种东西可能是一个好习惯。换句话说,初始化所有变量是一件好事。但是,我已经很长时间没有用len编写代码了,而且我不确定这是否是常规代码。

答案 1 :(得分:1)

真的很简单,这只是代码中缺少的部分

int Max = strlen(str[0]);
int len;
int c;

您需要给c赋予一个值,以说明为什么它不起作用,因为它没有基值,因此请尝试将代码更改为

int Max = strlen(str[0]);
int len;
int c = 0; // base value of 0