Почему моя программа не печатает истинный результат в C - PullRequest
0 голосов
/ 15 марта 2019

Я нашел код для нахождения самой длинной строки в массиве и распечатал ее с помощью 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

output: strrev ("SecondLongestString");

Пример:

FirstString

SecondString

ThirdLongestString

output: strrev ("SecondLongestString");

Пример:

FirstLongestString

SecondString

ThirdString

Вывод: сбой!

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Если самая длинная строка является первой, c никогда не инициализируется, что делает его мусором и, скорее всего, огромным числом для индексации массива.

Вы должны инициализировать его равным 0:

void LongStr(char str[][50],int n)
{

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

PS: хотя эта проблема не возникает с len, я бы сказал, что, вероятно, хорошей практикой является инициализация ее для чего-то другого.Другими словами, инициализация всех переменных - это хорошо.Тем не менее, у меня давно нет кода в C, и я не уверен, что это норма.

1 голос
/ 15 марта 2019

Действительно просто, это просто недостающий фрагмент в вашем коде

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

Вам нужно присвоить c значение, почему оно не работает, потому что оно не имеет базового значения, поэтому попробуйте изменитьваш код на

int Max = strlen(str[0]);
int len;
int c = 0; // base value of 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...