Вопрос задан 18.06.2023 в 08:59. Предмет Информатика. Спрашивает Вишнейский Роландас.

Выбивает ошибку, не считывает введенную строку. Вопрос: почему? Программа должна разделять

введенную пользователем строку на 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;}
0 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;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Ошибки в программе могут быть вызваны несколькими причинами. Давайте разберемся, почему программа выбивает ошибку и не считывает введенную строку.

Ошибка в функции 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 #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; } ```

Теперь программа должна корректно считывать введенную строку и разделять ее на две строки: с четными и нечетными символами.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос