
Выбивает ошибку, не считывает введенную строку. Вопрос: почему? Программа должна разделять
введенную пользователем строку на 2: с четными и нечетными символами. #include #include #include #include #include #include int main(){ setlocale(LC_ALL, "rus"); char stroka[1000]; int n; char str1[1000]; char str2[1000]; printf("\nВведите строку\n>> "); scanf_s("%c", stroka); n = strlen(stroka); int length_str1 = n / 2 + n % 2; int length_str2 = n - length_str1; str1[length_str1 + 1]; str2[length_str2 + 1]; str1[length_str1] = str2[length_str2] = '\0'; int j = 0; for (int i = 0; i < n; ++i) { if (i % 2) str2[j++] = stroka[i]; else str1[j] = stroka[i]; } printf("Результат работы программы : \n"); printf("S1 :: %s\n", str1); printf("S2 :: %s\n", str2); return 0;}

Ответы на вопрос

Программа неверно определяла размер строки, считывать строку лучше с помощью функции fgets();
/*
В S2 храним четные, в S1 нечётные;
*/
#include<stdio.h>
#include<locale.h>
#include<string.h>
int main()
{
setlocale(LC_ALL, "rus");
char stroka[1000];
int n;
char str1[1000];
char str2[1000];
printf("\nВведите строку\n>> ");
fgets(stroka, 1000, stdin);
n = strlen(stroka);
int cnt1 = 0, cnt2 = 0;
printf("\n%d\n", n);
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
str2[cnt2] = stroka[i];
cnt2++;
}
else {
str1[cnt1] = stroka[i];
cnt1++;
}
}
str2[cnt2] = '\0';
str1[cnt1] = '\0';
printf("Результат работы программы : \n");
printf("S1 :: %s\n", str1);
printf("S2 :: %s\n", str2);
return 0;
}



Ошибки в программе могут быть вызваны несколькими причинами. Давайте разберемся, почему программа выбивает ошибку и не считывает введенную строку.
Ошибка в функции scanf_s
В данной программе используется функция `scanf_s` для считывания символа с клавиатуры. Однако, в данном случае, она неправильно использована. Функция `scanf_s` требует указание размера буфера для считывания строки, а в данном случае передается только указатель на первый символ строки. Это может привести к ошибке.Неправильное использование оператора scanf_s
В строке `scanf_s("%c", stroka);` необходимо указать размер буфера для считывания символа. В данном случае, размер буфера должен быть 1, так как мы считываем только один символ. Правильное использование будет выглядеть так: `scanf_s("%c", &stroka, 1);`.Неправильное вычисление длины строк
В программе есть ошибка в вычислении длины строк `str1` и `str2`. Вместо использования оператора `+=`, который сложит значение существующей переменной с новым значением, нужно использовать оператор `=`, чтобы присвоить новое значение переменной. Например, вместо `length_str1 += n / 2 + n % 2;` нужно написать `length_str1 = n / 2 + n % 2;`.Неправильное объявление массивов `str1` и `str2`
В программе есть ошибка в объявлении массивов `str1` и `str2`. Вместо использования оператора `++` для увеличения индекса массива, нужно использовать оператор `[]` для доступа к элементу массива. Например, вместо `str1[length_str1+++1];` нужно написать `str1[length_str1 + 1];`.Неправильное присваивание символов массивам `str1` и `str2`
В программе есть ошибка в присваивании символов массивам `str1` и `str2`. Вместо использования оператора `+=`, который сложит значение символа существующего элемента массива с новым символом, нужно использовать оператор `=`, чтобы присвоить новый символ элементу массива. Например, вместо `str1[j] += stroka[i];` нужно написать `str1[j] = stroka[i];`.Неправильное использование оператора for
В цикле `for` в программе есть ошибка в условии. Вместо `i < n` нужно написать `i < n - 1`, чтобы цикл не выходил за границы массива `stroka`.Исправленный код программы
Вот исправленный код программы:```c
#include
int main() { setlocale(LC_ALL, "rus"); char stroka[1000]; int n = 0; char str1[1000]; char str2[1000]; printf("\nВведите строку\n>> "); scanf_s("%s", stroka, sizeof(stroka)); n = strlen(stroka); int length_str1 = n / 2 + n % 2; int length_str2 = n - length_str1; str1[length_str1] = '\0'; str2[length_str2] = '\0'; int j = 0; for (int i = 0; i < n - 1; ++i) { if (i % 2 == 0) str1[j++] = stroka[i]; else str2[j++] = stroka[i]; } printf("Результат работы программы:\n"); printf("S1 :: %s\n", str1); printf("S2 :: %s\n", str2); return 0; } ```
Теперь программа должна корректно считывать введенную строку и разделять ее на две строки: с четными и нечетными символами.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili