#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;
перезаписывает этот элемент первым символом строки. Разве вы не должны только проверять это? В выходном сообщении говорится «Строка после заглавной первой и последней буквы», что не соответствует названию. Учитывая первый комментарий, вы опубликовали неправильный код?