Проверьте, есть ли в СЛОВАХ строки одна и та же первая и последняя буква

#arrays #c #string #input #character

Вопрос:

Мое задание-написать программу на языке Си, в которой пользователь вводит предложение, и программа проверяет, есть ли слова, начинающиеся и заканчивающиеся одной и той же буквой (например, глаз, рев, sos и т. Д.). Я написал это, и я не уверен, что это сработает.

У меня также есть ошибка:

используется неинициализированная локальная переменная ‘p2’.

Может кто-нибудь сказать, где я должен его инициализировать?

Может быть, кто-нибудь может добавить несколько советов по улучшению?

 #include lt;string.hgt; #includelt;ctype.hgt;  int main() {  char str[100], prev, nev;  int length = 0, sym, i, k=0;   printf("Enter a string:n");  while ((getchar()) != '.' || (getchar()) != 'n')  {  gets_s(str);  }   length = strlen(str);   prev = str[0];  nev = str[0];  for (i = 0; i lt; length; i  )  {  if (i == 0)  {  str[i] = toupper(str[i]);  }  else if (str[i] == ' ' || i == (length - 1))  {  str[i - 1] = nev;  if (prev=nev)  {  for (i=k;str[k]=nev;k  )  {  printf("%s", str[k]);  }  }  }  prev = str[i   1];  }   printf("String after capitalizing first and last letter of each word:n%s", str);   return 0; }  

Комментарии:

1. p2 В этом коде я ничего не вижу. Вы имели в виду использовать присваивание, а не сравнение здесь if (prev=nev) и для условия цикла здесь for (i=k;str[k]=nev;k ) ? Вы также инициализируете i , но увеличиваете k , что кажется странным. То, как вы структурируете ввод, выглядит так, как будто он всегда будет отбрасывать символы. Попробуйте распечатать str после того, как вы ввели предложение, и посмотрите, соответствует ли оно вашим ожиданиям. printf Внутренняя часть цикла используется %s для печати строки, но str[k] является символом.

2. Советы по улучшению? Прочитайте документацию по используемым вами функциям. gets_s(str) не хватает аргумента. В этом смысл функций xxxx_s: защитить буфер, сообщив функции его длину.

3. str[i - 1] = nev; перезаписывает этот элемент первым символом строки. Разве вы не должны только проверять это? В выходном сообщении говорится «Строка после заглавной первой и последней буквы», что не соответствует названию. Учитывая первый комментарий, вы опубликовали неправильный код?