Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым - C (СИ)
Формулировка задачи:
Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым введенным символам. Вывести на экран все цифры.
Есть код по вводу массива с условием остановки, но работает он тольео для последнего символа и я не знаю в чем проблема.
И есть код по проверке одного массива на наличие другого, но он не работает и просит только массив вводить, а в ответе выдает непонятно откуда взявшиеся значения
#include "stdafx.h" #include "stdio.h" #include <malloc.h> #include <windows.h> #include <locale.h> int main() { setlocale(LC_ALL, "RUS"); char* A; int i = 2, N; //создание массива A = (char*)malloc(2 * sizeof(char)); printf("Введите массив \n"); //ввод 1ого значения массива scanf_s("%c", &A[0]); //ввод 2ого значения массива scanf_s("%c", &A[1]); //ввод последующих значений массива, перераспределение памяти под массив, условие остановки while (!(A[i - 1] == A[0] && A[i] == A[1])) { i++; A = (char*)realloc(A, (i + 1)*sizeof(char)); scanf_s("%c", &A[i]); } system("pause"); return 0; }
#include "stdafx.h" #include "stdio.h" #include <malloc.h> #include <windows.h> #include <iostream> #include <locale.h> int main() { setlocale(LC_ALL, "ENG"); char num[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; const int n = 10; char A[n]; int i, j; //создание и ввод массива printf("Введите элементы массива А \n"); for (i = 0; i < n; i++) { scanf_s("%d", &A[i]); } printf("Только числа из массива:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (A[i] == num[j]) { printf("%d", A[i]); } } } system("pause"); return 0; }
Решение задачи: «Вводить массив символов до тех пор, пока два последних введенных символа не будут равны двум первым»
textual
Листинг программы
#include <stdio.h> #define SIZE 1000 int main ( void ) { char firstCharacter, secondCharacter, penultimateCharacter; char yourArray[SIZE] = ""; signed short nextCharacter, counter = 1, arrayCounter = 0; puts( "Please enter your sequence: " ); fflush( stdout ); while ( !((nextCharacter = getchar()) == secondCharacter ) || !( penultimateCharacter == firstCharacter )) { yourArray[arrayCounter++] = nextCharacter; penultimateCharacter = nextCharacter; if ( nextCharacter == firstCharacter ) { penultimateCharacter = firstCharacter; continue; } if ( counter == 1 ) { firstCharacter = nextCharacter; ++counter; continue; } if ( counter == 2 ) { secondCharacter = nextCharacter; ++counter; continue; } } puts( "\nIt was found the sequence of the first two characters" ); puts( "The numbers in your sequence is follows: "); for ( arrayCounter = 0; arrayCounter < SIZE; ++arrayCounter ) { if ( yourArray[arrayCounter] >= '0' && yourArray[arrayCounter] <= '9' ) printf( "%2c", yourArray[arrayCounter] ); } puts( "" ); return 0; }
Объяснение кода листинга программы
- В начале определяются переменные:
firstCharacter
secondCharacter
penultimateCharacter
yourArray
- массив символовnextCharacter
counter
- счетчик количества введенных символовarrayCounter
- счетчик для заполнения массива
- Затем выводится сообщение с просьбой ввести последовательность символов.
- Далее идет цикл, который продолжается до тех пор, пока два последних введенных символа не будут равны двум первым.
- Внутри цикла:
- символ добавляется в массив
penultimateCharacter
обновляется- если текущий символ равен первому, то
penultimateCharacter
обновляется - если счетчик равен 1, то первый символ сохраняется и счетчик увеличивается
- если счетчик равен 2, то второй символ сохраняется и счетчик увеличивается
- После окончания цикла выводится сообщение о том, что найдена последовательность из первых двух символов.
- Затем выводится последовательность чисел, введенных в массив, в формате таблицы.
- В конце возвращается 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д