Ввести массив строк, число которых заранее неизвестно, имея признаки ввода конца строки и самой матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ввести массив строк, число которых заранее неизвестно. Признаком конца ввода строки является ввод трех подряд символов, не являющихся цифрами, признаком конца ввода массива является ввод строки, не содержащей ни одной цифры. Вывести массив на экран

Решение задачи: «Ввести массив строк, число которых заранее неизвестно, имея признаки ввода конца строки и самой матрицы»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  setlocale(LC_ALL, "RU");
  char **list = NULL;
  int count = 0;
  puts("Вводите строки");
  while(1){
    char *str = NULL;
    int flg = 3;
    int i=0;
    while(flg){
      char ch;
      ch = (char)_getche();
      if((ch >= '0') && (ch <= '9')){
        flg = 3;}
      else{
        --flg;}
      i++;
      str = (char *)realloc(str, (i+1)*sizeof(char));
      if(!str){
        puts("Мало памяти!");
        break;}
      str[i-1] = ch;
      str[i] = '\0';}
    putchar('\n');
    flg = 1;
    for(i=0; str[i]!='\0'; i++){
      if((str[i] >= '0') && (str[i] <= '9')){
        flg = 0;}
    }
    if(flg){
      break;}
    char **tmp = (char **)realloc(list, (count + 1)*sizeof(char *));
    if(!tmp){
      puts("Мало памяти!");
      break;}
    list = tmp;
    list[count] = (char *)malloc(strlen(str) + 1);
    if(!list[count]){
      puts("Мало памяти!");
      break;}
    strcpy(list[count], str);
    count++;
  }
  puts("Введённый массив строк");
  for(int i=0; i<count; i++){
    puts(list[i]);
    free(list[i]);}
  free(list);
  return 0;
}

Объяснение кода листинга программы

В этом коде программа запрашивает у пользователя ввод строк, используя функцию _getche() для получения каждого символа. Сначала определяется флаг, который итерируется до тех пор, пока не встретит символ от '0' до '9'. Когда это происходит, значение флага меняется. Затем, когда введенный символ не является числом, значение флага меняется обратно. Полученная строка добавляется в массив строк, выделенный динамически. Когда пользователь вводит новую строку, программа проверяет, является ли она числом. Если да, то флаг устанавливается в 1. Если в конце ввода все строки оказались нечисловыми, то массив строк выводится на экран. После ввода всех строк, каждая строка проверяется на предмет того, является ли она числовой. Если да, то флаг устанавливается в 1. Если в конце ввода все строки оказались числовыми, то массив строк выводится на экран. Затем все строки освобождаются из памяти, а массив строк освобождается из памяти. Программа возвращает 0, указывая, что она успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы